HTTP應答狀態

2022-02-28 13:39:02 字數 1495 閱讀 3368

狀態**概述

web伺服器響應瀏覽器或其他客戶程式的請求時,其應答一般由以下幾個部分組成:乙個狀態行,幾個應答頭,乙個空行,內容文件。下面是乙個最簡單的應答: 

狀態行包含http版本、狀態**、與狀態**對應的簡短說明資訊。在大多數情況下,除了content-type之外的所有應答頭都是可選的。但content-type是必需的,它描述的是後面文件的mime型別。雖然大多數應答都包含乙個文件,但也有一些不包含,例如對head請求的應答永遠不會附帶文件。有許多狀態**實際上用來標識一次失敗的請求,這些應答也不包含文件(或只包含乙個簡短的錯誤資訊說明)。 

servlet可以利用狀態**來實現許多功能。例如,可以把使用者重定向到另乙個**;可以指示出後面的文件是、pdf檔案或html檔案;可以告訴使用者必須提供密碼才能訪問文件;等等。這一部分我們將具體討論各種狀態**的含義以及利用這些**可以做些什麼。 

設定狀態** 

如前所述,http應答狀態行包含http版本、狀態**和對應的狀態資訊。由於狀態資訊直接和狀態**相關,而http版本又由伺服器確定,因此需要servlet設定的只有乙個狀態**。 

servlet設定狀態**一般使用httpservletresponse的setstatus方法。setstatus方法的引數是乙個整數(即狀態**),不過為了使得**具有更好的可讀性,可以用httpservletresponse中定義的常量來避免直接使用整數。這些常量根據http 1.1中的標準狀態資訊命名,所有的名字都加上了sc字首(status code的縮寫)並大寫,同時把空格轉換成了下劃線。也就是說,與狀態**404對應的狀態資訊是「not found」,則httpservletresponse中的對應常量名字為sc_not_found。但有兩個例外:和狀態**302對應的常量根據http 1.0命名,而307沒有對應的常量。 

設定狀態**並非總是意味著不要再返回文件。例如,雖然大多數伺服器返回404應答時會輸出簡單的「file not found」資訊,但servlet也可以定製這個應答。不過,定製應答時應當在通過printwriter傳送任何內容之前先呼叫response.setstatus。 

雖然設定狀態**一般使用的是response.setstauts(int)方法,但為了簡單起見,httpservletresponse為兩種常見的情形提供了專用方法:senderror方法生成乙個404應答,同時生成乙個簡短的html錯誤資訊文件;sendredirect方法生成乙個302應答,同時在location頭中指示新文件的url。 

http 1.1狀態**及其含義 

下表顯示了常見的http 1.1狀態**以及它們對應的狀態資訊和含義。 

應當謹慎地使用那些只有http 1.1支援的狀態**,因為許多瀏覽器還只能夠支援http 1.0。如果你使用了http 1.1特有的狀態**,最好能夠檢查一下請求的http版本號(通過httpservletrequest的getprotocol方法)。 狀態** 狀態資訊 含義 

HTTP應答狀態

狀態 概述 web伺服器響應瀏覽器或其他客戶程式的請求時,其應答一般由以下幾個部分組成 乙個狀態行,幾個應答頭,乙個空行,內容文件。下面是乙個最簡單的應答 狀態行包含http版本 狀態 與狀態 對應的簡短說明資訊。在大多數情況下,除了content type之外的所有應答頭都是可選的。但conten...

http應答分割攻擊

phpbb上的乙個比較經典的漏洞,估計這個攻擊也是因為這個漏洞而來的,沒見到在其它地方出現過這個漏洞。產生原因大概是這樣 phpbb會將使用者請求中的引數放到response的refresh頭中。如 get a.php?url test.php 那麼response中就會多出如下乙個refresh頭...

HTTP請求和應答

1 請求方法 get 是請求方法,表示客戶端以唯讀的方式來申請資源。不對伺服器產生任何其他影響。post 客戶端向伺服器提交資料的方法,這種方法會影響伺服器 伺服器可能根據收到的資料動態建立新的資源,也可能更新原有的資源 get http 1.0 以唯讀的方式申請資源 user agent wget...