HTTP協(xié)議
超文本傳輸協(xié)議(Hypertext Transfer Protocol,HTTP)是一種請(qǐng)求-響應(yīng)的協(xié)議,用戶可以通過(guò)HTTP向服務(wù)器上傳、下載數(shù)據(jù)。HTTP基于TCP協(xié)議,是web應(yīng)用中最主要的應(yīng)用層協(xié)議,比如瀏覽器上網(wǎng)就是使用HTTP協(xié)議。通訊端口默認(rèn)為80。
超文本安全傳輸協(xié)議(Hypertext Transfer Protocol Secure,HTTPS)是加入安全加密的HTTP通道,在HTTP的基礎(chǔ)上通過(guò)傳輸加密和身份認(rèn)證保證了傳輸過(guò)程的安全性。HTTPS的安全基礎(chǔ)是SSL/TLS。通訊端口默認(rèn)為443。
HTTP協(xié)議源文檔
HTTP通訊特點(diǎn)
- 可靠傳輸:HTTP基于TCP,需要先連接再傳輸數(shù)據(jù),因此也集成了TCP可靠傳輸?shù)奶匦浴?/li>
- 立即響應(yīng):HTTP是無(wú)狀態(tài)的協(xié)議,即不存儲(chǔ)業(yè)務(wù)處理狀態(tài),每個(gè)請(qǐng)求都是互相獨(dú)立、毫無(wú)關(guān)聯(lián)的,協(xié)議不要求客戶端或服務(wù)器記錄請(qǐng)求相關(guān)的信息。
- 單向請(qǐng)求:HTTP基于客戶端-服務(wù)器模式,HTTP只能從客戶端向服務(wù)器發(fā)起請(qǐng)求,服務(wù)器不能主動(dòng)向客戶端發(fā)起請(qǐng)求。
- 靈活傳輸:HTTP可以傳輸任意類型的數(shù)據(jù)。
HTTP通訊流程
- 客戶端發(fā)起HTTP請(qǐng)求,與服務(wù)器建立TCP連接。
- 客戶端向服務(wù)器發(fā)送HTTP報(bào)文。
- 服務(wù)器收到HTTP報(bào)文后進(jìn)行業(yè)務(wù)處理,然后返回結(jié)果。
HTTPS通訊流程
HTTPS是在HTTP的基礎(chǔ)上加入了TLS,且在數(shù)據(jù)傳輸?shù)倪^(guò)程中使用證書(shū)對(duì)數(shù)據(jù)進(jìn)行加密。
- 客戶端向服務(wù)器發(fā)送HTTP請(qǐng)求,建立TCP連接,并發(fā)送TLS相關(guān)信息如:生成的隨機(jī)數(shù)。
- 服務(wù)器回復(fù)TLS相關(guān)信息,同時(shí)傳送自己的CA證書(shū)(公鑰)。
- 客戶端驗(yàn)證服務(wù)器傳送過(guò)來(lái)的信息是否具備合法性,比如CA證書(shū)的頒發(fā)機(jī)構(gòu)是否可靠、CA證書(shū)是否過(guò)期,域名與證書(shū)是否一致等。
- 客戶端會(huì)生成一個(gè)用于通信的“對(duì)稱密鑰”,然后通過(guò)公鑰對(duì)密鑰進(jìn)行加密,并且傳送到服務(wù)器。
- 如果服務(wù)器要求身份認(rèn)證(可選),客戶端會(huì)生成一個(gè)隨機(jī)數(shù)然后對(duì)其進(jìn)行數(shù)據(jù)簽名,將這個(gè)含有簽名的隨機(jī)數(shù)和客戶端證書(shū)以及“對(duì)稱密鑰”一起傳給服務(wù)器。
- 如果服務(wù)器要求身份認(rèn)證(可選),服務(wù)器會(huì)驗(yàn)證隨機(jī)簽名和客戶端證書(shū)是否具備合法性,比如:客戶端證書(shū)日期是否有效,頒發(fā)客戶端證書(shū)的CA機(jī)構(gòu)是否可靠等。
- 服務(wù)器將用私鑰將“對(duì)稱密鑰”進(jìn)行解密,然后服務(wù)器將使用“對(duì)稱密鑰”加密的回復(fù)發(fā)送給客戶端。
- TLS加密結(jié)束,接下來(lái)的數(shù)據(jù)傳輸將會(huì)使用“對(duì)稱密鑰”進(jìn)行數(shù)據(jù)通信。
HTTP請(qǐng)求報(bào)文
HTTP報(bào)文主要分為三部分:請(qǐng)求行、請(qǐng)求頭部、請(qǐng)求數(shù)據(jù)。
需要注意的是,HTTP報(bào)文的每一行都需要換行符,請(qǐng)求頭部與請(qǐng)求數(shù)據(jù)之間還需要一個(gè)空行。
- 請(qǐng)求行:包含請(qǐng)求方法,URL,協(xié)議版本。其中協(xié)議版本目前廣泛使用的還是HTTP/1.1。
- 請(qǐng)求頭部:使用鍵值對(duì)的數(shù)據(jù)格式(key: value),用于聲明請(qǐng)求的屬性參數(shù)。
- 請(qǐng)求數(shù)據(jù):具體的請(qǐng)求數(shù)據(jù)。發(fā)送不同的數(shù)據(jù)會(huì)有不同的格式。
通常在POST請(qǐng)求時(shí)才會(huì)有請(qǐng)求數(shù)據(jù)部分
- 文本數(shù)據(jù),以訪問(wèn)OpenAI ChatGPT的請(qǐng)求為例
POST /v1/chat/completions HTTP/1.1 //post請(qǐng)求,具體訪問(wèn)URL為/v1/chat/completions,HTTP/1.1 協(xié)議
Host: api.openai.com //訪問(wèn)的服務(wù)器域名
Authorization: sk-xxxxxxxxxxxxxxxx //服務(wù)器需要的認(rèn)證頭部
Content-Type: application/json //請(qǐng)求數(shù)據(jù)的數(shù)據(jù)類型
Content-Length: 179 //請(qǐng)求數(shù)據(jù)數(shù)據(jù)長(zhǎng)度
{ //請(qǐng)求數(shù)據(jù)
"model":"gpt-3.5-turbo",
"max_tokens":1000,
"temperature":0.8,
"messages": [
{
"role": "user",
"content": "講個(gè)小故事"
}
]
}
- 文件數(shù)據(jù),以訪問(wèn)OpenAI transcriptions的請(qǐng)求為例
POST /v1/audio/transcriptions HTTP/1.1 //post請(qǐng)求,具體訪問(wèn)URL為/v1/chat/completions,HTTP/1.1
Host: api.openai.com //訪問(wèn)的服務(wù)器域名
Authorization: sk-xxxxxxx //服務(wù)器需要的認(rèn)證頭部
Content-Length: 360 //請(qǐng)求數(shù)據(jù)數(shù)據(jù)長(zhǎng)度
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW //請(qǐng)求數(shù)據(jù)的數(shù)據(jù)類型,包括數(shù)據(jù)分隔符
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="/C:/Users/zou/Desktop/16k.wav" //傳輸?shù)臄?shù)據(jù)信息描述
Content-Type: audio/wav //傳輸?shù)臄?shù)據(jù)類型。與數(shù)據(jù)要個(gè)一個(gè)空行
(音頻文件數(shù)據(jù))
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=modle //傳輸?shù)臄?shù)據(jù)信息描述。與數(shù)據(jù)要個(gè)一個(gè)空行
whisper-1
------WebKitFormBoundary7MA4YWxkTrZu0gW-- //最后的分隔符多了 -- 表示數(shù)據(jù)結(jié)尾
請(qǐng)求方法
請(qǐng)求方法 | 作用 |
---|---|
GET | 此方法用于請(qǐng)求指定資源的表示形式。GET請(qǐng)求通常用于數(shù)據(jù)檢索,例如請(qǐng)求網(wǎng)頁(yè)內(nèi)容。GET請(qǐng)求的參數(shù)通常附加在URL后面。 |
POST | 此方法用于向指定資源提交數(shù)據(jù)以創(chuàng)建或更新資源。POST請(qǐng)求通常包含在請(qǐng)求體中的數(shù)據(jù),適用于提交表單或上傳文件。 |
HEAD | 與GET方法相似,但HEAD不返回響應(yīng)體,僅返回狀態(tài)行和標(biāo)題部分。HEAD方法主要用于獲取響應(yīng)的元數(shù)據(jù)。 |
PUT | 此方法用于將數(shù)據(jù)發(fā)送到服務(wù)器以創(chuàng)建或更新資源。PUT方法用上傳的內(nèi)容替換目標(biāo)資源中的所有當(dāng)前內(nèi)容。 |
DELETE | 此方法用于請(qǐng)求服務(wù)器刪除指定的資源。DELETE請(qǐng)求會(huì)導(dǎo)致服務(wù)器刪除URI指定的目標(biāo)資源的所有當(dāng)前內(nèi)容。 |
OPTIONS | 此方法用于獲取當(dāng)前URL支持的方法列表。OPTIONS請(qǐng)求返回服務(wù)器支持的方法列表,對(duì)于查看API端點(diǎn)的可用操作非常有用。 |
TRACE | 此方法用于回顯服務(wù)器收到的請(qǐng)求,主要用于測(cè)試或診斷網(wǎng)絡(luò)路徑上的問(wèn)題。 |
HTTP應(yīng)答報(bào)文
HTTP應(yīng)答報(bào)文與HTTP請(qǐng)求報(bào)文格式類似,區(qū)別在與請(qǐng)求行。
以百度的應(yīng)答報(bào)文為例
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Date: Thu, 18 Apr 2024 02:21:36 GMT
X-Ua-Compatible: IE=Edge,chrome=1
X-Xss-Protection: 1;mode=block
Transfer-Encoding: chunked
請(qǐng)求行中沒(méi)有請(qǐng)求方式以及URL,但是多了狀態(tài)碼
狀態(tài)碼
常用的狀態(tài)碼如下文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-858644.html
狀態(tài)碼 | 返回消息 | 狀態(tài)碼含義 |
---|---|---|
100 | Continue | 表示服務(wù)器已經(jīng)接收到一部分請(qǐng)求,客戶可以繼續(xù)發(fā)送 |
101 | Switching Protocols | 用于響應(yīng)客戶端的 Upgrade請(qǐng)求頭發(fā)送的,指明服務(wù)器即將切換的協(xié)議 |
102 | Processing | 表示服務(wù)器已經(jīng)接收到請(qǐng)求并且正在處理,但尚未完成處理 |
200 | OK | 請(qǐng)求成功并已正確處理返回 |
201 | Create | 請(qǐng)求成功,并因此創(chuàng)建了一個(gè)新的資源。這通常是在 POST 請(qǐng)求,或是某些 PUT 請(qǐng)求之后返回的響應(yīng) |
202 | OK | 表示請(qǐng)求已被接受,但處理尚未完成 |
204 | No Content | 表示請(qǐng)求成功處理,但沒(méi)有返回內(nèi)容 |
301 | Moved Permanently | 請(qǐng)求資源的 URL 永久移動(dòng)到了一個(gè)不同的URL,在響應(yīng)中給出了新的 URL |
302 | Found | 請(qǐng)求資源的 URL 臨時(shí)移動(dòng)到了一個(gè)不同的URL,在響應(yīng)中給出了新的 URL |
400 | Bad Request | 錯(cuò)誤請(qǐng)求,服務(wù)器無(wú)法或不會(huì)處理請(qǐng)求 |
401 | Unauthorized | 表示客戶端的請(qǐng)求沒(méi)有身份驗(yàn)證或者驗(yàn)證失敗 |
403 | Forbidden | 客戶端沒(méi)有訪問(wèn)內(nèi)容的權(quán)限 |
404 | Not Found | 服務(wù)器找不到請(qǐng)求的資源 |
415 | Unsupported Media Type | 服務(wù)器不支持請(qǐng)求數(shù)據(jù)的媒體格式 |
414 | URI Too Long | 客戶端請(qǐng)求的 URI 長(zhǎng)度超過(guò)服務(wù)器所接受的長(zhǎng)度 |
429 | Too Many Requests | 客戶端在給定的時(shí)間內(nèi)發(fā)送了太多請(qǐng)求 |
431 | Request Header Fields Too Large | 客戶端在給定的時(shí)間內(nèi)發(fā)送了太多請(qǐng)求 |
500 | Internal Server Error | 服務(wù)器內(nèi)部錯(cuò)誤,當(dāng)服務(wù)器在處理請(qǐng)求時(shí)遇到了意外錯(cuò)誤或異常情況,無(wú)法完成請(qǐng)求 |
502 | Bad Gateway | 表示代理服務(wù)器無(wú)法正確地轉(zhuǎn)發(fā)請(qǐng)求并獲得有效的響應(yīng) |
學(xué)習(xí)筆記,有問(wèn)題歡迎指出文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-858644.html
到了這里,關(guān)于TCP/IP協(xié)議—HTTP的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!