柚子快報邀請碼778899分享:網(wǎng)絡(luò)協(xié)議 HTTP協(xié)議詳解
HTTP協(xié)議:是W3C制定的一種超文本傳輸協(xié)議。(是一種通信協(xié)議:發(fā)送消息的模板提前被制定好。)就是服務(wù)器和瀏覽器互相發(fā)送消息的模板。
HTTP協(xié)議包括:
1、請求協(xié)議
瀏覽器 向 WEB服務(wù)器發(fā)送數(shù)據(jù)的時候,這個發(fā)送的數(shù)據(jù)需要遵循一套標(biāo)準(zhǔn),這套標(biāo)準(zhǔn)中規(guī)定了發(fā)送的數(shù)據(jù)具體格式。
2、響應(yīng)協(xié)議
WEB服務(wù)器 向 瀏覽器發(fā)送數(shù)據(jù)的時候,這個發(fā)送的數(shù)據(jù)需要遵循一套標(biāo)準(zhǔn),這套標(biāo)準(zhǔn)中規(guī)定了發(fā)送的數(shù)據(jù)具體格式。
HTTP的請求協(xié)議
請求行
第一部分:請求的方式method(有7種)
get(常用的)
post(常用的)
delete
put
head
options(預(yù)檢請求)
trace
第二部分:URI
什么是URI? 統(tǒng)一資源標(biāo)識符。代表網(wǎng)絡(luò)中某個資源的名字。但是通過URI是無法定位資源的。
什么是URL?統(tǒng)一資源定位符。代表網(wǎng)絡(luò)中某個資源的位置,同時,通過URL是可以定位到該資的。
第三部分:HTTP協(xié)議的版本號
請求頭
HTTP請求頭包含了HTTP請求的元數(shù)據(jù),用于告訴服務(wù)器如何處理請求和發(fā)送響應(yīng)。下面是一些常見的HTTP請求頭字段及其含義:
User-Agent:標(biāo)識客戶端瀏覽器、操作系統(tǒng)及版本號等信息。
Accept:表示客戶端可以接受的數(shù)據(jù)類型。例如:"text/html"、"application/xml"等。
Accept-Encoding:表示客戶端可以接受的數(shù)據(jù)壓縮格式。例如:"gzip"、"deflate"、"br"等。
Accept-Language:表示客戶端可以接受的語言類型。例如:"en-US"、"zh-CN"等。
Cache-Control:控制緩存的行為。例如:"no-cache"、"max-age=3600"等。
Connection:表示客戶端與服務(wù)器之間連接的類型。例如:"keep-alive"、"close"等。
Host:表示請求的服務(wù)器的域名或IP地址和端口號。
Referer:表示請求來源的URL地址。
Cookie:表示客戶端發(fā)送給服務(wù)器的Cookie信息。
Authorization:表示客戶端發(fā)送的身份驗(yàn)證憑證信息。
Content-Length:表示請求體的長度。
Content-Type:表示請求體的類型。例如:"application/x-www-form-urlencoded"、"application/json"等。
Content-Type
HTTP請求頭中的 Content-Type 字段用于指定請求體的媒體類型(media type),即請求體的數(shù)據(jù)格式。下面是一些常見的 Content-Type 值:
text/plain:純文本,沒有格式。
text/html:HTML 格式。
application/json:JSON 格式。
application/xml:XML 格式。
application/x-www-form-urlencoded:經(jīng)過 URL 編碼的表單數(shù)據(jù)。
multipart/form-data:用于上傳文件、圖片和二進(jìn)制數(shù)據(jù)的表單格式。
image/png:PNG 圖像格式。
image/jpeg:JPEG 圖像格式。
audio/mpeg:MPEG 音頻格式。
video/mp4:MPEG-4 視頻格式。
空白行
用來區(qū)分"請求頭"和"請求體"的
請求體
瀏覽器向服務(wù)器發(fā)送的具體數(shù)據(jù).
HTTP請求協(xié)議的具體報文:GET請求
GET /Servlet05/get?username=lucy&userpwd=123 HTTP/1.1 請求行
Host: localhost:8080 請求頭
Connection: keep-alive
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/Servlet05/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Idea-69292d60=aab66041-a5ec-4720-bd7d-906d53381ec2
空白行
請求體
HTTP請求協(xié)議的具體報文:POST請求
POST /Servlet05/post HTTP/1.1 請求行
Host: localhost:8080 請求頭
Connection: keep-alive
Content-Length: 27
Cache-Control: max-age=0
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
Origin: http://localhost:8080
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/Servlet05/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Idea-69292d60=aab66041-a5ec-4720-bd7d-906d53381ec2
空白行
username=jack&userpwd=11111 請求體
HTTP的響應(yīng)協(xié)議
狀態(tài)行
由三部分組成:
第一部分:協(xié)議版本號(HTTP/1.1)
第二部分:狀態(tài)碼(HTTP協(xié)議中規(guī)定的響應(yīng)狀態(tài)號。不同的響應(yīng)結(jié)果對應(yīng)不同的號碼。)
200 表示請求響應(yīng)成功,正常結(jié)束。
404表示訪問的資源不存在,通常是因?yàn)橐词悄懵窂綄戝e了,要么是路徑寫對了,但是服務(wù)器中對應(yīng)的資源并沒有啟動成功。總之404錯誤是前端錯誤。
405表示前端發(fā)送的請求方式與后端請求的處理方式不一致時發(fā)生:
比如:前端是POST請求,后端的處理方式按照get方式進(jìn)行處理時,發(fā)生405
比如:前端是GET請求,后端的處理方式按照post方式進(jìn)行處理時,發(fā)生405
500表示服務(wù)器端的程序出現(xiàn)了異常。一般會認(rèn)為是服務(wù)器端的錯誤導(dǎo)致的。
以4開始的,一般是瀏覽器端的錯誤導(dǎo)致的。
以5開始的,一般是服務(wù)器端的錯誤導(dǎo)致的。
第三部分:狀態(tài)的描述信息
ok 表示正常成功結(jié)束。
not found 表示資源找不到。
響應(yīng)頭
Content-Type
響應(yīng)的內(nèi)容類型,告訴瀏覽器這個響應(yīng)的內(nèi)容類型,瀏覽器就知道怎么處理。
Content-Type:text/html;charset=UTF-8?
告訴客戶端,資源文件的類型,還有字符編碼,客戶端就會通過utf-8對資源進(jìn)行解碼,然后對資源進(jìn)行html解析。通常我們會看到有些網(wǎng)站是亂碼的,往往就是服務(wù)器端沒有返回正確的編碼。
// 設(shè)置響應(yīng)頭,告訴瀏覽器這是一個字節(jié)流,瀏覽器處理字節(jié)流的默認(rèn)方式就是下載 response.setContentType("application/octet-stream");
Content-Disposition
// Content-Disposition 是 HTTP 協(xié)議中的一個頭部字段,用于指示文件的名稱和下載方式。
// inline 表示文件應(yīng)該在瀏覽器中直接顯示,而不是下載。
//attachment 表示文件應(yīng)該下載到本地。
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
- 響應(yīng)的內(nèi)容長度
- 響應(yīng)的時間
- ....
空白行
區(qū)分"響應(yīng)頭"和"響應(yīng)體"
響應(yīng)體
響應(yīng)體就是服務(wù)器響應(yīng)給瀏覽器的正文,這些內(nèi)容是一個長的字符串,這個字符串被瀏覽器解析渲染,解釋并執(zhí)行,最終展示出效果。
HTTP響應(yīng)報文
HTTP/1.1 200 ok 狀態(tài)行
Content-Type: text/html;charset=UTF-8 響應(yīng)頭
Content-Length: 160
Date: Thu, 24 Feb 2022 00:58:40 GMT
Keep-Alive: timeout=20
Connection: keep-alive
空白行
響應(yīng)體
from get servlet
柚子快報邀請碼778899分享:網(wǎng)絡(luò)協(xié)議 HTTP協(xié)議詳解
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。