日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入理解HTTP协议

發(fā)布時(shí)間:2023/11/29 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解HTTP协议 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http是一種為分布式,協(xié)作式的,超媒體信息系統(tǒng)。它是一種通用的,無狀態(tài)的協(xié)議,除了應(yīng)用于超文本傳輸外,它也可以應(yīng)用于諸如名稱服務(wù)器和分布對(duì)象管理系統(tǒng)之類的系統(tǒng)。HTTP的特性就是數(shù)據(jù)表現(xiàn)形式可以定義的和可協(xié)商的,這就允許系統(tǒng)能夠獨(dú)立于數(shù)據(jù)傳輸被構(gòu)建。它是面向應(yīng)用層的協(xié)議。

整體操作

HTTP協(xié)議是一種請(qǐng)求/響應(yīng)型的協(xié)議。客戶端給服務(wù)器發(fā)送請(qǐng)求的格式是一個(gè)請(qǐng)求方法(request method),URI , 協(xié)議版本號(hào),然后緊接著一個(gè)包含請(qǐng)求修飾符(modifiers),客戶端信息,和可能的消息主體的類MIME(MIME-like)消息。服務(wù)器對(duì)請(qǐng)求端發(fā)送響應(yīng)的格式是一個(gè)狀態(tài)行(status line), 其后跟隨一個(gè)包含服務(wù)器信息,實(shí)體元信息和可能的實(shí)體主體內(nèi)容的類MIME(MIME-like)的消息。其中狀態(tài)行(status line) 包含消息的協(xié)議版本號(hào)和一個(gè)成功或錯(cuò)誤碼。

大部分的HTTP通信是由(user agent)發(fā)起的,由應(yīng)用于一個(gè)源服務(wù)器資源的請(qǐng)求構(gòu)成。最簡(jiǎn)單的情形,這可以通過用戶代理(UA)和源服務(wù)器(O)之間的單一連接(v)來實(shí)現(xiàn)。
請(qǐng)求鏈(Request?chain)———————>用戶代理(UA)—————-單一連接(v)————–源服務(wù)器(O)?<————————–響應(yīng)鏈(response?chain)??

HTTP通信通常發(fā)生在TCP/IP鏈接上。默認(rèn)端口是TCP 80,不過其它端口也可以使用。但并不排除HTTP協(xié)議會(huì)在其它協(xié)議之上被實(shí)現(xiàn)。HTTP僅僅期望的是一個(gè)可靠的傳輸(http一般建立在傳輸層之上);所以任何提供這種保證的協(xié)議都可以被使用。

協(xié)議參數(shù)

1http版本(HTTP-VERSION)
2通用資源標(biāo)示符(URI)
3日期/時(shí)間格式(Date/Time Formats)
4字符集(Character Sets)
5內(nèi)容編碼(Content Codings)
6傳輸編碼
7媒體類型
8產(chǎn)品標(biāo)記
9質(zhì)量值
10語言標(biāo)簽
11實(shí)體標(biāo)簽
12范圍單位(Range Units)

HTTP消息

消息類型
HTTP消息由從客戶端到服務(wù)器請(qǐng)求的消息和從服務(wù)器到客戶端的響應(yīng)消息兩部分組成。兩種類型的消息都由一個(gè)開始行(start-line), 零個(gè)或更多個(gè)頭域(經(jīng)常被稱作”頭”),一個(gè)指示頭域結(jié)束的空行(也就是以一個(gè)CRLF為前綴的什么也沒有的行),最后一個(gè)可有可無的消息主體(message-body)組成。為了健壯性,服務(wù)器應(yīng)該忽略任意請(qǐng)求行(Request-Line)前面的空行。換句話說,如果服務(wù)器開始讀消息流的時(shí)候發(fā)現(xiàn)了一個(gè)CRLF,它應(yīng)該忽略這個(gè)CRLF。
一般一個(gè)存在問題的HTTP/1.0客戶端會(huì)在POST請(qǐng)求消息之后添加額外的CRLF。為了重新聲明被BNF明確禁止的行為,一個(gè)HTTP/1.1客戶端不能在請(qǐng)求前和請(qǐng)求后附加一些不必要的CRLF。

消息頭(Message Headers)
HTTP頭域包括常用頭域,請(qǐng)求頭域,響應(yīng)頭域和實(shí)體頭域。
消息主體
HTTP消息的消息主體用來承載請(qǐng)求和響應(yīng)的實(shí)體主體(entity-body)的,這些消息主體(message-body)僅僅當(dāng)被傳輸譯碼頭域(Transfer-Encoding)指明的傳輸編碼(transfer-coding)應(yīng)用于實(shí)體主體(entity-body)時(shí)和實(shí)體主體相區(qū)別,其它情況消息主體和實(shí)體主體相同。
消息的長(zhǎng)度(Message Length)
當(dāng)消息主體出現(xiàn)在消息中時(shí),一條消息的傳輸長(zhǎng)度(transfer-length)是消息主體(message-body)的長(zhǎng)度;也就是說在實(shí)體主體被應(yīng)用了傳輸編碼(transfer-coding)后。
常用頭域(General Header Fields)
有一些頭域即適用于請(qǐng)求消息也適用于響應(yīng)消息,但是這些頭域并不適合傳輸實(shí)體。這些頭域只能應(yīng)用于傳輸消息。

請(qǐng)求

一個(gè)請(qǐng)求消息是從客戶端到服務(wù)端的,在消息首行里包含方法,資源指示符,協(xié)議版本。
請(qǐng)求行(Request-Line)
請(qǐng)求行(Request-Line)是以一個(gè)方法標(biāo)記開始,后面跟隨Request-URI和協(xié)議版本(HTTP-Version),最后以CRLF結(jié)束。元素是以SP字符分割。除了最后的CRLF,CR或者LF是不被允許的。
Request-Line??=Method?SP?Request-URL?SP??HTTP-Version?CRLF
請(qǐng)求資源的識(shí)別
請(qǐng)求資源的精確定位是由請(qǐng)求里的Request-URI和Host頭域決定的。
請(qǐng)求頭域
請(qǐng)求頭域允許客戶端傳遞請(qǐng)求的附加信息和客戶端自己的附加信息給服務(wù)器。這些頭域作為請(qǐng)求的修飾,這和程序語言方法調(diào)用的參數(shù)語義是等價(jià)的。

響應(yīng)

接收和解析一個(gè)請(qǐng)求消息后,服務(wù)器發(fā)出一個(gè)HTTP響應(yīng)消息。
response =Status-Line
*(( general-header)
| response-header
CRLF
[ message-body ]
狀態(tài)行
響應(yīng)消息的第一行是狀態(tài)行(status-Line), 由協(xié)議版本以及數(shù)字狀態(tài)碼和相關(guān)的文本短語組成,各部分間用空格符隔開,除了最后的CRLF序列,中間不允許有CR或LF。
Status-Line?=?HTTP-Version?SP?Status-Code?SP?Reason-Phrase?CRLF
響應(yīng)頭域
響應(yīng)頭域允許服務(wù)器傳送響應(yīng)的附加消息,這些信息不能放在狀態(tài)行里。這些頭域給出有關(guān)服務(wù)器的信息以及請(qǐng)求URI指定資源的更進(jìn)一步訪問信息。

實(shí)體

如果不被請(qǐng)求方法或者響應(yīng)狀態(tài)碼所限制,請(qǐng)求和響應(yīng)消息都可以傳輸實(shí)體。實(shí)體包括實(shí)體頭域(entity-header)與實(shí)體主體(entity-boty),而有些響應(yīng)只包括實(shí)體頭域(entity-header)。
實(shí)體頭域(Entity Header Fields)
實(shí)體(entity-header)頭域定義了關(guān)于實(shí)體主體的元信息,或在無主體的情況下定義了請(qǐng)求的資源的元信息。有些元信息是可選的;一些是必須的。
entity-header?=?Allow??
|?Content-Encoding?
|?Content-Language??
|?Content-Length?
|?Content-Location??
|?Content-MD5??
|?Content-Range??
|?Content-Type??
|?Expires??
|?Last-Modified??
|?extension-header
extension-header?=?message-head
擴(kuò)展頭機(jī)制允許在不改變協(xié)議的前提下定義額外的實(shí)體頭域,但不保證這些域在接收端能夠被識(shí)破。未被識(shí)破的頭域應(yīng)當(dāng)被接收著忽略,且必須被透明代理(transparent proxy)轉(zhuǎn)發(fā)。
實(shí)體主體(Entity Body)
由HTTP請(qǐng)求或響應(yīng)發(fā)送的實(shí)體主體(如果存在的話)的格式與編碼方式應(yīng)由實(shí)體的頭域決定。實(shí)體主體只有當(dāng)消息主體存在時(shí)才存在。實(shí)體主體從消息主體根據(jù)傳輸譯碼頭域(Transfer-encoding)解碼得到,傳輸譯碼用于確保消息的安全和合適傳輸。

關(guān)于HTTP還有很多東西,這里暫時(shí)就討論這么多。

總結(jié)

以上是生活随笔為你收集整理的深入理解HTTP协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。