天天看點

HTTP協定小結概述

http超文本傳輸協定(hypertext transfer protocol,簡稱http)是應用層協定,自 1990 年起,http 就已經被應用于 www 全球資訊服務系統。它是無狀态協定,即對于事物的處理沒有記憶能力,http 是一種請求/響應式的協定。一個客戶機與伺服器建立連接配接後,發送一個請求給伺服器;伺服器接到請求後,給予相應的響應資訊。下面将從一下幾個方面對http協定做下總結

【1】http封包

【2】http狀态碼

【3】http缺陷及改進(https)

【4】常見問題

用于http互動的資訊被稱為http封包,封包本身是由多行(用cr+lf作換行符)資料構成的字元串,封包主要分為封包首部和封包主體

HTTP協定小結概述

通常封包分為請求端封包和響應端封包,分别對應着用戶端和伺服器端,具體結構如下圖所示

HTTP協定小結概述
HTTP協定小結概述

這裡需要說明一下:

【1】請求行:包含用于請求的方法,請求uri和http的版本

          狀态行:表明響應結果的狀态碼,原語原因和http版本

【2】首部字段

一般包含4種首部:通用首部,請求首部,響應首部和實體首部

【3】其他

可能包含http的rfc中未定義的首部如cookie等

狀态碼的職責是當用戶端向伺服器端發送請求時,描述傳回的請求結果,借助于狀态碼就可以知曉伺服器是否做了正确的請求還是錯誤。

通常狀态碼的類别可以分為以下5類:

HTTP協定小結概述

下面逐一介紹一些重點的

2xx響應結果表明請求被正常處理了

【1】200 ok

表示從用戶端發來的請求在伺服器端被正常處理了

【2】204 no content

伺服器接收到的請求處理成功但是沒有資源可以傳回,即傳回的響應封包中不含實體的主體部分,另外也不允許傳回任何實體的主體,一般浏覽器顯示頁面也不發生更新

【3】206 partial content

表示用戶端進行了範圍的請求,伺服器成功執行了,在響應封包中包含content-range指定的範圍的實體内容

3xx響應結果表明浏覽器需要執行某些特殊的處理以正确處理請求

【1】301 moved permanently

永久性重定向。該狀态碼表明請求資源已經被配置設定了新的uri,以後都應該使用資源現在所指的uri

【2】302 found

臨時重定向。該狀态碼表示所請求的資源已經被配置設定了新的rui,希望使用者(本次)能夠使用新的uri通路

【3】303 see other

該狀态碼表明由于請求對應的資源存在着另一個uri,應該使用get方法定向擷取請求的資源

note:301,302,303響應狀态碼傳回時,幾乎所有浏覽器都會把post改成get,并删除請求封包内的1主體,之後請求會自動重發

【4】304 not modified

表示用戶端附帶條件的請求時,伺服器找到資源但是未能滿足其條件的情況。該狀态碼傳回不包含任何響應的主體部分。304雖然劃分再3xx中,但是和重定向沒啥關系

【5】307 temporary redirect

臨時重定向。該狀态碼跟302 found有着相同含義,但是不會要求從post變為get

4xx系清單明用戶端是發生錯誤的原因所在

【1】400 bad request

表明請求封包中存在文法錯誤

【2】401 unauthorized

表示發送的請求需要通過http的認證(basic認證或者digest認證),若之前已經發起過一次請求,則表明認證失敗

【3】403 forbidden

表明請求資源被伺服器拒絕。通常是由于未擷取通路授權,通路權限問題等

【4】404 not found

表明伺服器無法找到請求的資源,也可以在伺服器拒絕請求但是不想給出理由時使用該狀态碼

5xx系清單明伺服器本身出錯

【1】500 internal sever error

表明伺服器在執行請求時發生了錯誤,也有可能是web應用存在的bug或者某些臨時的故障

【2】503 service unavailable

表明伺服器暫時處于超負荷或者正在進行停機維護,無法處理請求

HTTP協定小結概述

https = http+加密+認證+完整性保護

https 并非新的協定而是http通信接口部分用ssl(secure socket layer)和tls(transport layer security)協定替代而已,通常http直接和tcp通信,使用ssl時則演變為先和ssl通信,再由ssl和tcp通信,簡而言之,https就是身披ssl協定的外殼的http

其中https采用的是混合加密機制:共享秘鑰和公開秘鑰加密并用的混合加密機制,如下圖

HTTP協定小結概述

1.get請求的資料會附在url之後(就是 把資料放置在http協定頭中),以?分割url和傳輸資料,參數之間以&相連,

post把送出的資料則放置在是http包的包體中。是以post的安全性要比get的安全性 高

2."get方式送出的資料最多隻能是1024位元組,理論上post沒有限制,可傳較大量的資料

這個問題比較大,通常集中在長連接配接,這篇博文說的更加清楚

<a target="_blank" href="http://blog.csdn.net/forgotaboutgirl/article/details/6936982">詳細差別</a>

   1)浏覽器向dns伺服器請求解析該url中的域名所對應的ip位址;

   2)解析出ip位址後,根據該ip位址和預設端口80,和伺服器建立tcp連接配接;

   3)浏覽器發出讀取檔案(url中域名後面部分對應的檔案)的http請求,該請求封包作為tcp三次握手的第三個封包的資料發送給伺服器;

    4)伺服器給出相應,把對應的html文本發送給浏覽器;

    5)釋放tcp連接配接;

    6)浏覽器将該文本顯示出來。

轉載:http://blog.csdn.net/xsf50717/article/details/47277347

繼續閱讀