http超文本傳輸協定(hypertext transfer protocol,簡稱http)是應用層協定,自 1990 年起,http 就已經被應用于 www 全球資訊服務系統。它是無狀态協定,即對于事物的處理沒有記憶能力,http 是一種請求/響應式的協定。一個客戶機與伺服器建立連接配接後,發送一個請求給伺服器;伺服器接到請求後,給予相應的響應資訊。下面将從一下幾個方面對http協定做下總結
【1】http封包
【2】http狀态碼
【3】http缺陷及改進(https)
【4】常見問題
用于http互動的資訊被稱為http封包,封包本身是由多行(用cr+lf作換行符)資料構成的字元串,封包主要分為封包首部和封包主體
通常封包分為請求端封包和響應端封包,分别對應着用戶端和伺服器端,具體結構如下圖所示
這裡需要說明一下:
【1】請求行:包含用于請求的方法,請求uri和http的版本
狀态行:表明響應結果的狀态碼,原語原因和http版本
【2】首部字段
一般包含4種首部:通用首部,請求首部,響應首部和實體首部
【3】其他
可能包含http的rfc中未定義的首部如cookie等
狀态碼的職責是當用戶端向伺服器端發送請求時,描述傳回的請求結果,借助于狀态碼就可以知曉伺服器是否做了正确的請求還是錯誤。
通常狀态碼的類别可以分為以下5類:
下面逐一介紹一些重點的
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
表明伺服器暫時處于超負荷或者正在進行停機維護,無法處理請求
https = http+加密+認證+完整性保護
https 并非新的協定而是http通信接口部分用ssl(secure socket layer)和tls(transport layer security)協定替代而已,通常http直接和tcp通信,使用ssl時則演變為先和ssl通信,再由ssl和tcp通信,簡而言之,https就是身披ssl協定的外殼的http
其中https采用的是混合加密機制:共享秘鑰和公開秘鑰加密并用的混合加密機制,如下圖
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