http协议前端常识(MQTT协议)
這次的這篇文章給大家分享了一些關(guān)于http協(xié)議前端常識問題,有興趣的朋友可以看一下
http
介紹:http基于tcp/ip通信來傳遞數(shù)據(jù)
注意事項(xiàng)
-
http是無連接:每次連接只處理一個請求,服務(wù)器處理完請求后,并收到客戶端的應(yīng)答后,即斷開連接;
-
http媒體是獨(dú)立的:只要客戶端和服務(wù)器端知道如何處理數(shù)據(jù)類型,任何數(shù)據(jù)都可以用http傳送;
-
http無狀態(tài):無狀態(tài)是指協(xié)議對于事物處理沒得記憶能力;
消息結(jié)構(gòu)
1.http客服端請求包括:請求行、請求頭部、空行和請求數(shù)據(jù)
2.http響應(yīng):狀態(tài)行、消息報頭、空行、響應(yīng)正文
http請求方法
-
http1.0:get、post和head
-
http1.1新增五種請求方式: delete、put、connect、 tarce和options
| 方法 | 描述 |
|---|---|
| get | 向特定資源發(fā)起請求 |
| post | 向指定資源提交數(shù)據(jù)進(jìn)行數(shù)據(jù)處理。數(shù)據(jù)包含在請求體中,post請求可能用于新的資源的創(chuàng)建以及已有資源的修改 |
| head | 類似與get請求,只不過沒有返回體,用于獲取包含在響應(yīng)消息頭中的元信息 |
| put | 向指定資源上傳最新內(nèi)容 |
| delete | 請求服務(wù)器刪除指定資源 |
| trace | 回顯服務(wù)器收到的請求,主要用于測試或診斷 |
| connect | http1.1中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器 |
| options | 返回服務(wù)器對特定資源支持的http方法,用來向服務(wù)器發(fā)送‘*’的請求來測試服務(wù)器的功能性 |
常見首部字段含義介紹
首部和方法配合工作,共同決定客戶端和服務(wù)端能做什么事情
通用首部
客戶端和服務(wù)端都可以使用的首部
| 首部 | 描述 |
|---|---|
| Connection | 允許客戶端與服務(wù)端指定與請求/響應(yīng)相連接有關(guān)的選項(xiàng) |
| Date | 提供日期和時間標(biāo)志,說明報文是什么時間創(chuàng)建的 |
| MIME-Version | 給出發(fā)送給端MIME版本 |
| Trailer | 如果報文傳輸采用分塊傳輸(chunked transfer encoding)方式,就可以用這個首部列出位于報文拖掛部分的首部集合 |
| Transfer-Encoding | 告訴接受端為了保證報文的可靠傳輸,對報文采用了什么編碼方式 |
| Update | 給出了發(fā)送端可能想要“升級”使用新版或協(xié)議 |
| Via | 顯示報文經(jīng)過的中間節(jié)點(diǎn)(代理、網(wǎng)關(guān)) |
請求首部
請求報文特有的,為服務(wù)器提供一些額外的信息,比如客戶端希望接收到什么樣的數(shù)據(jù)類型
請求的信息性首部
| 首部 | 描述 |
|---|---|
| Client-Ip | 提供運(yùn)行客戶端機(jī)器的IP地址 |
| From | 提供客戶端用戶的E-mail地址 |
| Host | 給出接收請求服務(wù)器的地址和端口號 |
| Referer | 提供包含當(dāng)前請求URL的文檔的URL |
| UA-color | 提供客戶端顯示器的顯示顏色有關(guān)的信息 |
| UA-CPU | 給出客戶端CPU類型和制造商 |
| UA-Disp | 提供了客戶端顯示器能力有關(guān)的信息 |
| UA-OS | 提供客客戶機(jī)器上運(yùn)行的操作系統(tǒng)和版本 |
| UA-Pixels | 提供了客戶端顯示器的像素信息 |
| User-Agent | 將發(fā)送請求的應(yīng)用程序名稱告知服務(wù)器 |
Accept首部
| 首部 | 描述 |
|---|---|
| Accept | 告訴服務(wù)器能夠發(fā)送哪些媒體類型 |
| Accept-Charset | 告訴服務(wù)器能夠發(fā)送哪些字符集 |
| Accept-Encoding | 告訴服務(wù)器能夠發(fā)送哪些編碼方式 |
| Accept-Language | 告訴服務(wù)器能夠發(fā)送哪些語言 |
| TE | 告訴服務(wù)器可以使用哪些擴(kuò)展傳輸編碼 |
條件請求首部
| 首部 | 描述 |
|---|---|
| Expect | 允許客戶端列出請求所要求的服務(wù)器行為 |
| If-Match | 如果實(shí)體標(biāo)記與文檔當(dāng)前的實(shí)體標(biāo)記相匹配,就獲取這份文檔 |
| If-Modify-Since | 除非在某個指定的日期之后資源被修改過,否則就限制這個請求 |
| If-None-Match | 如果實(shí)體標(biāo)記與文檔當(dāng)前的實(shí)體不相符,就獲取文檔 |
| If-Range | 允許對文檔的某個范圍就行條件請求 |
| If-Unmodified-Since | 除非在某個指定日期之后資源沒有被修改過,否則就限制這個請求 |
| Range | 如果服務(wù)器支持范圍請求,就請求資源的指定范圍 |
安全請求受首部
| 首部 | 描述 |
|---|---|
| Authorization | 包含了客戶端提供給服務(wù)器,以便對其自身進(jìn)行數(shù)據(jù)驗(yàn)證 |
| Cookie | 客戶端用它想服務(wù)端發(fā)送一個令牌————它并不是真正的安全首部,確實(shí)隱含了安全功能 |
| Cookie2 | 用來說明請求端支持的Cookie版本 |
代理請求首部
| 首部 | 描述 |
|---|---|
| Max-Forward | 在通往服務(wù)器的的路徑上,將請求轉(zhuǎn)給其他代理或網(wǎng)關(guān)的最大次數(shù)————與TARCE方法一起使用 |
| Proxy-Authorization | 與Authorization首部相同,但這個首部是在與代理進(jìn)行認(rèn)證時使用的 |
| Proxy-Connection | 與Connection首部相同,但這個首部是在與代理建立連接時使用的 |
響應(yīng)首部
響應(yīng)報文有自己的首部集,以遍為客服端提供信息
響應(yīng)的信息性首部
| 首部 | 描述 |
|---|---|
| Age | (從最初創(chuàng)建開始)響應(yīng)持續(xù)時間 |
| Publick | 服務(wù)器為其資源支持的請求方法列表 |
| Retry-After | 如果資源不可用的話,在此日期或時間重試 |
| Server | 服務(wù)器應(yīng)用程序軟件的名稱和版本 |
| Title | 對于html文檔來說,就是HTML文檔的源端給出的標(biāo)題 |
| Wraning | 比原因短語中,更詳細(xì)的警告報文 |
協(xié)商首部
| 首部 | 描述 |
|---|---|
| Accept-Ranges | 對此資源來說,服務(wù)器可接受的數(shù)據(jù)類型 |
| Vary | 服務(wù)器查看其他首部 列表,可能會使響應(yīng)發(fā)生變化;也就是說,這是一個首部列表,服務(wù)器會根據(jù)這些首部的內(nèi)容挑選出最合適的資源版本發(fā)送給客戶端 |
安全響應(yīng)首部
| 首部 | 描述 |
|---|---|
| Proxy-Authenticate | 來自代理對客戶端的質(zhì)詢列表 |
| Set-Cookie | 不是真正的安全首部,但隱含安全功能;可以在客戶端設(shè)置一個安全令牌,以遍服務(wù)端對客戶端進(jìn)行標(biāo)志 |
| Set-Cookie2 | 與Set-Cookie類似 |
| WWW-Authenticate | 來自服務(wù)器對客戶端的質(zhì)詢列表 |
實(shí)體首部
實(shí)體首部用于實(shí)體主體部分的首部
內(nèi)容首部
| 首部 | 描述 |
|---|---|
| Content-Base | 解析主體中相對URL時使用的基礎(chǔ)URL |
| Content-Enconding | 對主題執(zhí)行的任意編碼方式 |
| Content-Language | 理解主體時最適宜使用的自然語言 |
| Content-Length | 主體的長度或者尺寸 |
| Content-Location | 資源實(shí)體所處的位置 |
| Content-MD5 | 主體的MD5校驗(yàn)和 |
| Content-Range | 在整個資源中此實(shí)體表示的資源范圍 |
| Content-Type | 這個主題的對象類型 |
實(shí)體緩存首部
| 首部 | 描述 |
|---|---|
| ETag | 與此實(shí)體相關(guān)的實(shí)體標(biāo)記 |
| Expires | 實(shí)體不在有效,要從原始的源端再次獲取此實(shí)體的日期和時間 |
| Last-Modified | 這個實(shí)體最后一次被修改的日期和時間 |
狀態(tài)嗎
狀態(tài)碼為客戶端提供一種理解事務(wù)處理結(jié)果的快捷方式
-
100-199: 信息性狀態(tài)碼
| 狀態(tài)碼 | 原因短語 | 含義 |
|---|---|---|
| 100 | Continue | 說明收到了客戶端的請求初始部分,請客戶端繼續(xù)。發(fā)送這個狀態(tài)碼后,服務(wù)端在收到請求后必須進(jìn)行響應(yīng) |
| 101 | Switching Protocols | 說明服務(wù)器端正在根據(jù)客戶端的指定,將協(xié)議切換為Update首部所列的協(xié)議 |
-
200-299: 成功狀態(tài)碼
客戶端發(fā)送請求時,這些請求通常都是成功的
| 狀態(tài)碼 | 原因短語 | 含義 |
|---|---|---|
| 200 | OK | 請求沒有問題,實(shí)體的主體部分包含請求的資源 |
| 201 | Created | 用于創(chuàng)建服務(wù)器的對象請求(比如 PUT),響應(yīng)的實(shí)體部分中應(yīng)該包含各種引用了以創(chuàng)建的資源的URL,Location首部包含的則是最具體的引用,服務(wù)器必須在發(fā)送這個狀態(tài)之前創(chuàng)建好對象 |
| 202 | Accepted | 請求已接受,但服務(wù)器還未對其執(zhí)行任何操作。不能保證服務(wù)器會完成這個請求,只是意味著接受請求時,它看起來是有效的。服務(wù)器應(yīng)該在實(shí)體的主體部分包含對請求狀態(tài)的描述,或許還應(yīng)該對請求完成時間的估計(jì)(或者包含一個指針,指向可以獲取此信息的位置) |
| 203 | Non-Authoritative Information | 實(shí)體首部包含的信息不是來自于源服務(wù)器,而是來自資源的一份副本。如果中間節(jié)點(diǎn)上有一份資源副本,但無法或者沒有對它所發(fā)送的資源有關(guān)的元信息(首部)進(jìn)行驗(yàn)證,就會出現(xiàn)這種情況 |
| 204 | No Content | 響應(yīng)報文中包含若干首部和一個狀態(tài)行,但沒有實(shí)體的主體部分。主要用于瀏覽器不轉(zhuǎn)為新文檔的情況下,對其進(jìn)行更新(比如刷新一個表達(dá)頁面) |
| 205 | Reset Content | 另一個主要用于瀏覽器的代碼。負(fù)責(zé)告訴瀏覽器清除當(dāng)前頁面中的所有html標(biāo)簽 |
| 206 | Partail Content | 成功執(zhí)行一個部分或者Range請求。稍后我們會看到,客戶端可以通過一些特殊的首部來獲取部分或范圍內(nèi)的文檔————這個狀態(tài)碼就說明范圍請求成功響應(yīng)中必須包括Content-Range、Date和ETag或者Content-Location首部 |
-
300-399: 重定向狀態(tài)碼
重定向狀態(tài)碼要么告知客戶端使用替代位置來訪問它們感興趣的資源,要么提供一個可替代的響應(yīng)而不是資源的內(nèi)容。如果資源已被移動,可發(fā)送一個重定向狀態(tài)碼和一個可選的Location首部來告知客戶端資源已被移走,以及現(xiàn)在在哪里可以找到它
| 狀態(tài)碼 | 原因短語 | 含義 |
|---|---|---|
| 300 | Multiple Choices | 客戶端請求實(shí)際是一個指向多個資源的URL時會返回這個狀態(tài)碼,比如服務(wù)器上某個HTML文檔有中文和英文版。返回這個代碼時會有一個選項(xiàng)列;這樣用戶就可以選擇他希望使用的一項(xiàng) |
| 301 | Moved Permanently | 在請求URL已被移出時。響應(yīng)的Loaction首部中包含資源所處在的URL |
| 302 | Found | 與301類似;但是客戶端應(yīng)該使用Location首部給出的URL獲取臨時定位資源。將來的請求任使用老資源 |
| 303 | Set Ohter | 告訴客戶端應(yīng)該使用另外一個URL來獲取資源。新的URL資源位于響應(yīng)報文Location首部。其主要目的是允許POST請求的響應(yīng)將客戶端定向到某個資源上去 |
| 304 | Not Modify | 客戶端可以通過所包含的請求首部,使其請求變成有條件的。如果客戶端發(fā)送一個GET請求,而最近資源未改變的話,就可以用這個狀態(tài)碼來說明資源未被修改。帶有這個狀態(tài)碼的響應(yīng)不應(yīng)該包含實(shí)體部分 |
| 305 | Use Proxy | 用來說明必須通過一個代理來訪問資源。代理的位置由Location來給出。很重要的一點(diǎn),客戶端是相對某個特定資源來解析這條響應(yīng)的,不能假定所有請求,甚至所有對持有所請求的服務(wù)器請求都通過這個代理進(jìn)行。如果客戶端錯誤的讓代理介入某個請求,可能引發(fā)破壞性的行為,照成安全漏銅問題 |
| 306 | 未使用 | 未使用 |
| 307 | Temporary Redirect | 與301狀態(tài)碼類似;但客戶端應(yīng)該使用Location首部給出的URL來臨時定位資源。將來的資源應(yīng)該用老的URL |
-
400-499: 客戶端錯誤狀態(tài)碼
有時候客戶端會發(fā)送一個服務(wù)器無法處理的東西,比如格式錯誤的請求報文,或者最常見的時候一個不存在的URL
| 狀態(tài)碼 | 原因短語 | 含義 |
|---|---|---|
| 400 | Bad Request | 用于告訴客戶端發(fā)送了一個錯誤的請求 |
| 401 | Unauthorized | 與適當(dāng)?shù)氖撞恳黄鸱祷兀谶@個首部中請求客戶端在獲取資源的訪問權(quán)之前,對自己進(jìn)行認(rèn)證 |
| 402 | Payment Required | 狀態(tài)碼未使用 |
| 403 | Forbidden | 用于說明請求被服務(wù)器拒絕。如果服務(wù)器說明為什么拒絕請求,可以包含實(shí)體的主體部分進(jìn)行描述。但這個狀態(tài)碼通常是服務(wù)器不想說明原因的時候使用 |
| 404 | Not Found | 用于說明服務(wù)器說明無法找到請求的URL。通常會包含一個實(shí)體,以便于客戶端應(yīng)用程序給用戶看 |
| 405 | Method Not Allowed | 發(fā)送的請求中帶有所請求的URL不支持的方法時,會使用此狀態(tài)碼。因該在響應(yīng)中包含Allow首部,以告訴客戶端對所請求的資源可以使用哪些方法 |
| 406 | Not Acceptable | 客戶端可以指定參數(shù)來說明它愿意接受什么類型的實(shí)體。服務(wù)器沒有與客戶端接受的URL相匹配的資源的時,使用此代碼。通常服務(wù)器會包含一些首部,以便客戶端弄清除為什么請求無法滿足 |
| 407 | Proxy Authentication Required | 與401相似,但用于要求對資源進(jìn)行認(rèn)證的代理服務(wù)器 |
| 408 | Request Timeout | 如果客戶端請求的時間太長,服務(wù)器可以返回此狀態(tài)碼,并關(guān)閉連接。超時時常隨服務(wù)器不同而不同,但通常對所有合法服務(wù)器來說,都是夠長的 |
| 409 | Conflict | 用于說明請求可能在資源上引發(fā)了一些沖突。服務(wù)器擔(dān)心會引發(fā)沖突,可以發(fā)送此狀態(tài)碼。響應(yīng)中應(yīng)該包含描述沖突的主體 |
| 410 | Gone | 與404類似,只是服務(wù)器曾經(jīng)擁有過此資源。主要用于Web站點(diǎn)的維護(hù),這樣服務(wù)器管理者就可以在資源被移除的情況下通知客戶端 |
| 411 | Length Required | 服務(wù)器要求請求報文中包含Content-length時使用 |
| 412 | Precondition Falied | 客戶端發(fā)送請求條件,且其中一個條件失敗的時候使用。客戶端包含了Expect首部時發(fā)送的就是條件請求 |
| 413 | Request Entiny Too large | 客戶端發(fā)送的實(shí)體主體部分比服務(wù)器能夠或者希望處理的要大時,使用此狀態(tài)碼 |
| 414 | Request Url Too Long | 客戶端發(fā)送的請求中的請求URL比服務(wù)器能夠或者希望處理的要長時,使用此狀態(tài)碼 |
| 415 | Unsupported Media Type | 服務(wù)端無法理解或支持客戶端發(fā)送實(shí)體的內(nèi)容類型時,使用此狀態(tài)碼 |
| 416 | Request Range Not Satisfiable | 請求報文是請求資源的某個范圍,而此范圍無效或無法滿足時,使用此狀態(tài)碼 |
| 417 | Expection Failed | 請求的Expect請求包含了一個期望,但服務(wù)器無法滿足此期望時,使用此狀態(tài)碼。如果代理或其他中間程序有確切證據(jù)說明源服務(wù)區(qū)器端會為請求產(chǎn)生一個失敗期望,就可以發(fā)送這個狀態(tài)碼 |
-
500-599: 服務(wù)端錯誤狀態(tài)碼
有時候客戶端發(fā)送一個請求,服務(wù)器自身發(fā)生錯誤時
| 狀態(tài)碼 | 原因短語 | 含義 |
|---|---|---|
| 500 | Internal Server Error | 服務(wù)器遇到一個妨礙它為請求提供服務(wù)的錯誤時,使用此狀態(tài)碼 |
| 501 | Not Inplemented | 客戶端發(fā)送請求時超出服務(wù)器的能力范圍,使用此狀態(tài)碼 |
| 502 | Bad Gateway | 作為代理或網(wǎng)關(guān)使用服務(wù)器從響應(yīng)鏈的下一條鏈路上收到一條偽響應(yīng)時,使用此狀態(tài)碼 |
| 503 | Service Unavailable | 用來說明服務(wù)器現(xiàn)在無法為請求提供服務(wù),但將來可以。如果服務(wù)器知道資源什么時候可用,可以在響應(yīng)中包含一個Retry-after首部 |
| 504 | Gateway Timeout | 與狀態(tài)碼408類似,只是這里的響應(yīng)來自一個網(wǎng)關(guān)或代理,他們在等待另一服務(wù)器對其請求進(jìn)行響應(yīng)時超時了 |
| 505 | HTTP Version Not Supported | 服務(wù)器收到的請求使用了它無法或不愿支持的協(xié)議版本,使用此狀態(tài)碼。有些服務(wù)器應(yīng)用程序選擇不支持協(xié)議的早早期版本 |
在github上編輯此頁
博主個人博客
參考:http協(xié)議
[http權(quán)威指南]
相關(guān)推薦:
使用http協(xié)議的流程
什么是HTTP協(xié)議
Http協(xié)議與TCP協(xié)議有什么區(qū)別
以上就是http協(xié)議前端常識 的詳細(xì)內(nèi)容,更多請關(guān)注風(fēng)君子博客其它相關(guān)文章!
總結(jié)
以上是生活随笔為你收集整理的http协议前端常识(MQTT协议)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php去掉最后一个,号,织梦当前位置去除
- 下一篇: JavaScript运算符有几种(表达式