| 狀態碼概述 Web伺服器響應瀏覽器或其他客戶程式的請求時,其應答一般由以下幾個部分組成:一個狀態行,幾個應答頭,一個空行,內容文檔。下面是一個最簡單的應答: HTTP/1.1 200 OK Content-Type: text/plain Hello World 狀態行包含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方法)。 狀態碼 狀態資訊 含義
|