天天看點

java get請求 302_HTTP 302錯誤和HTTP 404錯誤淺析

HTTP傳回狀态碼的含義比較豐富,随着HTTP版本的變化,狀态碼也在逐漸增加,以滿足越來越多的狀态資訊傳遞。

302錯誤表示被請求的資源暫時轉移(Moved

temporatily),然後會給出一個轉移後的URL,而浏覽器在處理伺服器傳回的302錯誤時,原則上會重建立立一個TCP連接配接,然後再取重定向後

的URL的頁面;但是如果頁面存在于緩存中,則不重新擷取。

404錯誤表示無法找到請求的資源,一般來說是檔案不存在,這時候浏覽器直接顯示一個錯誤。

需要說明的是:實際上HTTP/1.1的RFC中對302和404又定義了很多個子狀态碼,分别表示多種情況,這裡不再一一贅述。

一般的網站在使用者請求的頁面不存在的時候,為了友好起見,會傳回一個302錯誤,然後重定向到一個正常頁面。是以可以看出,如果伺服器在遭受DDOS靜态

頁面請求攻擊而請求頁面又不存在的時候,伺服器傳回302錯誤會比404錯誤消耗的資源更多(當用戶端緩存不存在重定向後的頁面的時候),因為每次請求會

産生一個附加請求,而這次請求還會産生于一個新的TCP連接配接上。

如:浏覽器緩存中存在重定向後的頁面時:

20:08:56.343584 IP 192.168.1.101.2024 > 202.108.22.5.80: S

71017818:71017818(0) win

65535 20:08:56.374726 IP 202.108.22.5.80 > 192.168.1.101.2024: S

3060545990:3060545990(0) ack

71017819 win 2920

20:08:56.374760 IP 192.168.1.101.2024 > 202.108.22.5.80: . ack 1

win 46537

20:08:56.374939 IP 192.168.1.101.2024 > 202.108.22.5.80: P

1:387(386) ack 1 win 46537

20:08:56.409736 IP 202.108.22.5.80 > 192.168.1.101.2024: . ack

387 win 633

20:08:56.412714 IP 202.108.22.5.80 > 192.168.1.101.2024: P

1:436(435) ack 387 win 730

20:08:56.550066 IP 192.168.1.101.2024 > 202.108.22.5.80: . ack

436 win 46483

20:09:56.550674 IP 192.168.1.101.2024 > 202.108.22.5.80: R

387:387(0) ack 436 win 0

從上面的抓包來看,隻有一個TCP連接配接,也隻有一次GET請求。在沒有緩存的時候:

20:19:27.639228 IP 192.168.1.101.2199 > 202.108.22.5.80: S

3150289762:3150289762(0) win 65535

20:19:27.670576 IP 202.108.22.5.80 > 192.168.1.101.2199: S

3636433172:3636433172(0) ack 3150289763 win 2920

20:19:27.670628 IP 192.168.1.101.2199 > 202.108.22.5.80: . ack 1

win 46537

20:19:27.670864 IP 192.168.1.101.2199 > 202.108.22.5.80: P

1:386(385) ack 1 win 46537

20:19:27.705522 IP 202.108.22.5.80 > 192.168.1.101.2199: . ack

386 win 633

20:19:27.708550 IP 202.108.22.5.80 > 192.168.1.101.2199: P

1:436(435) ack 386 win 730

20:19:27.742161 IP 192.168.1.101.2200 > 202.108.22.5.80: S

4011694727:4011694727(0) win 65535

20:19:27.770606 IP 202.108.22.5.80 > 192.168.1.101.2200: S

3523825087:3523825087(0) ack 4011694728 win 2920

20:19:27.770631 IP 192.168.1.101.2200 > 202.108.22.5.80: . ack 1

win 46537

20:19:27.770784 IP 192.168.1.101.2200 > 202.108.22.5.80: P

1:390(389) ack 1 win 46537

20:19:27.805550 IP 202.108.22.5.80 > 192.168.1.101.2200: . ack

390 win 632

20:19:27.811804 IP 202.108.22.5.80 > 192.168.1.101.2200: .

1:1421(1420) ack 390 win 730

20:19:27.812486 IP 202.108.22.5.80 > 192.168.1.101.2200: P

1421:1742(321) ack 390 win 730

20:19:27.812501 IP 192.168.1.101.2200 > 202.108.22.5.80: . ack

1742 win 46537

20:19:27.816437 IP 192.168.1.101.2200 > 202.108.22.5.80: P

390:719(329) ack 1742 win 46537

20:19:27.855014 IP 202.108.22.5.80 > 192.168.1.101.2200: .

1742:3162(1420) ack 719 win 730

20:19:27.856652 IP 202.108.22.5.80 > 192.168.1.101.2200: P

3162:3681(519) ack 719 win 730

20:19:27.856674 IP 192.168.1.101.2200 > 202.108.22.5.80: . ack

3681 win 46537

20:19:27.869872 IP 192.168.1.101.2199 > 202.108.22.5.80: . ack

436 win 46483

20:20:27.857048 IP 192.168.1.101.2199 > 202.108.22.5.80: R

386:386(0) ack 436 win 0

20:20:28.277933 IP 202.108.22.5.80 > 192.168.1.101.2200: F

3681:3681(0) ack 719 win 730

20:20:28.277969 IP 192.168.1.101.2200 > 202.108.22.5.80: . ack

3682 win 46537

20:20:32.857107 IP 192.168.1.101.2200 > 202.108.22.5.80: R

719:719(0) ack 3682 win 0

可用看到,産生了兩個TCP連接配接,一個用的是2199端口,一個用的是2200端口。