HTTP協議初探
什麼是http協議?
- rfc文檔中文版
- 官方rfc文檔位置
- rfc文件,Request For Comments(RFC),是一系列以編號排定的文件
- ietf 組織,國際互聯網工程任務組(The Internet Engineering Task Force,簡稱 IETF)是一個公開性質 的大型民間國際團體,聚集了與互聯網架構和互聯網順利運做相關的網絡設計者、運營者、投資人和 研究人員,並歡迎全部對此行業感興趣的人士參與。
- RFC 1945定義了HTTP/1.0版本
- RFC 2616定義了今天廣泛使用的一個版本——HTTP 1.1
- RFC 7540定義了HTTP/2.0版本
既然http是超文本傳輸協議,那麼遵照協議的雙方是誰呢?javascript
遵照協議的雙方
再來回答什麼是http協議
- 不就是客戶端往服務端發送一段文本,服務端回覆客戶端一段文本麼。
抓到這兩段文本
可使用如下工具抓取到這段文本
TOOLS: chrome dev tool ,firefox firebug ,fiddler ……
示例:html
能夠總結出如下規律
- Http請求由三部分組成,分別是:請求行、消息報頭、請求正文
- HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文
HTTP 請求命令(動做,謂詞 ,METHOD)
GET 和 POST
- GET提交的數據會放在URL以後,以?分割URL和傳輸數據,參數之間以&相連,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的數據放在HTTP包的Body中。
- GET請求沒有請求體,
- GET提交的數據大小有限制,最多隻能有1024字節(由於瀏覽器對URL的長度有限制),而POST方法提交的數據理論上沒有限制。(服務端會限制)
- GET方式提交數據,會帶來安全問題,好比一個登陸頁面,經過GET方式提交數據時,用戶名和密碼將出如今URL上,若是頁面能夠被緩存或者其餘人能夠訪問這臺機器,就能夠從歷史記錄得到該用戶的帳號和密碼。
常見HTTP狀態碼
- 200 請求被正常處理
- 206 部分請求被成功響應,返回對應的部分(其實不常見,用於斷點續下,多線程下載)
- 301 永久重定向
- 302 臨時重定向
- 304 你請求的內容沒有更新,能夠用你本地緩存的(不屬於重定向)
- 400 你說的什麼,聽不懂
- 404 找不到你請求的資源
- 500 服務端出現異常
HTTP報頭
類型:
- 普通(通用)報頭 General Headers
請求響應都會使用的
- 實體報頭 Entity Headers
用來描述請求體或者響應體的報頭,跟實體有關
- 請求報頭 RequestHeaders 響應報頭 Response Headers
出現的地方不一樣,只會出如今請求和響應上的報頭
HOST 報頭是必須的請求報頭
報頭的數量在不斷的增長中,來知足互聯網需求的變動
能夠自定義報頭java
如何發出http請求
- 瀏覽器
- Code
- telnet
- 工具 fiddler postman 等等
- ……
回到問題,什麼是HTTP協議
HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。HTTP是一個無狀態的協議。
HTTP協議永遠都是客戶端發起請求,服務器回送響應。
HTTP協議的主要特色可歸納以下:nginx
- 支持客戶/服務器模式。支持基本認證和安全認證。
- 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法經常使用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不一樣。因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度很快。
- 靈活:HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
- HTTP 0.9和1.0使用非持續鏈接:限制每次鏈接只處理一個請求,服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。HTTP 1.1使用持續鏈接:沒必要爲每一個web對象建立一個新的鏈接,一個鏈接能夠傳送多個對象。
- 無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。
關於應用層協議有一幅很流行的圖示:web
參考資料: