HTTP協議詳解
來自: https://segmentfault.com/a/1190000004457479
HTTP協議簡介
http協議(超文本傳輸協議HyperText Transfer Protocol),它是基于TCP協議的應用層傳輸協議,簡單來說就是客戶端和服務端進行數據傳輸的一種規則。
URL
http url包含了用于查找某個資源的詳細信息,格式如下
http://host[":"port][abs_path]
http表示要通過HTTP協議來定位網絡資源,host表示合法的Internet主機域名或者IP地址,port指定一個端口號,為空則使用缺省端口80,abs_path指定請求資源的URI。
HTTP請求
下圖是在網上找的一張圖,覺得能很好的表達http請求的所發送的數據格式
由上圖可以看到,http請求由請求行,消息報頭,請求正文三部分構成
請求行
請求行由請求方法,URL字段和HTTP協議版本三部分構成,總的來說請求行就是定義了本次請求的請求方式,請求的地址,以及所遵循的HTTP協議版本例如:
GET /example.html HTTP/1.1 (CRLF)
http協議的方法有
GET 請求獲取Request-URI所標識的資源
POST 在Request-URI所標識的資源后附加新的數據
HEAD 請求獲取由Request-URI所標識的資源的響應消息報頭
PUT 請求服務器存儲一個資源,并用Request-URI作為其標識
DELETE 請求服務器刪除Request-URI所標識的資源
TRACE 請求服務器回送收到的請求信息,主要用于測試或診斷
CONNECT 保留將來使用
OPTIONS 請求查詢服務器的性能,或者查詢與資源相關的選項和需求
</div>
消息報頭
消息報頭由一系列的鍵值對組成,允許客戶端向服務器端發送一些附加信息或者客戶端自身的信息,主要包括
Accept
Accept請求報頭域用于指定客戶端接受哪些類型的信息。eg:Accept:image/gif,表明客戶端希望接受GIF圖象格式的資源;Accept:text/html,表明客戶端希望接受html文本。
Accept-Charset
Accept-Charset請求報頭域用于指定客戶端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.如果在請求消息中沒有設置這個域,缺省是任何字符集都可以接受。
Accept-Encoding
Accept-Encoding請求報頭域類似于Accept,但是它是用于指定可接受的內容編碼。eg:Accept-Encoding:gzip.deflate.如果請求消息中沒有設置這個域服務器假定客戶端對各種內容編碼都可以接受。
Accept-Language
Accept-Language請求報頭域類似于Accept,但是它是用于指定一種自然語言。eg:Accept-Language:zh-cn.如果請求消息中沒有設置這個報頭域,服務器假定客戶端對各種語言都可以接受。
Authorization
Authorization請求報頭域主要用于證明客戶端有權查看某個資源。當瀏覽器訪問一個頁面時,如果收到服務器的響應代碼為401(未授權),可以發送一個包含Authorization請求報頭域的請求,要求服務器對其進行驗證。
Host(發送請求時,該報頭域是必需的)
Host請求報頭域主要用于指定被請求資源的Internet主機和端口號,它通常從HTTP URL中提取出來的
User-Agent
我們上網登陸論壇的時候,往往會看到一些歡迎信息,其中列出了你的操作系統的名稱和版本,你所使用的瀏覽器的名稱和版本,這往往讓很多人感到很神奇,實際上,服務器應用程序就是從User-Agent這個請求報頭域中獲取到這些信息。User-Agent請求報頭域允許客戶端將它的操作系統、瀏覽器和其它屬性告訴服務器。不過,這個報頭域不是必需的,如果我們自己編寫一個瀏覽器,不使用User-Agent請求報頭域,那么服務器端就無法得知我們的信息了。
請求正文
只有在發送post請求時才會有請求正文,get方法并沒有請求正文
HTTP響應
與http 請求類似,先上一張圖
http響應也由三部分組成,包括狀態行,消息報頭,響應正文
狀態行
狀態行也由三部分組成,包括HTTP協議的版本,請求結果即狀態碼,還有對狀態碼的文本描述。例如:
HTTP/1.1 200 OK (CRLF)
狀態碼
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操作
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
常見狀態代碼、狀態描述、說明:
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報 //頭域一起使用
403 Forbidden //服務器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間后,可能恢復正常
消息報頭
響應正文
所謂響應正文,就是服務器返回的資源的內容。即整個HTML文件。
參考文章 http://www.jianshu.com/p/e83d323c6bcc
http://www.cricode.com/1880.html