HTTP協議介紹(3)

 >>請求頭字段的具體含義
Accept:瀏覽器可接受的MIME類型。 
Accept-Charset:瀏覽器可接受的字符集。 
Accept-Encoding:瀏覽器能夠進行解碼的數據編碼方式,比如gzip。
Accept-Language:瀏覽器所希望的語言種類,當服務器能夠提供一種以上的語言版本時要用到。 
Authorization:授權信息,通常出現在對服務器發送的WWW-Authenticate頭的應答中。 
Connection:表示是否需要持久連接。如果Servlet看到這裏的值爲“Keep-Alive”,或者看到請求使用的是HTTP 1.1(HTTP 1.1默認進行持久連接),它就可以利用持久連接的優點,當頁面包含多個元素時(例如Applet,圖片),顯著地減少下載所需要的時間。要實現這一點, Servlet需要在應答中發送一個Content-Length頭,最簡單的實現方法是:先把內容寫入ByteArrayOutputStream,然後在正式寫出內容之前計算它的大小。
Content-Length:表示請求消息正文的長度。 
Cookie:設置cookie,這是最重要的請求頭信息之一
From:請求發送者的email地址,由一些特殊的Web客戶程序使用,瀏覽器不會用到它。 
Host:初始URL中的主機和端口。 
If-Modified-Since:只有當所請求的內容在指定的日期之後又經過修改才返回它,否則返回304“Not Modified”應答。 
Pragma:指定“no-cache”值表示服務器必須返回一個刷新後的文檔,即使它是代理服務器而且已經有了頁面的本地拷貝。 
Referer:包含一個URL,用戶從該URL代表的頁面出發訪問當前請求的頁面。 
User-Agent:瀏覽器類型,如果Servlet返回的內容與瀏覽器類型有關則該值非常有用。
UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE瀏覽器所發送的非標準的請求頭,表示屏幕大小、顏色深度、操作系統和CPU類型。 
響應頭字段 
響應頭字段僅用於響應消息。
  名稱          示例值 
Accept-Ranges                      "none" 
Age             "2147483648(2^31)" 
ETag           "b38b9-17dd-367c5dcd" 
Last-Modified                    "Tue, 11 Jul 2000 18:23:51 GMT" 
Location              "http://localhost/redirecttarget.asp
Proxy-Authenticate [challenge] 
Retry-After                  "Tue, 11 Jul 2000 18:23:51 GMT" or "60" 
Server               "Microsoft-IIS/5.0" 
Vary           "Date" 
WWW-Authenticate [challenge] 
實體頭字段 
實體頭字段可以用於請求消息或響應消息。實體頭字段中包含消息實體正文的有關信息,如使用的編碼格式。
   名稱            示例值 
Allow              "GET, HEAD" 
Content-Encoding                            "gzip" 
Content-Language                            "en" 
Content-Length                          "8445" 
Content-Location                           "http://localhost/page.asp
Content-MD5                       [md5-digest] 
Content-Range                            "bytes 2543-4532/7898" 
Content-Type                        "text/html" 
Expires                      "Tue, 11 Jul 2000 18:23:51 GMT" 
Last-Modified                           "Tue, 11 Jul 2000 18:23:51 GMT" 
>>實體頭字段的具體含義
Allow 服務器支持哪些請求方法(如GET、POST等)。
Content-Encoding 文檔的編碼(Encode)方法。只有在解碼之後纔可以得到Content-Type頭指定的內容類型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的下載時間。Java的GZIPOutputStream可以很方便地進行gzip壓縮,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。
Content-Length 表示內容長度。只有當瀏覽器使用持久HTTP連接時才需要這個數據。
Content-Type 表示後面的文檔屬於什麼MIME類型。Servlet默認爲text/plain,但通常需要顯式地指定爲text/html。
Date 當前的GMT時間。你可以用setDateHeader來設置這個頭以避免轉換時間格式的麻煩。 
Expires 應該在什麼時候認爲文檔已經過期,從而不再緩存它? 
Last-Modified 文檔的最後改動時間。客戶可以通過If-Modified-Since請求頭提供一個日期,該請求將被視爲一個條件GET,只有改動時間遲於指定時間的文檔纔會返回,否則返回一個304(Not Modified)狀態。
Location 表示客戶應當到哪裏去提取文檔。Location通常不是直接設置的,而是通過HttpServletResponse的sendRedirect方法,該方法同時設置狀態代碼爲302。 
Refresh 表示瀏覽器應該在多少時間之後刷新文檔,以秒計。除了刷新當前文檔之外,你還可以通過setHeader("Refresh", "5; URL=http://host/path")讓瀏覽器讀取指定的頁面。 
注意這種功能通常是通過設置HTML頁面HEAD區的<META HTTP-EQUIV="Refresh" C>實現,這是因爲,自動刷新或重定向對於那些不能使用CGI或Servlet的HTML編寫者十分重要。但是,對於Servlet來說,直接設置 Refresh頭更加方便。 
注意Refresh的意義是“N秒之後刷新本頁面或訪問指定頁面”,而不是“每隔N秒刷新本頁面或訪問指定頁面 ”。因此,連續刷新要求每次都發送一個Refresh頭,而發送204狀態代碼則可以阻止瀏覽器繼續刷新,不管是使用Refresh頭還是<META HTTP-EQUIV="Refresh" ...>。 
注意Refresh頭不屬於HTTP 1.1正式規範的一部分,而是一個擴展,但Netscape和IE都支持它。 
請求頭示例
以下是 HTTP 請求的簡單示例。
GET /articles/news/today.asp HTTP/1.1
Accept: */*
Accept-Language: en-us
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/links.asp
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Accept-Encoding: gzip, deflate
該請求具有請求行,其中包括方法 (GET)、資源路徑 (/articles/news/today.asp) 和 HTTP 版本 (HTTP/1.1)。由於該請求沒有正文,故所有請求行後面的內容都是頭的一部分。緊接着頭之後是一個空行,表示頭已結束。
響應頭示例
Web 服務器可以通過多種方式響應前一個請求。假設文件是可以訪問的,並且用戶具有查看該文件的權限,則響應類似於:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 13 Jul 2000 05:46:53 GMT
Content-Length: 2291
Content-Type: text/html
Set-Cookie: ASPSESSIONIDQQGGGNCG=LKLDFFKCINFLDMFHCBCBMFLJ; path=/
Cache-control: private
...
響應的第一行稱爲狀態行。它包含響應所用的 HTTP 版本、狀態編碼 (200) 和原因短語。示例中包含一個頭,其中具有五個字段,接着是一個空行(回車和換行符),然後是響應正文的頭兩行。
有關HTTP頭完整、詳細的說明,請參見http://www.w3.org/Protocols/的HTTP規範。
 
附錄:HTTP協議狀態碼的含義
  狀態代碼 狀態信息 含義 
100 Continue 初始的請求已經接受,客戶應當繼續發送請求的其餘部分。(HTTP 1.1新)
101 Switching Protocols 服務器將遵從客戶的請求轉換到另外一種協議(HTTP 1.1新
200 OK 一切正常,對GET和POST請求的應答文檔跟在後面。
201 Created 服務器已經創建了文檔,Location頭給出了它的URL。
202 Accepted 已經接受請求,但處理尚未完成。 
203 Non-Authoritative Information 文檔已經正常地返回,但一些應答頭可能不正確,因爲使用的是文檔的拷貝(HTTP 1.1新)。 
204 No Content 沒有新文檔,瀏覽器應該繼續顯示原來的文檔。
205 Reset Content 沒有新的內容,但瀏覽器應該重置它所顯示的內容。用來強制瀏覽器清除表單輸入內容(HTTP 1.1新)。 
206 Partial Content 客戶發送了一個帶有Range頭的GET請求,服務器完成了它(HTTP 1.1新)。 
300 Multiple Choices 客戶請求的文檔可以在多個位置找到,這些位置已經在返回的文檔內列出。如果服務器要提出優先選擇,則應該在Location應答頭指明。 
301 Moved Permanently 客戶請求的文檔在其他地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL。 
302 Found 類似於301,但新的URL應該被視爲臨時性的替代,而不是永久性的。注意,在HTTP1.0中對應的狀態信息是“Moved Temporatily”,出現該狀態代碼時,瀏覽器能夠自動訪問新的URL,因此它是一個很有用的狀態代碼。注意這個狀態代碼有時候可以和301替換使用。例如,如果瀏覽器錯誤地請求http://host/~user(缺少了後面的斜槓),有的服務器返回301,有的則返回302。嚴格地說,我們只能假定只有當原來的請求是GET時瀏覽器纔會自動重定向。請參見307。 
303 See Other 類似於301/302,不同之處在於,如果原來的請求是POST,Location頭指定的重定向目標文檔應該通過GET提取(HTTP 1.1新)。 
304 Not Modified 客戶端有緩衝的文檔併發出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩衝的文檔還可以繼續使用。
305 Use Proxy 客戶請求的文檔應該通過Location頭所指明的代理服務器提取(HTTP 1.1新)。
307 Temporary Redirect 和302(Found)相同。許多瀏覽器會錯誤地響應302應答進行重定向,即使原來的請求是POST,即使它實際上只能在POST請求的應答是303時才能重定向。由於這個原因,HTTP 1.1新增了307,以便更加清除地區分幾個狀態代碼:當出現303應答時,瀏覽器可以跟隨重定向的GET和POST請求;如果是307應答,則瀏覽器只能跟隨對GET請求的重定向。(HTTP 1.1新) 
400 Bad Request 請求出現語法錯誤。 
401 Unauthorized 客戶試圖未經授權訪問受密碼保護的頁面。應答中會包含一個WWW-Authenticate頭,瀏覽器據此顯示用戶名字/密碼對話框,然後在填寫合適的Authorization頭後再次發出請求。 
403 Forbidden 資源不可用。服務器理解客戶的請求,但拒絕處理它。通常由於服務器上文件或目錄的權限設置導致。 
404 Not Found 無法找到指定位置的資源。這也是一個常用的應答, 
405 Method Not Allowed 請求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)對指定的資源不適用。(HTTP 1.1新) 
406 Not Acceptable 指定的資源已經找到,但它的MIME類型和客戶在Accpet頭中所指定的不兼容(HTTP 1.1新)。 
407 Proxy Authentication Required 類似於401,表示客戶必須先經過代理服務器的授權。(HTTP 1.1新)
408 Request Timeout 在服務器許可的等待時間內,客戶一直沒有發出任何請求。客戶可以在以後重複同一請求。(HTTP 1.1新) 
409 Conflict 通常和PUT請求有關。由於請求和資源的當前狀態相沖突,因此請求不能成功。(HTTP 1.1新)
410 Gone 所請求的文檔已經不再可用,而且服務器不知道應該重定向到哪一個地址。它和404的不同在於,返回407表示文檔永久地離開了指定的位置,而404表示由於未知的原因文檔不可用。(HTTP 1.1新)
411 Length Required 服務器不能處理請求,除非客戶發送一個Content-Length頭。(HTTP 1.1新)
412 Precondition Failed 請求頭中指定的一些前提條件失敗(HTTP 1.1新)。 
413 Request Entity Too Large 目標文檔的大小超過服務器當前願意處理的大小。如果服務器認爲自己能夠稍後再處理該請求,則應該提供一個Retry-After頭(HTTP 1.1新)。 
414 Request URI Too Long URI太長(HTTP 1.1新)。 
416 Requested Range Not Satisfiable 服務器不能滿足客戶在請求中指定的Range頭。(HTTP 1.1新) 
500 Internal Server Error 服務器遇到了意料不到的情況,不能完成客戶的請求。 
501 Not Implemented 服務器不支持實現請求所需要的功能。例如,客戶發出了一個服務器不支持的PUT請求。
502 Bad Gateway 服務器作爲網關或者代理時,爲了完成請求訪問下一個服務器,但該服務器返回了非法的應答。 
503 Service Unavailable 服務器由於維護或者負載過重未能應答。
504 Gateway Timeout 由作爲代理或網關的服務器使用,表示不能及時地從遠程服務器獲得應答。(HTTP 1.1新) 
505 HTTP Version Not Supported 服務器不支持請求中所指明的HTTP版本

(本章完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章