HTTP協(xié)議

HTTP

HTTP的特性

  • HTTP協(xié)議構(gòu)建于TCP/IP協(xié)議之上,是一個應(yīng)用層協(xié)議,默認(rèn)端口號是80
  • HTTP是無連接無狀態(tài)

HTTP報文

請求報文

HTTP協(xié)議是以ASCII碼傳輸,建立在TCP/IP協(xié)議之上的應(yīng)用層規(guī)范。
規(guī)范把HTTP請求分為三個部分:狀態(tài)行、請求頭、消息主體

<method> <request-URL> <version>
<headers>
<entity-body>

HTTP定義了與服務(wù)器交互的不同方法,最基本的方法有四種
分別是GET/POST/PUT/DELETE

一個URL地址用于描述一個網(wǎng)絡(luò)上的資源,而HTTP以上的四種方法對應(yīng)這對這個資源的查、增、改、刪四種操作

  1. GET用于信息獲取,而且應(yīng)該是安全的和冪等的
    安全意味著該操作用于獲取信息而非修改信息。
    冪等意味著對同一URL的多個請求應(yīng)該返回相同的結(jié)果

    GET請求報文示例:

    GET /books/?sex=man&name=Professional HTTP/1.1
    Host:www.example.com
    User-Agent:Mozilla/5.0(Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
    Gecko/20050225 Firefox/1.0.1
    Connection:Keep-Alive
    
  2. POST代表一個可能會改變服務(wù)器資源的請求

    POST / HTTP/1.1
    Host:www.example.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
    Gecko/20050225 Firefox/1.0.1
    Content-Type:application/x-www-form-urlencoded
    Content-Length: 40
    Connection:Keep-Alive
    
    sex=man&name=Professional
    
  3. ATTENTION:

    • GET可提交的數(shù)據(jù)量受到URL長度的限制,HTTP協(xié)議規(guī)范沒有對URL長度進(jìn)行限制。這個限制是特定的瀏覽器和服務(wù)器對它的限制
    • 理論上說,POST是沒有大小限制的,HTTP協(xié)議規(guī)范也沒有進(jìn)行大小限制,處于安全考慮服務(wù)器在實現(xiàn)時會做一定限制

    POST提交數(shù)據(jù)的方式

    HTTP協(xié)議規(guī)定POST提交的數(shù)據(jù)必須在body部分中,但是協(xié)議中沒有規(guī)定數(shù)據(jù)使用哪種編碼方式或者數(shù)據(jù)格式。實際上,開發(fā)者完全可以自己決定消息主體的格式,只要最后發(fā)送的HTTP請求滿足上面的格式即可。

    但是數(shù)據(jù)發(fā)送出去,還要服務(wù)端解析成功才有意義。服務(wù)端通常根據(jù)請求頭(headers)中的Content-Type字段來獲取請求中的消息主體的編碼方式,再對主體進(jìn)行解析。POST提交數(shù)據(jù)方案,包含了Content-Type和消息主題編碼方式兩部分

    • application/x-www-form-urlencoded
      這是最常見的POST數(shù)據(jù)提交方式。瀏覽器的原生<form>表單,如果不設(shè)置enctype屬性,那么最終就會以 application/x-www-form-urlencoded方式提交數(shù)據(jù)
    • multipart/form-data
      這是另一種常見的POST數(shù)據(jù)提交方式。我們使用表單上傳文件時,必須讓<form>表單的enctype等于multipart/form-data。示例如下:

HTTP1.0與HTTP1.1的區(qū)別

  1. 緩存處理:
    • HTTP1.0 使用if-Modified-Since,Expired來作為緩存判斷的標(biāo)準(zhǔn)
    • HTTP1.1 使用Entity tag, if-Unmodified-Since, if-Match, if-None-Match控制緩存
  2. 帶寬優(yōu)化及網(wǎng)絡(luò)連接的使用
    • HTTP1.0 存在帶寬浪費的現(xiàn)象,不支持?jǐn)帱c續(xù)傳
    • HTTP1.1 引入range頭域,允許只請求資源的某個部分
  3. 錯誤通知的管理
    • HTTP1.0新增 24個錯誤狀態(tài)響應(yīng)碼,
      如409(conflict)表示請求的資源與當(dāng)前狀態(tài)發(fā)生沖突,410(Gone)表示服務(wù)器上的某個資源被永久性刪除
  4. Host頭處理
    • HTTP1.0中認(rèn)為每臺服務(wù)器都綁定一個唯一的IP地址,因此請求消息中URL不會傳遞主機名(hostname),隨著虛擬主機技術(shù)的發(fā)展,一臺物理服務(wù)器上可以存在多個虛擬主機,并且共享一個IP地址。
    • HTTP1.1請求消息和響應(yīng)消息都支持Host頭域,且請求消息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)
  5. 長連接
    • HTTP1.1支持長連接(PersistentConnection)和請求的流水線處理(Pipelining)處理,在一個TCP連接上可以傳送多個HTTP請求和響應(yīng),減少了簡歷和關(guān)閉連接的消耗和耗時。在HTTP1.1中默認(rèn)開啟Connection:keep-alive

HTTPS與HTTP的區(qū)別

  1. HTTPS協(xié)議需要到CA申請證書,一般免費證書少,需要繳費
  2. HTTP協(xié)議運行在TCP之上,所有傳輸?shù)膬?nèi)容都是明文的,HTTPS運行在SSL/TLS之上,SSL/TLS運行在TCP之上,所有傳輸?shù)膬?nèi)容都是經(jīng)過加密的
  3. HTTP和HTTPS使用完全不同的連接方式,用的端口也不一樣(80->443)
  4. HTTPS可以有效的防止運營商劫持

SPDY:HTTP1.x的優(yōu)化

  1. 多路復(fù)用:SPDY采用多路復(fù)用,解決了HTTP高延遲的問題
  2. 請求優(yōu)先級:多個請求同時發(fā)送時,可優(yōu)先發(fā)送高優(yōu)先級的請求
  3. header壓縮
  4. 基于HTTPS的加密協(xié)議傳輸,大大提高了傳輸數(shù)據(jù)的可靠性
  5. 服務(wù)端推送

SPDY: HTTP->SPDY->SSL->TCP

HTTP2.0和SPDY的區(qū)別

  1. HTTP2.0支持明文HTTP傳輸,而SPDY強制使用HTTPS
  2. HTTP2.0消息頭的壓縮算法采用HPACK,而SPDY采用DEFLATE

HTTP2.0與HTTP1.x相比的新特性

  1. 新的二進(jìn)制格式(Binary Format)
    HTTP1.0 解析是基于文本的,HTTP2.0解析采用二進(jìn)制格式
  2. 多路復(fù)用
    每一個request 都支持連接共享機制,一個request對應(yīng)一個id,這樣一個連接上可以有多個request。每個request可以隨機混雜在一起,接收方可以根據(jù)id將request歸屬帶不同的服務(wù)端請求中
    • HTTP1.x一次請求建立一個連接,用完關(guān)閉;每一個請求建立一個連接
    • HTTP1.1 Pipelining 采用串行排隊處理請求,一旦前面有請求超時,后面的都會被阻塞
    • HTTP2.0 多個請求可同時在一個連接上并行執(zhí)行,某個請求被阻塞不會影響其它連接
  3. header壓縮
    HTTP2.0維護(hù)一個字典,差量更新HTTP頭部,大大降低因頭部傳輸產(chǎn)生的流量
  4. 服務(wù)端推送
    服務(wù)端推送可以將客戶端需要的資源伴隨index.html一起發(fā)送到客戶端,省去客戶端重復(fù)請求的步驟。因為沒有發(fā)起請求,建立連接等操作,所以靜態(tài)資源通過服務(wù)端推送可以極大提高速度
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 01概述 HTTP(Hyper Text Transformer Protocol,超文本傳輸協(xié)議)是一種通信協(xié)議...
    程序員姜戈閱讀 207評論 0 0
  • 在雞年的最后一天完成了這篇文章。表示愉悅的同時,更要祝福大家狗年大吉吧....下方是一根不正經(jīng)的分割線... 重新...
    Xiao呆不糊涂閱讀 2,316評論 2 26
  • 本文主要內(nèi)容: 前言:什么是協(xié)議?1.http的由來(http是什么)2.http消息格式3.http的使用4.h...
    小曼blog閱讀 2,374評論 0 4
  • 原文地址HTTP 協(xié)議是互聯(lián)網(wǎng)的基礎(chǔ)協(xié)議,也是網(wǎng)頁開發(fā)的必備知識,最新版本 HTTP/2 更是讓它成為技術(shù)熱點。 ...
    baixiaoshuai閱讀 422評論 0 0
  • HTTP協(xié)議報文 Http協(xié)議報文分為【Http請求報文】和【Http響應(yīng)報文】 HTTP請求報文 Http請求報...
    四核阿宅閱讀 1,669評論 1 2

友情鏈接更多精彩內(nèi)容