HTTP協議初探

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

遵照協議的雙方

  • 瀏覽器君:ie,chrome ,firefox
  • web服務器君:(iis , Apache,Tomcat ,lighttpd , nginx ,http://tengine.taobao.org/ , gws-google )

Alt text

再來回答什麼是http協議

  • 不就是客戶端往服務端發送一段文本,服務端回覆客戶端一段文本麼。

Alt text

  • 固然,這個過程是不可逆的

Alt text

抓到這兩段文本

可使用如下工具抓取到這段文本 
TOOLS: chrome dev tool ,firefox firebug ,fiddler …… 
示例:Alt texthtml

能夠總結出如下規律

  1. Http請求由三部分組成,分別是:請求行、消息報頭、請求正文

Alt text

  1. HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文

Alt text

HTTP 請求命令(動做,謂詞 ,METHOD)

Alt text

GET 和 POST

  1. GET提交的數據會放在URL以後,以?分割URL和傳輸數據,參數之間以&相連,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的數據放在HTTP包的Body中。 

  2. GET請求沒有請求體, 

  3. GET提交的數據大小有限制,最多隻能有1024字節(由於瀏覽器對URL的長度有限制),而POST方法提交的數據理論上沒有限制。(服務端會限制) 

  4. GET方式提交數據,會帶來安全問題,好比一個登陸頁面,經過GET方式提交數據時,用戶名和密碼將出如今URL上,若是頁面能夠被緩存或者其餘人能夠訪問這臺機器,就能夠從歷史記錄得到該用戶的帳號和密碼。

常見HTTP狀態碼

Alt text

  • 200 請求被正常處理
  • 206 部分請求被成功響應,返回對應的部分(其實不常見,用於斷點續下,多線程下載)
  • 301 永久重定向
  • 302 臨時重定向
  • 304 你請求的內容沒有更新,能夠用你本地緩存的(不屬於重定向)
  • 400 你說的什麼,聽不懂
  • 404 找不到你請求的資源
  • 500 服務端出現異常

HTTP報頭

類型:

  • 普通(通用)報頭 General Headers 
    請求響應都會使用的
  • 實體報頭 Entity Headers 
    用來描述請求體或者響應體的報頭,跟實體有關
  • 請求報頭 RequestHeaders 響應報頭 Response Headers 
    出現的地方不一樣,只會出如今請求和響應上的報頭

HOST 報頭是必須的請求報頭 
報頭的數量在不斷的增長中,來知足互聯網需求的變動 
能夠自定義報頭java

  • 常見普通(通用)報頭以下:

Alt text

  • 常見實體報頭

Alt text

  • 常見請求報頭

Alt text

  • 常見響應報頭

Alt text

如何發出http請求

  • 瀏覽器
  • Code
  • telnet
  • 工具 fiddler postman 等等
  • ……

回到問題,什麼是HTTP協議

HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。HTTP是一個無狀態的協議。 
HTTP協議永遠都是客戶端發起請求,服務器回送響應。 
HTTP協議的主要特色可歸納以下:nginx

  1. 支持客戶/服務器模式。支持基本認證和安全認證。 

  2. 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法經常使用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不一樣。因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度很快。 

  3. 靈活:HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。 

  4. HTTP 0.9和1.0使用非持續鏈接:限制每次鏈接只處理一個請求,服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。HTTP 1.1使用持續鏈接:沒必要爲每一個web對象建立一個新的鏈接,一個鏈接能夠傳送多個對象。 

  5. 無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。

關於應用層協議有一幅很流行的圖示:web

Alt text

Alt text

參考資料:

相關文章
相關標籤/搜索