接着第一篇學習....html
5 頭域(首部)web
每一個頭域由一個域名,冒號(:)和域值三部分組成。域名是大小寫無關的,域值前能夠添加任何數量的空格符,頭域能夠被擴展爲多行,在每行開始處,使用至少一個空格或製表符。瀏覽器
在抓包的圖中,No14點開可看到如圖4所示:緩存
圖4 http請求消息安全
迴應的消息如圖5所示:服務器
圖5 http狀態響應信息cookie
5.1 通用首部app
通用首部:既能夠出如今請求報文中,也能夠出如今響應報文中。這些是客戶端和服務器均可以使用的通用首部。能夠在客戶端、服務器和其餘應用程序之間提供一些很是有用的通用功能。不論報文是何種類型,都爲其提供一些有用的信息。例如無論是構建請求報文仍是響應報文,建立報文的日期時間都是同一個意思,所以提供這類信息的首部對這兩種類型的報文來講都是通用的。下面用表格的形式給出通用的信息性首部。學習
通用的信息性首部:優化
首部 描述
Connection 容許客戶端和服務器指定與請求/響應鏈接有關的選項
Date 提供日期和時間標誌,說明報文是什麼時間建立的
MIME-Version 給出了發送端使用的MIME版本
Trailer 若是報文采用了分塊傳輸編碼(chunked transfer encoding)方式,就能夠用這個首部列出位於報文拖鞋 (trailer)部分的首部集合。
Transfer-Encoding 告知接收端爲了保證報文的可靠傳輸,對報文采用了什麼編碼方式。
Update 給出了發送端可能想要"升級"使用的新版本或協議
Via 顯示了報文通過的中間節點(代理、網關)
通用緩存首部:
首部 描述
Cache-Control 用於隨報文傳送緩存指示
Pragma 另外一種隨報文傳送指示的方式,但並不專用於緩存
b.請求首部:提供更多有關請求的信息。請求首部是在請求報文中有意義的首部。用於說明是誰或什麼在發送請求,請求源自何處,或者客戶端的喜愛及能力。服務器能夠根據請求首部給出的客戶端的信息,試着爲客戶端提供更好的響應。
首部 描述
Client-IP 提供了運行客戶端的機器的IP地址
From 提供了客戶端用戶的E-mail地址
Host 給出了接收請求的服務器的主機名和端口號
Referer 提供了包含當前請求URI的文檔的URL
UA-Color 提供了與客戶端顯示器的顯示顏色有關的信息
UA-CPU 給出了客戶端CPU的類型或製造商
US-Disp 提供了與客戶端顯示器(屏幕)能力有關的信息
US-OS 給出了客戶端顯示器的像素信息
UA-Pixels 提供了客戶端顯示器的像素信息
User-Agent 將發起請求的應用程序名稱告知服務器(User-Agent)用戶代理
Accept首部爲客戶端提供了一種將其喜愛和能力告知服務器的方式,包括他們想要什麼,可使用什麼,以及最重要的,他們不想要什麼。這樣服務器就能夠根據這些額外信息,對要發送的內容作出更明智的決定。Accept首部會使鏈接的兩端都受益。客戶端會獲得他們想要的內容,服務器則不會浪費其時間和帶寬來發送客戶端沒法使用的東西。
首部 描述
Accept 告訴服務器可以發送哪些媒體類型
Accept-Charset 告訴服務器可以發送哪些字符集
Accept-Encoding 告訴服務器可以發送哪些編碼方式
Accept-Language 告訴服務器可以發送哪些語言
TE 告訴服務器可使用哪些擴展傳輸編碼
條件請求首部:有時客戶端但願爲請求加上某些限制。好比客戶端已經有了一份副本,就但願只在服務器上的文檔與客戶端擁有的副本有所區別時,才請求服務器傳輸文檔。經過條件請求首部,客戶端就能夠加上這種限制,要求服務器在對請求進行相應以前,確保某個請求爲真。
首部 描述
Expect 容許客戶端列出某請求所要求的服務器行爲
If-Match 若是實體標記與文檔當前的實體標記相匹配,就或者這份文檔
If-Modified-Since 除非在某個指定的日期以後資源被修改過,不然就限制這個請求
If-Range 容許對文檔的某個範圍進行條件請求
If-Unmodified-Since 除非在某個指定的日期以後資源沒有被修改過,不然就限制這個請求
Range 若是服務器支持範圍請求,就請求資源的指定範圍
安全請求首部:HTTP自己就支持一種簡單的機制,能夠對請求進行質詢/響應認證。這種機制要求客戶端在獲取特定的資源以前,先對自身進行認證,這樣就可使事務稍微安全一些。
首部 描述
Authorization 包含了客戶端提供給服務器,以便對其自身進行認證的數據
Cookie 客戶端用它想服務器傳送一個令牌-他並非真正的安全首部,但倒是隱含了安全功能
Cookie2 用來講明請求端支持的cookie版本
代理請求首部:隨着因特網上代理的廣泛應用,人們定義了幾個首部來協助其更好地工做。
首部 描述
Max-Forword 在通往源端服務器的路徑上,將請求轉發給其餘代理或網關的最大次數-與TRACE方法一同使用
Proxy-Authorization 與Authorization首部相同,但這個首部是在與代理進行認證時使用的
Proxy-Connection 與Connection首部相同,但這個首部是在於代理創建鏈接時使用的
c.響應首部:提供更多有關響應的信息。響應報文由本身的響應首部集。響應首部爲客戶端提供了一些額外的信息,好比誰在發送響應、響應者的功能,甚至與響應相關的一些特殊指令。這些首部有助於客 戶端處理響應,並在未來發起更好的請求。
首部 描述
Age (從最初建立開始)響應持續時間
Public 服務器爲其資源支持的請求方法列表
Retry-After 若是資源不可用的話,再第二天期或時間重試
Server 服務器應用程序軟件的名稱和版本
Title 對HTML文檔來講,就是HTML文檔的源端給出的標題
Warning 比緣由短語中更詳細的一些警告報文
協商首部:若是資源有多種表示方法-好比,若是服務器上有某文檔的法語和德語譯稿,HTTP/1能夠爲服務器和客戶端提供對資源進行協商的能力。
首部 描述
Accept-Ranges 對此資源來講,服務器可接受的範圍類型
Vary 服務器查看的其餘首部的列表,可能會使響應發生變化;也就是說,這是一個首部列表,服務器會根據這些首部的內容挑選出最合適的資源版本發送給客戶端。
安全響應首部:
咱們已經看到過安全請求首部了,本質上這裏說的就是HTTP的質詢/響應認證機制的響應側。
首部 描述
Proxy-Authenticate 來自代理的對客戶端的質詢列表
Set-Cookie 不是真正的安全首部,但隱含有安全功能;能夠在客戶端設置一個令牌,以便服務器對客戶端進行標識。
Set-Cookie2 與Set-Cookie相似。
WWW-Authenticate 來自服務器的對客戶端的質詢列表
d、實體首部:描述主體的長度和內容,或者資源自身。有不少首部能夠用來描述HTTP報文的負荷。因爲請求和響應文本中均可能包含實體部分,因此在這兩種類型的報文中均可能出現這些首部。實體首部提供了有關實體及其內容的大量信息,從有關對象類型的信息,到可以對資源使用的各類有效的請求方法。總之,實體首部能夠告知報文的接收者它在對什麼進行處理。
首部 描述
Allow 列出了能夠對此實體執行的請求方法
Location 告知客戶端實體實際上位於何處;用於將接收端定向到資源的位置上去
內容首部:內容首部提供了與實體內容有關的特定信息,說明了其類型、尺寸以及處理它所需的其餘有用信息。好比,Web瀏覽器能夠經過查看返回的內容類型,得知如何顯示對象。
首部 描述
Content-Base 解析主體中的相對URL時使用的基礎URL
Content-Encoding 對主體執行的任意編碼方式
Content-Language 理解主體時最適宜使用的天然語言
Content-Length 主體的長度或尺寸
Content-Location 資源實際所處的位置
Content-MD5 主體的MD5校驗
Content-Range 在整個資源中此實體表示的字節範圍
Content-Type 這個主體的對象模型
實體緩存首部:通用的緩存首部說明了如何或何時進行緩存。實體的緩存首部提供了與被緩存實體有關的信息,好比驗證已緩存的資源副本是否仍然有效所需的信息,以及更好地估計已緩存資源合適失效所需的線索。
首部 描述
ETag 與此實體有關的實體標記
Expires 實體不在有效,要從原始的源端再次獲取此實體的日期和時間
Last-Modified 這個實體最後一次被修改的日期和時間
首部行有的時候爲了提升可讀性會被分爲多行來提升可讀性,將其值劃分爲多個延續行,每一個延續行的前面至少要有一個空格或者一個製表符。請求報文的實體是一些須要發送的備註性信息。
5.2 請求頭
HTTP最多見的請求頭以下:
1 Accept:瀏覽器可接受的MIME類型;
2 Accept-Charset:瀏覽器可接受的字符集;
3 Accept-Encoding:瀏覽器可以進行解碼的數據編碼方式,好比gzip。Servlet可以向支持gzip的瀏覽器返回經gzip編碼的HTML頁面。許多情形下這能夠減小5到10倍的下載時間;
4 Accept-Language:瀏覽器所但願的語言種類,當服務器可以提供一種以上的語言版本時要用到;
5 Authorization:受權信息,一般出如今對服務器發送的WWW-Authenticate頭的應答中;
6 Connection:表示是否須要持久鏈接。若是Servlet看到這裏的值爲「Keep-Alive」,或者看到請求使用的是HTTP 1(HTTP 1默認進行持久鏈接),它就能夠利用持久鏈接的優勢,當頁面包含多個元素時(例如Applet,圖片),顯著地減小下載所須要的時間。要實現這一點,Servlet須要在應答中發送一個Content-Length頭,最簡單的實現方法是:先把內容寫入ByteArrayOutputStream,而後在正式寫出內容以前計算它的大小;
7 Content-Length:表示請求消息正文的長度;
8 Cookie:這是最重要的請求頭信息之一;
9 From:請求發送者的email地址,由一些特殊的Web客戶程序使用,瀏覽器不會用到它;
10 Host:初始URL中的主機和端口;指定請求資源的Intenet主機和端口號,必須表示請求url的原始服務器或網關的位置。HTTP/1請求必須包含主機頭域,不然系統會以400狀態碼返回。
11 If-Modified-Since:只有當所請求的內容在指定的日期以後又通過修改才返回它,不然返回304「Not Modified」應答;
12 Pragma:指定「no-cache」值表示服務器必須返回一個刷新後的文檔,即便它是代理服務器並且已經有了頁面的本地拷貝;
13 Referer:包含一個URL,用戶從該URL表明的頁面出發訪問當前請求的頁面。Referer頭域容許客戶端指定請求uri的源資源地址,這能夠容許服務器生成回退鏈表,可用來登錄、優化cache等。他也容許廢除的或錯誤的鏈接因爲維護的目的被追蹤。若是請求的uri沒有本身的uri地址,Referer不能被髮送。若是指定的是部分uri地址,則此地址應該是一個相對地址。
14 User-Agent:瀏覽器類型,若是Servlet返回的內容與瀏覽器類型有關則該值很是有用;
15 UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE瀏覽器所發送的非標準的請求頭,表示屏幕大小、顏色深度、操做系統和CPU類型。
16 Cache-Control 指定請求和響應遵循的緩存機制。在請求消息或響應消息中設置Cache-Control並不會修改另外一個消息處理過程當中的緩存處理過程。請求時的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。
5.3 響應頭
HTTP最多見的響應頭以下所示:
1 Allow:服務器支持哪些請求方法(如GET、POST等);
2 Content-Encoding:文檔的編碼(Encode)方法。只有在解碼以後才能夠獲得Content-Type頭指定的內容類型。利用gzip壓縮文檔可以顯著地減小HTML文檔的下載時間。Java的GZIPOutputStream能夠很方便地進行gzip壓縮,但只有Unix上的Netscape和Windows上的IE 四、IE 5才支持它。所以,Servlet應該經過查看Accept-Encoding頭(即request.getHeader("Accept-Encoding"))檢查瀏覽器是否支持gzip,爲支持gzip的瀏覽器返回經gzip壓縮的HTML頁面,爲其餘瀏覽器返回普通頁面;
3 Content-Length:表示內容長度。只有當瀏覽器使用持久HTTP鏈接時才須要這個數據。若是你想要利用持久鏈接的優點,能夠把輸出文檔寫入ByteArrayOutputStram,完成後查看其大小,而後把該值放入Content-Length頭,最後經過byteArrayStream.writeTo(response.getOutputStream()發送內容;
4 Content-Type: 表示後面的文檔屬於什麼MIME類型。Servlet默認爲text/plain,但一般須要顯式地指定爲text/html。因爲常常要設置Content-Type,所以HttpServletResponse提供了一個專用的方法setContentTyep。 可在web.xml文件中配置擴展名和MIME類型的對應關係;
5 Date:當前的GMT時間。你能夠用setDateHeader來設置這個頭以免轉換時間格式的麻煩;
6 Expires:指明應該在何時認爲文檔已通過期,從而再也不緩存它。
7 Last-Modified:文檔的最後改動時間。客戶能夠經過If-Modified-Since請求頭提供一個日期,該請求將被視爲一個條件GET,只有改動時間遲於指定時間的文檔纔會返回,不然返回一個304(Not Modified)狀態。Last-Modified也可用setDateHeader方法來設置;
8 Location:表示客戶應當到哪裏去提取文檔。Location一般不是直接設置的,而是經過HttpServletResponse的sendRedirect方法,該方法同時設置狀態代碼爲302;
9 Refresh:表示瀏覽器應該在多少時間以後刷新文檔,以秒計。除了刷新當前文檔以外,你還能夠經過setHeader("Refresh", "5; URL=http://host/path")讓瀏覽器讀取指定的頁面。注意這種功能一般是經過設置HTML頁面HEAD區的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">實現,這是由於,自動刷新或重定向對於那些不能使用CGI或Servlet的HTML編寫者十分重要。可是,對於Servlet來講,直接設置Refresh頭更加方便。注意Refresh的意義是「N秒以後刷新本頁面或訪問指定頁面」,而不是「每隔N秒刷新本頁面或訪問指定頁面」。所以,連續刷新要求每次都發送一個Refresh頭,而發送204狀態代碼則能夠阻止瀏覽器繼續刷新,無論是使用Refresh頭仍是<META HTTP-EQUIV="Refresh" ...>。注意Refresh頭不屬於HTTP 1正式規範的一部分,而是一個擴展,但Netscape和IE都支持它。
5.4實體頭
實體頭用坐實體內容的元信息,描述了實體內容的屬性,包括實體信息類型,長度,壓縮方法,最後一次修改時間,數據有效性等。
1 Allow:GET,POST
2 Content-Encoding:文檔的編碼(Encode)方法,例如:gzip
3 Content-Language:內容的語言類型,例如:zh-cn;
4 Content-Length:表示內容長度,eg:80,可參考「2.5響應頭」;
5 Content-Location:表示客戶應當到哪裏去提取文檔,例如:http://www.dfdf.org/dfdf.html,可參考「2.5響應頭」;
6 Content-MD5:MD5 實體的一種MD5摘要,用做校驗和。發送方和接受方都計算MD5摘要,接受方將其計算的值與此頭標中傳遞的值進行比較。Eg1:Content-MD5: <base64 of 128 MD5 digest>。Eg2:dfdfdfdfdfdfdff==;
7 Content-Range:隨部分實體一同發送;標明被插入字節的低位與高位字節偏移,也標明此實體的總長度。Eg1:Content-Range: 1001-2000/5000,eg2:bytes 2543-4532/7898
8 Content-Type:標明發送或者接收的實體的MIME類型。Eg:text/html; charset=GB2312,主類型/子類型;
9 Expires:爲0證實不緩存;
10 Last-Modified:WEB 服務器認爲對象的最後修改時間,好比文件的最後修改時間,動態頁面的最後產生時間等等。例如:Last-Modified:Tue, 06 May 2008 02:42:43 GMT.
5.5擴展頭
在HTTP消息中,也可使用一些再HTTP1正式規範裏沒有定義的頭字段,這些頭字段統稱爲自定義的HTTP頭或者擴展頭,他們一般被看成是一種實體頭處理。
如今流行的瀏覽器實際上都支持Cookie,Set-Cookie,Refresh和Content-Disposition等幾個經常使用的擴展頭字段。
1 Refresh:1;url=http://www.dfdf.org //過1秒跳轉到指定位置;
2 Content-Disposition:頭字段,可參考「2.5響應頭」;
3 Content-Type:WEB 服務器告訴瀏覽器本身響應的對象的類型。
eg1:Content-Type:application/xml ;
eg2:applicaiton/octet-stream;