請求報(bào)文和響應(yīng)報(bào)文:
請求報(bào)文:
客戶端向服務(wù)器發(fā)送的請求信息,就叫做請求報(bào)文。
客戶端發(fā)送一個(gè) HTTP 請求到服務(wù)器,請求信息包含四部分:請求行、請求頭、空行、請求體。
- 請求行:包含三部分,分別是請求方法、請求資源的路徑、協(xié)議版本。
- 請求頭:頭信息,告訴服務(wù)器一些信息,在客戶端和服務(wù)器處理時(shí)起至關(guān)重要作用的信息幾乎都在這邊。
- 空行:請求頭和請求體之間有一個(gè)空行來做區(qū)分,即使沒有請求體,空行也不能少。
- 請求體:請求要發(fā)送的內(nèi)容,不一定有。
GET 請求方法沒有請求體,數(shù)據(jù)通過請求頭攜帶。
POST 請求方法有請求體,數(shù)據(jù)通過請求體攜帶。
GET 方式示例:
// 請求行:請求方法是 GET,請求資源的路徑是 /0606/01.php,攜帶的參數(shù)是 username=Lee&age=28 ,所用的協(xié)議是 HTTP/1.1
GET /0606/01.php?username=Lee&age=28 HTTP/1.1
// 請求頭:是一行一行的 key-value
Host: localhost
// 空行
POST 方式示例:
// 請求行:請求方法是 POST,請求資源的路徑是 /0606/02.php ,所用的協(xié)議是 HTTP/1.1
POST /0606/02.php HTTP1.1
// 請求頭:Content-type 表明請求體的類型,Content-length 表明請求體的長度
Host: localhost
Content-type: application/x-www-form-urlencoded
Content-length: 19
// 空行
// 請求體
username=Lee&age=28
響應(yīng)報(bào)文:
服務(wù)器返回的響應(yīng)信息,就叫做響應(yīng)報(bào)文。
一般情況下,服務(wù)器接收并處理客戶端發(fā)過來的請求后會(huì)返回一個(gè) HTTP 的響應(yīng)消息。響應(yīng)信息包含四部分:響應(yīng)行、響應(yīng)頭、空行、響應(yīng)體。
- 響應(yīng)行:包含三部分,分別是所用的協(xié)議版本、狀態(tài)碼、狀態(tài)文字。
- 響應(yīng)頭:頭信息,告訴客戶端一些信息,在客戶端和服務(wù)器處理時(shí)起至關(guān)重要作用的信息幾乎都在這邊。
- 空行:響應(yīng)頭和響應(yīng)體之間有一個(gè)空行來做區(qū)分,即使沒有請求體,空行也不能少。
- 響應(yīng)體:響應(yīng)要返回的內(nèi)容,不一定有。
// 響應(yīng)行:所用的協(xié)議是HTTP/1.1,狀態(tài)碼是200,狀態(tài)文字是 OK
HTTP/1.1 200 OK
// 響應(yīng)頭
Date:Thu, 06 Jun 2021 12:39:02 GMT
Server: Apache/2.2.21 <Win32> PHP/5.38
X-Powered-By: PHP/5.38
Content-Length: 5
Content-Type: text/html
// 空行
// 響應(yīng)體
hello
請求方法:
請求方法用來定義對于資源采取什么樣的操作,有各自的語義。分別有:GET、POST、PUT、DELETE、HEAD、CONNECT、OPTIONS、TRACE、PATCH。
這些請求方法雖然有各自的語義,但并不是強(qiáng)制性的。
HTTP 里雖然規(guī)定了這些請求方法,但 Web 服務(wù)器未必全部支持。
- GET:請求服務(wù)器中的指定資源。
- HEAD:和 GET 基本一致,但是沒有響應(yīng)體。這一方法可以在不傳輸整個(gè)響應(yīng)體的情況下,獲取響應(yīng)頭中的元信息。
例如:只想知道某個(gè)資源是否還存在,而不需要知道具體是什么內(nèi)容,就可以使用 HEAD,因?yàn)榇藭r(shí)只需要狀態(tài)碼 200 就可以知道資源仍然存在了。
- POST:將數(shù)據(jù)發(fā)送到服務(wù)器以創(chuàng)建資源。
- PUT:將數(shù)據(jù)發(fā)送到服務(wù)器以替換整個(gè)資源。
- PATCH:將數(shù)據(jù)發(fā)送到服務(wù)器以更新部分資源。
- DELETE:請求服務(wù)器刪除指定資源。
- TRACE:回顯服務(wù)器收到的請求,主要用于測試或診斷。
例如:使用了代理訪問
news.163.com
,如果想要知道代理有沒有偷偷修改我們的 HTTP 請求,就可以使用 TRACE 來測試,news.163.com
的服務(wù)器就會(huì)把最后收到的請求返回回來。 - OPTIONS:返回服務(wù)器針對指定資源所支持的 HTTP 請求方法。
- CONNECT:建立一個(gè)到目標(biāo)資源的服務(wù)器的隧道,通常用在代理服務(wù)器上,網(wǎng)頁開發(fā)很少用到 。
GET 和 POST 的區(qū)別:
-
語義不同:GET 請求用來獲取數(shù)據(jù);POST 請求用來創(chuàng)建數(shù)據(jù)。
-
發(fā)送數(shù)據(jù)不同:GET 請求在請求頭中攜帶數(shù)據(jù),請求的數(shù)據(jù)會(huì)附在 URL 地址中;POST 請求一般是在請求體中攜帶數(shù)據(jù)。
GET 請求的數(shù)據(jù)會(huì)附在 URL 地址中,以
?
分割 URL 和傳輸數(shù)據(jù),多個(gè)參數(shù)用&
連接。如果數(shù)據(jù)是英文字母/數(shù)字,原樣發(fā)送,如果是空格,轉(zhuǎn)換為+
,如果是中文/其他字符,則直接把字符串用 BASE64 加密。
POST 請求也可以在請求頭中通過 URL 攜帶數(shù)據(jù),這不是 GET 請求專屬的特性。 -
傳輸數(shù)據(jù)的大?。篏ET 請求能攜帶的數(shù)據(jù)量和 URL 地址的長度有關(guān)系,一般最多就幾 K;POST 請求能攜帶的數(shù)據(jù)量理論上是無限的。但實(shí)際上還是有大小限制,但是會(huì)比 GET 請求大得多。
-
安全性不同:POST 請求的安全性要比 GET 請求的安全性高一點(diǎn)。GET 請求的數(shù)據(jù)會(huì)在地址欄中顯示出來;而 POST 請求的數(shù)據(jù),不會(huì)在地址欄顯示出來。
比如:通過 GET 提交數(shù)據(jù),用戶名和密碼將明文出現(xiàn)在 URL 上,那么(1)登錄頁面有可能被瀏覽器緩存;(2)其他人查看瀏覽器的歷史紀(jì)錄都可以看到這些信息。
但實(shí)際上 POST 請求也不安全,打開瀏覽器的控制臺(tái)也可以直接看到提交的信息。
HTTP 狀態(tài)碼:
狀態(tài)碼是用來表示服務(wù)器的響應(yīng)情況的。 HTTP 狀態(tài)碼由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制數(shù)字定義了狀態(tài)碼的類型。
狀態(tài)說明是用來描述狀態(tài)碼的。
HTTP 狀態(tài)碼分類:
-
1**
:消息,服務(wù)器已收到請求,需要繼續(xù)處理。 -
2**
:成功,服務(wù)器成功收到并處理請求。 -
3**
:重定向,服務(wù)器需要進(jìn)一步的操作以完成請求。 -
4**
:客戶端錯(cuò)誤,請求包含語法錯(cuò)誤或無法完成請求。 -
5**
:服務(wù)器錯(cuò)誤,服務(wù)器在處理請求的過程中發(fā)生了錯(cuò)誤。
常見的 HTTP 狀態(tài)碼:
-
200
:客戶端請求成功。 -
201
:POST 請求,新的資源創(chuàng)建成功。 -
301
:永久移動(dòng),請求的資源已被永久的移動(dòng)到新 URL。響應(yīng)中會(huì)返回新的 URL,瀏覽器拿到新的 URL 會(huì)自動(dòng)跳轉(zhuǎn)。
-
302
:臨時(shí)移動(dòng),請求的資源已被臨時(shí)的移動(dòng)到新 URL。例如:通過 POST 方式提交表單數(shù)據(jù)到 05.php,但是 05.php 重定向了到 06.php,通過 301 和 302 會(huì)發(fā)生丟失數(shù)據(jù)的情況。下圖可以看到,05.php 是 POST 請求,但是 06.php 變成了 GET 請求。
可以通過 307 狀態(tài)碼來解決。下圖可以看到,05.php 和 06.php 都是 POST 請求。 -
304
:資源未被修改。瀏覽器通過此資源的標(biāo)識符告訴服務(wù)器它有這個(gè)資源,且告訴服務(wù)器最后的修改時(shí)間,服務(wù)器對比資源的標(biāo)識符和最后的修改時(shí)間,如果一致,說明沒有更改過資源,就會(huì)返回 304。瀏覽器就可以從緩存中獲取資源,減輕了服務(wù)器的傳輸壓力。
-
307
:重定向中保持原有的請求數(shù)據(jù)。 -
400
:客戶端請求的語法錯(cuò)誤,服務(wù)器無法理解。 -
401
:未授權(quán)的錯(cuò)誤,請求必須攜帶用戶的身份信息。 -
403
:沒有訪問權(quán)限的錯(cuò)誤,服務(wù)器理解客戶端的請求,但是拒絕執(zhí)行。 -
404
:無法找到資源。 -
500
:服務(wù)器內(nèi)部錯(cuò)誤,無法完成請求。文章來源:http://www.zghlxwxcb.cn/news/detail-426254.html -
503
:由于超載或系統(tǒng)維護(hù),服務(wù)器暫時(shí)無法處理客戶端的請求。文章來源地址http://www.zghlxwxcb.cn/news/detail-426254.html
常見的 HTTP 狀態(tài)說明:
- OK:客戶端請求成功。
- Created:POST 請求,新的資源創(chuàng)建成功。
- Moved Permanently:永久移動(dòng),請求的資源已被永久的移動(dòng)到新 URL。
- Bad Request:客戶端請求的語法錯(cuò)誤,服務(wù)器無法理解。
- Unauthorized:未授權(quán)的錯(cuò)誤,請求必須攜帶用戶的身份信息。
- Forbidden:沒有訪問權(quán)限的錯(cuò)誤,服務(wù)器理解客戶端的請求,但是拒絕執(zhí)行。
- Not Found:無法找到資源。
- Internal Server Error:服務(wù)器內(nèi)部錯(cuò)誤,無法完成請求。
- Service Unavailable:由于超載或系統(tǒng)維護(hù),服務(wù)器暫時(shí)無法處理客戶端的請求。
到了這里,關(guān)于《二》HTTP 請求報(bào)文和響應(yīng)報(bào)文、請求方法、狀態(tài)碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!