HTTP首部

首先整個HTTP的報文結構如下圖所示,我們這里主要專注于報文首部。

HTTP報文結構

一. 請求報文首部

1. 請求報文首部結構:

(1)必須的:方法 | URI(發送方地址) | 協議版本
例如:

post | www.tom.org/form/entry | HTTP/1.1

(2)(請求首部字段(可選))
例如:
HOST:hack.jp(域名或IP地址)
Coonnection : keep-alive
Content-Type:application/x-www-form

2. HTTP方法

請求報文的第一項就是HTTP方法,常見的HTTP方法有:
(1)POST:傳輸實體主體
用來傳送較多的數據并需要服務器端對其處理,通常會修改數據。
(2)GET:獲取資源
用來請求訪問URI指定的資源,通常資源經過服務器端解析后返回響應主體。
POST和GET的區別:

  • GET是冪等的,POST不是,所謂冪等是指請求多次和請求一次結果是相同的,原因是GET通常只讀數據,而不會寫數據(前提是多次請求之間數據本身沒有修改)。但POST可以通過別的輔助方式實現冪等,比如為每個請求加個唯一的id或版本號等。
  • GET請求會被瀏覽器主動緩存,POST不會
  • GET請求的參數只能通過URL傳遞,但是POST可以放在request body中(即可以通過報文主體傳遞);而且URL的長度通常都是有限的,但是POST就沒有這個限制;另外因為GET的參數暴露在URL上,所以沒有POST安全。
  • GET產生一個數據包,POST產生兩個,GET:首部+實體數據 -> 返回 200 OK;POST:首部-> 返回100 continue,實體數據 -> 200 OK。
    -但要注意GET和POST本質上都是TCP鏈接,并無差別,只是由于HTTP標準(RFC)的規定和服務器/瀏覽器的限制導致他們在應用過程中體現出了一些不同。

(3)PUT:傳輸文件
PUT用來傳輸文件,需要在請求報文的主體中包含文件內容,但由于存在安全問題,一般網站不使用該方法(或配合其他驗證使用)

(4)HEAD:獲得報文首部
HEAD方法和GET類似,只是不返回報文主體,用來確認URI的有效性及資源更新時間等。

(5)DELETE:刪除文件
用來按請求URI刪除指定的資源,與PUT相反,但同樣因為安全問題,如果不配合Web應用程序的驗證或遵守REST標準,一般很少單獨使用。

(6)OPTIONS:詢問支持的方法
咨詢針對指定(URI)資源支持的方法(如POST,GET)

(7)TRACE:追蹤路徑
讓服務器將之前的請求通信環回給客戶端,因為請求過程中可能會經過中轉,代理等的轉發以及修改,這個方法就是用來確認連接過程中發生的一系列操作,但不常用,而且容易引發XST(跨站追蹤)攻擊。

(8)CONNECT:要求用隧道協議連接代理
即:在于代理服務器通信時建立隧道,用協議(TLS和SSL)把內容加密后用隧道傳輸。

二. 響應報文首部

1. 響應報文首部結構:

響應報文首部的結構如下圖中例子所示:


響應報文首部結構

主要由響應行和響應首部字段組成。

2. HTTP狀態碼

狀態碼 類別 原因短語
1xx Informational(信息性狀態碼) 接受的請求正在處理
2xx Success(成功狀態碼) 請求正常處理完畢
3xx Redirection(重定向狀態碼) 需要進行附加操作以完成請求
4xx Client Error(客戶端錯誤) 服務器無法處理請求
5xx Server Error(服務器錯誤狀態碼) 服務器處理請求出錯

下面是一些常見的狀態碼:
(1)100 Continue 請求正在處理
(2)2xx 成功

  • 200 OK : 成功
  • 204 No Content : 成功但無內容
  • 206 Partial Content : 成功響應部分請求
    (3)3xx 重定向
  • 301 Moved Permanently : 永久性重定向,應把地址改為新的URI
  • 302 Found : 臨時性重定向
  • 303 See Other : 和302類似,但要求用FET方法重發
  • 304 Not Modified : 資源已找到,但未符合客戶端的附帶條件
  • 305 Use Proxy : 必須通過代理訪問資源,代理的地址在Response的Location中
  • 307 Temporary Redirect : 臨時重定向,與302類似

三. 首部字段

首部字段主要以鍵值對的形式給通信對象(瀏覽器或服務器)傳遞信息,如報文大小,語言等,是HTTP首部中很重要的一部分,其結構為:“首部字段名:字段值”;
HTTP首部字段分為請求首部,響應首部,通用首部和實體首部,下面將分別介紹。

1. 請求首部字段

  • Accept:通知服務器用戶代理能處理的媒體類型及相對優先級(當不止一個時),優先級可用“q=?”來表示,0<q<1
  • Accept-Charset:通知服務器支持的字符集及相對優先級
  • Accept-Encoding:支持的內容編碼及優先級
  • Accept-Language:能處理的自然語言及優先級
  • Authorization:用來告訴服務器用戶代理的認證信息
  • Expect:告知服務器期望出現的某種特定行為
  • From:用戶的電子郵件地址
  • Host:請求資源所處的主機名和端口號,唯一一個必須首部字段
  • If-Match:當If-Match的值和ETag(實體標記)值匹配時,服務器才會接受請求
  • If-Modified-Since:表示只接受這個時間以后更新的資源,太舊的不要
  • If-None-Match:表示如果ETag值不匹配就采用這個值,與If-Match相反
  • if-Range:表示如果資源與字段值(ETag或時間)匹配就返回范圍請求的內容,否則返回全部
  • If-Unmodified-Since:表示如果資源在該事件之后發生過改變則不可以
  • Max-Forwards:轉發的最大次數,每經過一次轉發就減一,當減為0時,停止轉發并相應
  • Proxy-Authorization:給代理服務器發送認證質詢
  • Range:范圍請求中指定資源的范圍,206表示成功響應范圍請求,200表示全部返回
  • Referer:告知服務器請求的原始資源的URI
  • TE:能處理響應的傳輸編碼方式及相對優先級
  • User-Agent:創建請求的瀏覽器和用戶代理名稱等信息

2. 響應首部字段

  • Accept-Ranges:none(無法處理范圍請求)/bytes(可處理范圍請求)
  • Age:告知客戶端源服務器在多久前建立了響應
  • Etag:每份資源的唯一標識,分為兩種:強ETag(任何細微變化都會改變其值)/弱ETag(僅資源發生根本改變才會變,附加“w/”)
  • Location:新資源的位置
  • Proxy-Authenticate:把代理服務器需要的信息發送給客戶端
  • Retry-After:告知客戶端多久后再次嘗試,通常與503或3xx一起,可以是秒數,也可以是具體時間
  • Server:服務器上安裝的HTTP服務器應用程序信息
  • Vary:源服務器發送給代理服務器需要驗證的字段值,若字段符合要求則從代理返回緩存,否則從源請求返回。
  • WWW-Authenticate:用于HTTP訪問認證,告知客戶端適用于訪問請求URI指定資源的認證方案

3. 通用首部字段

  • Cache-Control:操作緩存的工作機制
  • Connection:1.控制不再轉發的首部字段;2.管理持久連接(比如,Connection:Upgrade表示刪除Upgrade字段后再轉發)
  • Date:表示報文創建時間
  • Pragma:HTTP/1.0遺留,與Cache-Control:no-cache類似,表示不再接受緩存
  • Trailer:事先說明在報文主體之后記錄了哪些首部字段
  • Trans-Encoding:規定傳輸報文主體時采用的編碼方式
  • Upgrade:檢測HTTP或其他協議是否可使用更高版本,或指定一個完全不同的通信協議,
  • Via:通過附加經過的代理或網關的信息來追蹤傳輸路徑和避免請求回環。
  • Warning:告知用戶一些與緩存相關問題的警告,格式為:[警告碼][警告主機:端口號][內容][時間(可選)]

4. 實體首部字段

  • Allow:告知客戶端可使用的HTTP方法
  • Content-Encoding:告知客戶端實體主體部分的編碼方式(gzip,compress,deflate,identity)
  • Content-Language:實體主體的自然語言
  • Content-Length:實體主體部分的大小
  • Content-Location:報文主體的URI(有時為了符合要求,返回的資源并非請求的資源)
  • Content-MD5:經過MD5算法加密后的主體的加密碼,用來驗證報文主體的完整性(但無法防止惡意修改)
  • Content-Range:告知客戶端發送的報文內容的范圍(范圍請求)
  • Content-Type:實體主體的媒體類型,編碼方式等
  • Expires:緩存資源的失效日期(如果超過這個日期,就需要重新請求)。
  • Last-Modified:告知客戶端,資源的最后修改時間

5. 其他首部字段

(1)為Cookie服務的首部字段
當前廣泛使用的Cookie是在網景公司制定的標準上進行擴展的產物,其作用是用戶識別和狀態管理,即保存用戶的身份信息,登錄時間等信息,為Cookie服務的首部字段是Set-Cookie,他有以下屬性:

  1. Name:Cookie的名稱和值,必須
  2. expires:Cookie有效期
  3. path:服務器上適用Cookie的文件目錄
  4. domin:Cookie適用域名(默認為創建的服務器的域名)
  5. Secure:僅在HTTP安全通信時才發送Cookie
  6. HTTPOnly:使Cookie不能被JavaScript訪問
    (2)其他首部字段
  • X-Frame-Options:屬于響應首部,用于控制網站內容在其他Web網站的Frame標簽中的顯示問題,主要是為了防止點擊劫持攻擊,其值有:DENY:拒絕;SAMEORIGIN:僅同源域名下的頁面允許被加載。
  • X-XSS-Protextion:屬于響應首部字段,用于控制瀏覽器XSS(跨站腳本攻擊)防護機制的開關,"1"表示開啟。
  • DNT:屬于請求首部,表示拒絕個人信息被收集,拒絕被精準廣告追蹤的一種方法,1表示開啟,需要服務器支持
  • P3P:屬于響應首部,通過利用P3P可以讓個人信息變成一種僅供程序理解的形式,以達到保護用戶隱私的目的,但有很多輔助工作需要做。

參考:
《圖解HTTP》

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容

  • 作者:李成文;標簽: http首部 HTTP報文首部 HTTP協議的請求和響應報文中必定包含HTTP首部。首部內容...
    廣州蘆葦科技web前端閱讀 1,113評論 0 0
  • HTTP報文首部 ??HTTP協議的請求和響應報文中必定包含HTTP首部。首部內容為客戶端和服務器分別處理請求和響...
    JarvanZ閱讀 799評論 0 0
  • HTTP 首部 HTTP 報文首部 HTTP 協議的請求和響應報文中必定包含 HTTP 首部。首部內容為客 戶端和...
    Gu_Ran閱讀 767評論 0 3
  • 作者:滌生_Woo鏈接:http://www.lxweimin.com/p/6e9e4156ece3 本篇文章篇幅...
    Fi的學習筆記閱讀 1,726評論 0 4
  • -1- 一位李姓的朋友向我傾訴,因為自己一次的不冷靜行為,和一位司機發生了斗毆。 我一般稱呼他為“小李”。有一天,...
    風信子逸軒閱讀 1,294評論 8 23