旅游網(wǎng)站制作百度云網(wǎng)站搜索排名優(yōu)化軟件
HTTP協(xié)議
什么是協(xié)議
協(xié)議實(shí)際上是某些人或組織提前制定好的一套規(guī)范,大家只要都按照這個(gè)規(guī)范來(lái)就可以做到溝通無(wú)障礙
HTTP協(xié)議是W3C(萬(wàn)維網(wǎng)聯(lián)盟組織)
制定的一種超文本傳輸通信協(xié)議(發(fā)送消息的模板和數(shù)據(jù)的格式),除了傳送字符串,還有聲音、視頻、圖片等流媒體等超文本信息
Http協(xié)議游走在瀏覽器和服務(wù)器之間,瀏覽器和服務(wù)器在請(qǐng)求 (request) 或響應(yīng) (response)
數(shù)據(jù)的期間都要遵循HTTP協(xié)議,這樣二者才能解耦合即不互相依賴
HTTP的請(qǐng)求協(xié)議及組成
使用瀏覽器,右擊-->檢查或直接按F12
,找到network
網(wǎng)絡(luò)面板,通過(guò)這個(gè)面板查看瀏覽器發(fā)起的請(qǐng)求,ALL表示所有請(qǐng)求,XHR表示Ajax請(qǐng)求
HTTP請(qǐng)求協(xié)議GET請(qǐng)求
的請(qǐng)求報(bào)文
GET /servlet05/getServlet?username=lucy&userpwd=1111 HTTP/1.1 #請(qǐng)求行
Host: localhost:8080 #請(qǐng)求頭
Connection: keep-alive
sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"
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/95.0.4638.54 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
# 具體的來(lái)源頁(yè)面,如執(zhí)行操作后回到當(dāng)前頁(yè)面
Referer: http://localhost:8080/servlet05/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9#空白行#請(qǐng)求體(在Query String parameters里面)
HTTP請(qǐng)求協(xié)議的POST請(qǐng)求
的具體報(bào)文
POST /servlet05/postServlet HTTP/1.1 #請(qǐng)求行
Host: localhost:8080 #請(qǐng)求頭
Connection: keep-alive
Content-Length: 25
Cache-Control: max-age=0
sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
Origin: http://localhost:8080
# 請(qǐng)求參數(shù)的內(nèi)容類型,application/x-www-form-urlencoded表示表單傳參
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/95.0.4638.54 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#空白行
username=lisi&userpwd=123 #請(qǐng)求體(在Form Date選項(xiàng)里面)
請(qǐng)求行如POST /servlet05/postServlet HTTP/1.1
包括請(qǐng)求方式
,URI
,HTTP協(xié)議版本號(hào)
三部分
組成 | 描述 |
---|---|
請(qǐng)求方式 | GET, POST, DELETE , PUT , HEAD , OPTIONS , TRACE |
URI | URI是統(tǒng)一資源標(biāo)識(shí)符,代表網(wǎng)絡(luò)中某個(gè)資源的名字,通過(guò)URI是無(wú)法定位資源的 URL是統(tǒng)一資源定位符,代表網(wǎng)絡(luò)中某個(gè)具體的資源,通過(guò)URL是可以定位到資源,如http://localhost:8080/servlet05/index.html |
HTTP協(xié)議版本號(hào) | 描述當(dāng)前HTTP協(xié)議的版本 |
請(qǐng)求頭包含很多屬性,如請(qǐng)求的主機(jī)和端口(Host) ,瀏覽器信息,cookie等信息
空白行: 空白行是用來(lái)區(qū)分請(qǐng)求頭
和請(qǐng)求體
瀏覽器向服務(wù)器發(fā)送的具體數(shù)據(jù),可以是鍵值對(duì)格式或者JSON格式的數(shù)據(jù)**
請(qǐng)求體: 瀏覽器發(fā)送到服務(wù)器的請(qǐng)求參數(shù)有name=value&...(鍵值對(duì))
和{"key":value,...}(json對(duì)象)
兩種格式
URL請(qǐng)求
會(huì)將請(qǐng)求參數(shù)以鍵值對(duì)的格式拼接到請(qǐng)求地址后面,form表單的GET和POST請(qǐng)求
會(huì)將請(qǐng)求參數(shù)以鍵值對(duì)的格式存儲(chǔ)到請(qǐng)求報(bào)文的請(qǐng)求體中- 發(fā)起Ajax請(qǐng)求時(shí),可以將請(qǐng)求參數(shù)以Json的格式存儲(chǔ)到請(qǐng)求報(bào)文的請(qǐng)求體中
HTTP響應(yīng)協(xié)議及組成
HTTP響應(yīng)協(xié)議的具體報(bào)文
HTTP/1.1 200 ok(狀態(tài)的描述信息) 狀態(tài)行
Server: nginx
Date: Mon, 09 Oct 2023 00:37:57 GMT
#Content-Type: application/json 響應(yīng)頭
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Keep-Alive: timeout=20
Connection: keep-alive
Set-Cookie: JSESSIONID=6E8E893C9662C7A90DDF97FF61856F99; Path=/; HttpOnly空白行<!doctype html> 響應(yīng)體(在Response選項(xiàng)里面)
<html><head><title>from get servlet</title></head><body><h1>from get servlet</h1></body>
</html>
狀態(tài)行如HTTP/1.1 200 ok
由協(xié)議版本號(hào),狀態(tài)碼,狀態(tài)的描述信息三部分組成
- 狀態(tài)碼: 不同的響應(yīng)結(jié)果對(duì)應(yīng)不同的響應(yīng)狀態(tài)碼,以4開(kāi)始的一般是瀏覽器端的錯(cuò)誤導(dǎo)致的 , 以5開(kāi)始的一般是服務(wù)器端的錯(cuò)誤導(dǎo)致的
- 狀態(tài)描述信息: ok 表示正常成功結(jié)束,not found表示資源找不到
響應(yīng)頭包含很多屬性,如響應(yīng)體的內(nèi)容類型,響應(yīng)體的內(nèi)容長(zhǎng)度,響應(yīng)的時(shí)間…
空白行: 用來(lái)分隔響應(yīng)頭和響應(yīng)體的
響應(yīng)體: 響應(yīng)體就是服務(wù)器響應(yīng)到瀏覽器的具體數(shù)據(jù),響應(yīng)內(nèi)容可以是JSON格式或HTMl等字符串,這些字符串被瀏覽器渲染解釋并執(zhí)行,最終展示出效果
HTTP狀態(tài)信息
1xx: 信息
消息: | 描述: |
---|---|
100 Continue | 服務(wù)器僅接收到部分請(qǐng)求,但是一旦服務(wù)器并沒(méi)有拒絕該請(qǐng)求,客戶端應(yīng)該繼續(xù)發(fā)送其余的請(qǐng)求 |
101 Switching Protocols | 服務(wù)器轉(zhuǎn)換協(xié)議:服務(wù)器將遵從客戶的請(qǐng)求轉(zhuǎn)換到另外一種協(xié)議 |
2xx: 成功
消息: | 描述: |
---|---|
200 OK | 請(qǐng)求響應(yīng)成功正常結(jié)束,其后是對(duì)GET和POST請(qǐng)求的應(yīng)答文檔 |
201 Created | 請(qǐng)求被創(chuàng)建完成,同時(shí)新的資源被創(chuàng)建 |
202 Accepted | 供處理的請(qǐng)求已被接受,但是處理未完成 |
203 Non-authoritative Information | 文檔已經(jīng)正常地返回,但一些應(yīng)答頭可能不正確,因?yàn)槭褂玫氖俏臋n的拷貝 |
204 No Content | 沒(méi)有新文檔,瀏覽器應(yīng)該繼續(xù)顯示原來(lái)的文檔,如果用戶定期地刷新頁(yè)面,而Servlet可以確定用戶文檔足夠新,這個(gè)狀態(tài)代碼是很有用的 |
205 Reset Content | 沒(méi)有新文檔,但瀏覽器應(yīng)該重置它所顯示的內(nèi)容,用來(lái)強(qiáng)制瀏覽器清除表單輸入內(nèi)容 |
206 Partial Content | 客戶發(fā)送了一個(gè)帶有Range頭的GET請(qǐng)求,服務(wù)器完成了它 |
3xx: 重定向
消息: | 描述: |
---|---|
300 Multiple Choices | 多重選擇,鏈接列表,用戶可以選擇某鏈接到達(dá)目的地,最多允許五個(gè)地址 |
301 Moved Permanently | 所請(qǐng)求的頁(yè)面已經(jīng)轉(zhuǎn)移至新的url |
302 Found | 所請(qǐng)求的頁(yè)面已經(jīng)臨時(shí)轉(zhuǎn)移至新的url |
303 See Other | 所請(qǐng)求的頁(yè)面可在別的url下被找到 |
304 Not Modified | 未按預(yù)期修改文檔。客戶端有緩沖的文檔并發(fā)出了一個(gè)條件性的請(qǐng)求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務(wù)器告訴客戶,原來(lái)緩沖的文檔還可以繼續(xù)使用 |
305 Use Proxy | 客戶請(qǐng)求的文檔應(yīng)該通過(guò)Location頭所指明的代理服務(wù)器提取 |
306 Unused | 此代碼被用于前一版本。目前已不再使用,但是代碼依然被保留 |
307 Temporary Redirect | 被請(qǐng)求的頁(yè)面已經(jīng)臨時(shí)移至新的url |
4xx: 客戶端錯(cuò)誤
消息: | 描述: |
---|---|
400 Bad Request | 服務(wù)器未能理解請(qǐng)求 |
401 Unauthorized | 被請(qǐng)求的頁(yè)面需要用戶名和密碼 |
402 Payment Required | 此代碼尚無(wú)法使用 |
403 Forbidden | 對(duì)被請(qǐng)求頁(yè)面的訪問(wèn)被禁止 |
404 Not Found | 表示訪問(wèn)的資源不存在,服務(wù)器無(wú)法找到被請(qǐng)求的頁(yè)面 通常是因?yàn)槁窂綄戝e(cuò)了或服務(wù)器中對(duì)應(yīng)的資源并沒(méi)有啟動(dòng)成功 |
405 Method Not Allowed | 請(qǐng)求中指定的方法不被允許,前端發(fā)送的請(qǐng)求方式與后端請(qǐng)求的處理方式不一致時(shí)發(fā)生的錯(cuò)誤 |
406 Not Acceptable | 服務(wù)器生成的響應(yīng)無(wú)法被客戶端所接受 |
407 Proxy Authentication Required | 用戶必須首先使用代理服務(wù)器進(jìn)行驗(yàn)證,這樣請(qǐng)求才會(huì)被處理 |
408 Request Timeout | 請(qǐng)求超出了服務(wù)器的等待時(shí)間 |
409 Conflict | 由于沖突,請(qǐng)求無(wú)法被完成 |
410 Gone | 被請(qǐng)求的頁(yè)面不可用 |
411 Length Required | “Content-Length” 未被定義。如果無(wú)此內(nèi)容,服務(wù)器不會(huì)接受請(qǐng)求 |
412 Precondition Failed | 請(qǐng)求中的前提條件被服務(wù)器評(píng)估為失敗 |
413 Request Entity Too Large | 由于所請(qǐng)求的實(shí)體的太大,服務(wù)器不會(huì)接受請(qǐng)求 |
414 Request-url Too Long | 由于url太長(zhǎng),服務(wù)器不會(huì)接受請(qǐng)求。當(dāng)post請(qǐng)求被轉(zhuǎn)換為帶有很長(zhǎng)的查詢信息的get請(qǐng)求時(shí),就會(huì)發(fā)生這種情況 |
415 Unsupported Media Type | 由于媒介類型不被支持,服務(wù)器不會(huì)接受請(qǐng)求 |
416 | 服務(wù)器不能滿足客戶在請(qǐng)求中指定的Range頭 |
417 Expectation Failed |
5xx: 服務(wù)器錯(cuò)誤
消息: | 描述: |
---|---|
500 Internal Server Error | 請(qǐng)求未完成,服務(wù)器端的程序出現(xiàn)了異常,一般會(huì)認(rèn)為是服務(wù)器端的錯(cuò)誤導(dǎo)致的 |
501 Not Implemented | 請(qǐng)求未完成,服務(wù)器不支持所請(qǐng)求的功能 |
502 Bad Gateway | 請(qǐng)求未完成,服務(wù)器從上游服務(wù)器收到一個(gè)無(wú)效的響應(yīng) |
503 Service Unavailable | 請(qǐng)求未完成,服務(wù)器臨時(shí)過(guò)載或當(dāng)機(jī) |
504 Gateway Timeout | 網(wǎng)關(guān)超時(shí) |
505 HTTP Version Not Supported | 服務(wù)器不支持請(qǐng)求中指明的HTTP協(xié)議版本 |