HTTP返回状态码的含义比较丰富,随着HTTP版本的变化,状态码也在逐渐增加,以满足越来越多的状态信息传递。
302错误表示被请求的资源暂时转移(Moved
temporatily),然后会给出一个转移后的URL,而浏览器在处理服务器返回的302错误时,原则上会重新建立一个TCP连接,然后再取重定向后
的URL的页面;但是如果页面存在于缓存中,则不重新获取。
404错误表示无法找到请求的资源,一般来说是文件不存在,这时候浏览器直接显示一个错误。
需要说明的是:实际上HTTP/1.1的RFC中对302和404又定义了很多个子状态码,分别表示多种情况,这里不再一一赘述。
一般的网站在用户请求的页面不存在的时候,为了友好起见,会返回一个302错误,然后重定向到一个正常页面。因此可以看出,如果服务器在遭受DDOS静态
页面请求攻击而请求页面又不存在的时候,服务器返回302错误会比404错误消耗的资源更多(当客户端缓存不存在重定向后的页面的时候),因为每次请求会
产生一个附加请求,而这次请求还会产生于一个新的TCP连接上。
如:浏览器缓存中存在重定向后的页面时:
20:08:56. IP 192.168.1.101.2024 > 202.108.22.5.80: S
:(0) win
65535 20:08:56. IP 202.108.22.5.80 > 192.168.1.101.2024: S
:(0) ack
win 2920
20:08:56. IP 192.168.1.101.2024 > 202.108.22.5.80: . ack 1
win 46537
20:08:56. IP 192.168.1.101.2024 > 202.108.22.5.80: P
1:387(386) ack 1 win 46537
20:08:56. IP 202.108.22.5.80 > 192.168.1.101.2024: . ack
387 win 633
20:08:56. IP 202.108.22.5.80 > 192.168.1.101.2024: P
1:436(435) ack 387 win 730
20:08:56. IP 192.168.1.101.2024 > 202.108.22.5.80: . ack
436 win 46483
20:09:56. IP 192.168.1.101.2024 > 202.108.22.5.80: R
387:387(0) ack 436 win 0
从上面的抓包来看,只有一个TCP连接,也只有一次GET请求。在没有缓存的时候:
20:19:27. IP 192.168.1.101.2199 > 202.108.22.5.80: S
:(0) win 65535
20:19:27. IP 202.108.22.5.80 > 192.168.1.101.2199: S
:(0) ack win 2920
20:19:27. IP 192.168.1.101.2199 > 202.108.22.5.80: . ack 1
win 46537
20:19:27. IP 192.168.1.101.2199 > 202.108.22.5.80: P
1:386(385) ack 1 win 46537
20:19:27. IP 202.108.22.5.80 > 192.168.1.101.2199: . ack
386 win 633
20:19:27. IP 202.108.22.5.80 > 192.168.1.101.2199: P
1:436(435) ack 386 win 730
20:19:27. IP 192.168.1.101.2200 > 202.108.22.5.80: S
:(0) win 65535
20:19:27. IP 202.108.22.5.80 > 192.168.1.101.2200: S
:(0) ack win 2920
20:19:27. IP 192.168.1.101.2200 > 202.108.22.5.80: . ack 1
win 46537
20:19:27. IP 192.168.1.101.2200 > 202.108.22.5.80: P
1:390(389) ack 1 win 46537
20:19:27. IP 202.108.22.5.80 > 192.168.1.101.2200: . ack
390 win 632
20:19:27. IP 202.108.22.5.80 > 192.168.1.101.2200: .
1:1421(1420) ack 390 win 730
20:19:27. IP 202.108.22.5.80 > 192.168.1.101.2200: P
1421:1742(321) ack 390 win 730
20:19:27. IP 192.168.1.101.2200 > 202.108.22.5.80: . ack
1742 win 46537
20:19:27. IP 192.168.1.101.2200 > 202.108.22.5.80: P
390:719(329) ack 1742 win 46537
20:19:27. IP 202.108.22.5.80 > 192.168.1.101.2200: .
1742:3162(1420) ack 719 win 730
20:19:27. IP 202.108.22.5.80 > 192.168.1.101.2200: P
3162:3681(519) ack 719 win 730
20:19:27. IP 192.168.1.101.2200 > 202.108.22.5.80: . ack
3681 win 46537
20:19:27. IP 192.168.1.101.2199 > 202.108.22.5.80: . ack
436 win 46483
20:20:27. IP 192.168.1.101.2199 > 202.108.22.5.80: R
386:386(0) ack 436 win 0
20:20:28. IP 202.108.22.5.80 > 192.168.1.101.2200: F
3681:3681(0) ack 719 win 730
20:20:28. IP 192.168.1.101.2200 > 202.108.22.5.80: . ack
3682 win 46537
20:20:32. IP 192.168.1.101.2200 > 202.108.22.5.80: R
719:719(0) ack 3682 win 0
可用看到,产生了两个TCP连接,一个用的是2199端口,一个用的是2200端口。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212380.html原文链接:https://javaforall.net
