關於HTTP Header的討論

                    關於HTTP Headers的討論  html

            前些天因爲一些編程須要,接觸到了HTTPheader的有關知識,因而就本着學習的目的索性把這個東西弄個明白。今天在這裏總結一下,但願能幫助到一些有這方面知識要求的同窗,也方便本身在之後的學習中做參考。因爲我也是第一次接觸到這個東西,若是有什麼錯誤的理解和表述但願你們能夠熱心的及時提出來,以避免誤導了更多看到這篇文章的人,也方便我本身及時更正本身的錯誤。web

下面入正題。編程

WHAT IS HTTP瀏覽器

HTTP是「Hypertext Transfer Protocol」的縮寫,是一個應用層協議,整個萬維網都在使用這種協議,幾乎你在瀏覽器裏看到的大部份內容都是經過http協議來傳輸的。緩存

WHAT  IS  HTTPHEADER安全

HTTP Headers(HTTP頭部)HTTP請求和相應的核心,它承載了關於客戶端瀏覽器,請求頁面,服務器等相關的信息。服務器

HTTP Headers 中的 HTTP請求cookie

當咱們打開瀏覽器,點擊一個超級連接的時候(好比https://www.google.com.hk/ )此時瀏覽器會作出相似以下的HTTP請求app

這個圖是我在打開這個網頁的時候用HTTP Analyzer抓取的dom

下面咱們一行一行的來解釋各句話的的意思 

第一行,被稱做「Request - Line」請求行它包括三個部分: 

I)第一個字段爲「method」 它代表這是何種類型的請求最多見的請求類型有 GET,     POST 和 HEAD.學過WEB的應該比較熟悉這三種方法的區別與聯繫,此處使用的GET 方法,這也是瀏覽器中比較經常使用的方法

II)第二個字段爲「path」 它體現的是主機以後的路徑例如,當你作出請求 

      GET /webhp?hl=zh-CN&sourceid=cnh path HTTP/1.1path就是

 「/webhp?hl=zh-CN&sourceid=cnhes/.它表示獲取/webhp?hl=zh-CN目錄下資源ID   cnhes的頁面,再如GET /images/logo.gif HTTP/1.1,表示從/images目錄下請求logo.gif   動態圖片文件。

 III)第三個字段爲「protocol」 包含有 「HTTP」 和版本號現代瀏覽器都會使用1.1.


剩下的部分每行都是一個「NameValue」對。它們包含了各式各樣關於請求和你瀏覽器的信息

    第二行,字段以下 它指明瞭主機的名稱很顯然這是Googleweb服務器;


    第三行,字段以下它代表了連接狀態

        若是爲close 則表示告訴WEB服務器或者代理服務器,在完成本次請求的響應後,斷開鏈接,不要等待本次鏈接的後續請求了

        Keepalive 則表示告訴WEB服務器或者代理服務器,在完成本次請求的響應後,保持鏈接,等待本次鏈接的後續請求。

        Keep-Alive:若是瀏覽器請求保持鏈接,則該頭部代表但願 WEB 服務器保持鏈接多長時間(秒)。例如:Keep-Alive300


    第四行,

        是在告訴web服務器本身接受什麼樣的介質text/html表示接受text文檔下的子文檔html文檔,*/*表示接受全部的文檔


    第五行

                它指明瞭  

                一、瀏覽器名,版本號,Moziall/5.0 Chrome/31.0.1650.63 Safari/537.36AppleWebKit/537.36 (KHTML, like Gecko

                二、操做系統名,版本號Windows NT 6.1; WOW64

                三、默認的)語言等

    第六行,這應該是Chrome的一些變量參數,我也不太清楚這個東西

 

    第七行,表示能夠接受的編碼,大部分的現代瀏覽器都支持gzip壓縮,並會把這一信息報告給服務器。這時服務器就會壓縮過的HTML發送給瀏覽器。

            這能夠減小近80%的文件大小,以節省下載時間和帶寬。

    第八行,表示支持的語言

            這個信息能夠說明用戶的默認語言設置。若是網站有不一樣的語言版本,那麼就能夠經過這個信息來重定向用戶的瀏覽器。它還能夠經過逗號分割來攜帶多國語言。第一個會是首選的語                 言,其它語言會攜帶一個「q」值,來表示用戶對該語言的喜愛程度(0~1)。

        第九行,

         

        是有關cookie的說明

 

    另外,還可能有以下字段一併整理以下

    Referer字段

      Referer字段容許客戶端指定請求uri的源資源地址,這能夠容許服務器生成回退鏈表,可用來登錄、優化cache等。他也容許廢除的或錯誤的鏈接因爲維護的目的被追蹤。

        若是請求的uri沒有本身的uri地址,Referer不能被髮送。若是指定的是部分uri地址,則此地址應該是一個相對地址。

    Range字段

          Range字段能夠請求實體的一個或者多個子範圍。例如,

          表示頭500個字節:bytes=0-499

          表示第二個500字節:bytes=500-999

          表示最後500個字節:bytes=-500

          表示500字節之後的範圍:bytes=500-

          第一個和最後一個字節:bytes=0-0,-1

      同時指定幾個範圍:bytes=500-600,601-999

      可是服務器能夠忽略此請求頭,若是無條件GET包含Range請求頭,響應會以狀態碼206PartialContent)返回而不是以200OK)。

 

HTTP Headers 中的 HTTP響應

                這是HTTP響應的Header部分

                 

                第一行,「Status Header」稱爲狀態行HTTP/1.1 302 Found意思是說,請求的資源如今臨時從不一樣的 URI 響應請求。

                因爲這樣的重定向是臨時的,客戶端應當繼續向原有地址發送之後的請求,下附HTTP狀態碼錶 

狀態碼

已定義範圍

分類

1XX

100-101

信息提示

2XX

200-206

成功

3XX

300-305

重定向

4XX

400-415

客戶端錯誤

5XX

500-505

服務器錯誤

                下面是詳細更的解釋    

   I1XX信息狀態碼

狀態碼

 狀態消息

 含義

100

Continue(繼續)

收到了請求的起始部分,客戶端應該繼續請求

101

Switching Protocols(切換協議)

服務器正根據客戶端的指示Update Header)切換協議

  II2XX成功狀態碼

狀態碼

狀態消息

含義

200

OK

服務器成功處理了請求(這個是咱們見到最多的)

201

Created(已建立)

對於那些要服務器建立對象的請求來講,資源已建立完畢。

202

Accepted(已接受)

請求已接受, 但服務器還沒有處理

203

Non-Authoritative Information(非權威信息)

服務器已將事務成功處理,只是實體Header包含的信息不是來自原始服務器,而是來自資源的副本。

204

No Content(沒有內容)

Response中包含一些Header和一個狀態行, 但不包括實體的主題內容(沒有response body

205

Reset Content(重置內容)

 另外一個主要用於瀏覽器的代碼。意思是瀏覽器應該重置當前頁面上全部的HTML表單。

206

Partial Content(部份內容)

 部分請求成功             

  III3XX成功狀態碼

狀態碼

狀態消息

含義

300

Multiple Choices(多項選擇)

 客戶端請求了實際指向多個資源的URL。這個代碼是和一個選項列表一塊兒返回的,而後用戶就能夠選擇他但願的選項了

301

Moved Permanently(永久移除)

請求的URL已移走。Response中應該包含一個Location URL, 說明資源如今所處的位置

302

Found(已找到)

與狀態碼301相似。但這裏的移除是臨時的。 客戶端會使用Location中給出的URL,從新發送新的HTTP request

303

 See Other(參見其餘)

相似302

304

Not Modified(未修改)

客戶的緩存資源是最新的, 要客戶端使用緩存

305

 Use Proxy(使用代理)

必須經過代理訪問資源, 代理的地址在Response Location

306

 未使用

 這個狀態碼當前沒使用

307

Temporary Redirect(臨時重定向

相似302

                 

                IV)客戶端錯誤狀態碼

狀態碼

狀態消息

含義

400

Bad Request(壞請求)

告訴客戶端,它發送了一個錯誤的請求。

401

Unauthorized(未受權)

須要客戶端對本身認證

402

Payment Required(要求付款)

這個狀態還沒被使用, 保留給未來用

403

Forbidden(禁止)

請求被服務器拒絕了

404

Not Found(未找到)

未找到資源

405

Method Not Allowed(不容許使用的方法)

不支持該Request的方法。

406

Not Acceptable(沒法接受)


407

Proxy Authentication Required(要求進行代理認證)

與狀態碼401相似, 用於須要進行認證的代理服務器

408

Request Timeout(請求超時)

 若是客戶端完成請求時花費的時間太長, 服務器能夠回送這個狀態碼並關閉鏈接

409

Conflict(衝突)

發出的請求在資源上形成了一些衝突

410

Gone(消失了)

服務器曾經有這個資源,如今沒有了, 與狀態碼404相似

411

Length Required(要求長度指示)

服務器要求在Request中包含Content-Length

412

Precondition Failed(先決條件失敗)


413

Request Entity Too Large(請求實體太大)

客戶端發送的實體主體部分比服務器可以或者但願處理的要大

414

Request URI Too Long(請求URI太長)

客戶端發送的請求所攜帶的URL超過了服務器可以或者但願處理的長度

415

Unsupported Media Type(不支持的媒體類型)

服務器沒法理解或不支持客戶端所發送的實體的內容類型

416

Requested Range Not Satisfiable(所請求的範圍未獲得知足)


417

Expectation Failed(沒法知足指望)

            

                VI)服務器端錯誤狀態碼  

狀態碼

狀態消息

含義

500

Internal Server Error(內部服務器錯誤)

服務器遇到一個錯誤,使其沒法爲請求提供服務

501

Not Implemented(未實現)

客戶端發起的請求超出服務器的能力範圍(好比,使用了服務器不支持的請求方法)時,使用此狀態碼。

502

Bad Gateway(網關故障)

代理使用的服務器遇到了上游的無效響應

503

Service Unavailable(未提供此服務)

服務器目前沒法爲請求提供服務,但過一段時間就能夠恢復服務

504

Gateway Timeout(網關超時)

與狀態嗎408相似, 可是響應來自網關或代理,此網關或代理在等待另外一臺服務器的響應時出現了超時

505

HTTP Version Not Supported(不支持的HTTP版本)

服務器收到的請求使用了它不支持的HTTP協議版本。 有些服務器不支持HTTP早期的HTTP協議版本,也不支持過高的協議版本

                第二行,

                

                這個頭部是用來重定向的。若是響應代碼爲 301 或者 302 ,服務器就必須發送該頭部。


                第三行,

                

                

                Cache-Control指定請求和響應遵循的緩存機制。在請求消息或響應消息中設置Cache-Control並不會修改另外一個消息處理過程當中的緩存處理過程。

                請求時的緩存指令包括no-cacheno-storemax-agemax-stalemin-freshonly-if-cached,響應消息中的指令包括publicprivateno-cacheno-storeno-transformmust-revalidateproxy-revalidatemax-age。各個消息中的指令含義以下:

                  Public指示響應可被任何緩存區緩存。

                  Private指示對於單個用戶的整個或部分響應消息,不能被共享緩存處理。這容許服務器僅僅描述當用戶的部分響應消息,此響應消息對於其餘用戶的請求無效。

                  no-cache指示請求或響應消息不能緩存

                  no-store用於防止重要的信息被無心的發佈。在請求消息中發送將使得請求和響應消息都不使用緩存。

                  max-age指示客戶機能夠接收生存期不大於指定時間(以秒爲單位)的響應。

                  min-fresh指示客戶機能夠接收響應時間小於當前時間加上指定時間的響應。

                max-stale指示客戶機能夠接收超出超時期間的響應消息。若是指定max-stale消息的值,那麼客戶機能夠接收超出超時期指定值以內的響應消息。            

                第四行,

                                這個頭部包含了文檔的」mime-type」。瀏覽器將會依據該參數決定如何對文檔進行解析。                     

                                Content-Type: text/html; charset=UTF-8

                               text’ 是文檔類型,‘html’則是文檔子類型。 這個頭部還包括了更多信息,例如 charset 指明瞭字符集;

                若是是一個圖片,將會發送這樣的響應:Content-Type: image/gif  瀏覽器能夠經過mime-type來決定使用外部程序仍是自身擴展來打開該文檔。

                                以下的例子將會調用Adobe Reader

                                Content-Type: application/pdf

                                直接載入,Apache一般會自動判斷文檔的mime-type而且添加合適的信息到頭部去。

                        而且大部分瀏覽器都有必定程度的容錯,在頭部未提供或者錯誤提供該信息的狀況下它會去自動檢測mime-type        


           第五行,很顯然,這是指明瞭響應的時間(GMT爲格林威治世界時間)。


           第六行,

                Server響應頭包含處理請求的原始服務器的軟件信息。此域能包含多個產品標識和註釋,產品標識通常按照重要性排序顯然,Google使用的是自家的Google Web Server

                下附國內網站的Web服務器表

業名稱

  Web服務器

說明

谷歌中國

   Gws

谷歌自主開發的Google Web Server

百度

   BWS

由百度自主開發的Baidu Web Server

人人網

  Ngnix

 由Igor Sysoev爲俄羅斯訪問量第二

 的Rambler.ru站點開發的

 

騰訊

  Ngnix


163

  Ngnix


淘寶

  Tengine

(已開源)

 

 

 Ngnix的一個變種

 

 

Sina

  Apache


搜狐

  Apache

Apache旗下的開源http服務器

開心網

  Apache


優酷

  Apache


                第七行,

                  Content-Length: WEB 服務器告訴瀏覽器本身響應的對象的長度。

                剩下的部分是有關安全的一些字段,這裏不作過多討論(暫不清楚具體意思)

                有的還有Set-Cookie字段

                Set-Cookie:BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; path=/; domain=.baidu.com

                Set-Cookie:BD_CK_SAM=1;path=/

                Set-Cookie:BDSVRTM=175; path=/

                Set-Cookie:H_PS_PSSID=5013_5141_5041_1422_4261_4760; path=/; domain=.baidu.com

                當一個網站須要設置或者更新你瀏覽的cookie信息時,它就會使用這樣的頭部           

      

                還有的會有這些字段

                 

                其中ExpireWEB服務器代表該實體將在何時過時,對於過時了的對象,只有在跟 WEB服務器驗證了其有效性後,才能用來響應客戶請求。

                 Last-Modified 顧名思義,這個頭部信息用GMT格式代表了文檔的最後修改時間;         

                Etag 服務器可能會將該信息和每一個被髮送文件一塊兒響應給瀏覽器。該值能夠包含文檔    的最後修改日期,文件大小或者文件校驗和。這是一個對象(好比URL)的標誌值, 就一個對                象而言,好比一個 html 文件,若是被修改了,其 Etag 也會別修改, 因此, ETag 的做用跟 Last-Modified 的做用差很少,主要供 WEB 服務器 判斷一個對象是 否改變了。好比前一次請              求某個 html 文件時,得到了其 ETag,當此次又請求這個文 件時,瀏覽器就會把先前得到的 ETag 值發送給 WEB 服務器,而後 WEB 服務器會 把這個 ETag 跟該文件的當前 ETag 進行              對比,而後就知道這個文件   有沒有改變了。

               還有以下字段

                If-Match:若是對象的 ETag 沒有改變,其實也就意味著對象沒有改變, 才執行請求的動做。

                If-None-Match:若是對象的 ETag 改變了,其實也就意味著對象也改變了,才執行請求的動做。

                對於Accept-Ranges

                WEB服務器代表本身是否接受獲取其某個實體的一部分(好比文件的一部分)的請求。

                bytes:表示接受,none:表示不接受

                另外,還有

                Vary:Accept-Encoding    訴代理服務器緩存兩種版本的資源:壓縮和非壓縮,這有助於避免一些公共代理不能正確地檢測Content-Encoding標頭的問題

                Transfer-Encoding:chunked 當不能預先肯定報文體的長度時,不可能在頭中包含Content-Length域來指明報文體長度,此時就須要經過Transfer-Encoding域來肯定報文體長度,一般狀況                               下,Transfer-Encoding域的值應當爲chunked,代表採用chunked編碼方式來進行報文體的傳輸。

                基本上關於HTTP Headers的內容就到這裏了。但願能夠幫助到你們!

相關文章
相關標籤/搜索