前端須知的http header

文件信息:javascript

Content-Type: application/x-javascript
Content-Length: 2000

Content-Type:指定請求和響應的內容類型,若是未指定即爲text/htmlhtml

      經常使用的Content-Typejava

        text/plain:普通文本json

        tex/html:html文本瀏覽器

        application/x-javascript:js緩存

        application/x-www-form-urlencoded:默認形式表單發包類型服務器

        multipart/form-data:用在發送文件的post包中網絡

        application/json:經過json傳輸app

        application/xml:經過xml傳輸ide

Content-Length:用於指定請求或相應的內容長度

       1.若是存在Transfer-Encoding(chuncked)則在頭信息中不能有Content-Type有也會被忽略

       2.若是是短鏈接則能夠經過關閉鏈接來肯定長度

       3.Content-Length必須與傳輸內容長度相同,過長會致使超時,太短會直接截斷

       4.http1.1以前不支持keep-alive,Content-Length無關緊要。http1.1若爲keep-alive則chuncked和Content-Length必須二選一,若爲非keep-alive則Content-Length無關緊要

壓縮:

Accept-Encoding: gzip
Content-Encoding: gzip

編碼方式

  • gzip  代表實體採用GNU zip編碼
  • compress 代表實體採用Unix的文件壓縮程序
  • deflate  代表實體是用zlib的格式壓縮的
  • identity  代表沒有對實體進行編碼。當沒有Content-Encoding header時, 就默認爲這種狀況

壓縮流程:

  1.瀏覽器在發送請求時會帶上Accept-Encoding頭信息,裏面有瀏覽器支持的全部壓縮方式。

  2.服務器在接收到瀏覽器發過來的信息以後,對Accept-Encoding裏面的信息進行判斷,選擇合適的壓縮方式對相應內容進行壓縮,而後增長Content-Encoding頭信息,將其改成當前使用的壓縮方式名,將響應發回瀏覽器。

  3.瀏覽器接收到響應後,經過對Content-Encoding中的信息進行判斷,選擇合適的解壓方式進行解壓,並展現

 代理緩存:

Vary: Accept-Encoding

  代理緩存,從服務器到瀏覽器可能通過多箇中間體,如:緩存服務器。如今不少應用都用到了緩存機制,而一個url可能會返回多個文檔,中間服務器應該緩存哪些,瀏覽器請求時應該返回哪些文檔,這就涉及到瀏覽器和服務器之間的一個內容協商問題。

  通常有兩種方式:

    1)服務器每次都返回多個版本,300(Mutiple choices),讓瀏覽器本身選擇,可是這種會致使多一次網絡請求,還有就是某些版本的文檔是給具備特殊功能(好比壓縮)的瀏覽器準備的,讓普通用戶選可能會出現問題

    2)服務器根據瀏覽器發送的Accept字段來選擇合適的內容發送

請求字段  字段說明  響應頭字段
Accept  告知服務器接收哪一種媒體類型 Content-Type
Accept-Encoding 告知服務器接收哪一種壓縮形式 Content-Encoding
Accept-Language 告知服務器接受哪一種語言 Content-Language
Accept-Charset 告知服務器接收哪一種編碼方式 Content-Type

  有時候這四個字段不夠用會用User-Agent和Cookie一塊判斷,這時候就須要加一個

Vary: User-Agent, Cookie

  通常來講只須要在Vary中寫除了Accept-*以外的字段,可是存在一些服務器對這個機制實現有Bug,它們會直接忽略響應頭中的Content-Encoding,從而可能會給不支持壓縮的瀏覽器發回壓縮後的文檔,因此若是有壓縮的話,須要給響應頭中增長Accept-Encoding使得Bug服務器可以正確的緩存。

緩存:

Expires: Mon, 24 Feb 2014 03:34:00 GMT 
Cache-Control: max-age=3600
If-None-Match: "b3234c-9999-45334a15"
Etag: "b3234c-9999-45334a15"
If-Modified-Since: Mon, 24 Feb 2014 03:34:00 GMT 
Last-Modified: Mon, 24 Feb 2014 03:34:00 GMT 

  Expires:過時時間,這個屬性告訴緩存方,相關副本在多長時間內是可用的,當超過這個時間,緩存方就會向服務器發送請求從新獲取

      注意點: 1.時間格式必須爲GMT時間格式,其餘時間格式,其他的時間格式都會被當成以前的時間

           2.緩存方時間必須和服務器時間一致,否則會致使提早或延遲更新

  Cache-Control:緩存控制

      經常使用的有如下幾種屬性值

      max-age:指示在多少秒以內,緩存方不用向服務器發送這個文件的請求,直接使用緩存。在max-age時間以內,瀏覽器請求該文件的響應老是爲200(from cache)

      no-cache:強制緩存方必須每次都向服務器發送請求,由服務器決定緩存方保存的是否爲最新的文件。若是爲最新的,服務器就會返回304(Not Modified),緩存方直接使用緩存;若是不是最新返回200,並返回最新的文件。通常配合last-modified或Etag一塊兒使用。

      no-store:強制緩存方永遠不緩存該文件,每次都是向服務器請求最新的文件

      public:表示任何緩存方均可緩存該響應

      private:只會緩存給該用戶不會共享緩存

  Etag/If-None-Match:

      1)緩存方第一次請求時,服務器返回的響應頭中會包含一個Etag的hash

      2)以後每次緩存方向服務器請求時都會包含一個If-None-Match頭信息,內容爲服務器返回的Etag,而後服務器對這個頭信息進行判斷,若是爲最新的,服務器就會返回304(Not Modified),緩存方直接使用緩存;若是不是最新返回200,並返回最新的文件,更新Etag字段。

  Last-Modified/If-Modified-Since:

      1)緩存方第一次請求時,服務器返回的響應頭中會包含一個Last-Modified頭信息,內容爲該文件的最後更新時間

      2)以後每次緩存方向服務器請求時都會包含一個If-Modified-Since頭信息,內容爲服務器返回的Last-Modified,而後服務器對這個頭信息進行判斷,若是爲最新的,服務器就會返回304(Not Modified),緩存方直接使用緩存;若是不是最新返回200,並返回最新的文件,更新Last-Modified字段。

  總結:Expires和Cache-Control爲緩存方判斷是直接讀取緩存仍是向服務端發請求的字段,只不過Cache-Control比Expires控制的要多一點

     Etag/If-None-Match和Last-Modified/If-Modified-Since爲服務器判斷緩存方保存的是否爲最新的,若是爲最新就返回304讓緩存方使用緩存,若是不是最新則返回最新內容。不過前者是經過隨機字符串判斷,後者是經過時間判斷

長鏈接:

connection: keep-alive
Keep-Alive: timeout=20, max=2

   將connection設置爲keep-alive可讓多個鏈接共用一個TCP鏈接,提升了交互效率

   Keep-Alive用來設置該鏈接的過時時間,上例中20秒後或者在該鏈接中請求了兩次後斷開

   connection可爲請求或者響應頭,Keep-Alive僅爲響應頭。

重定向:

Location: http://www.baidu.com
相關文章
相關標籤/搜索