T+技術學習視頻資源,500+技術電子書,大量高效工具及網站,私信回復【資源】即可免費獲取
HTTP 報文是在應用程序之間發(fā)送的數據塊,這些數據塊將通過以文本形式的元信息開頭,用于 HTTP 協議交互。請求端(客戶端)的 HTTP 報文叫做請求報文,響應端(服務器端)的叫做響應報文。 HTTP 報文本身是由多行(用 CR+LF 作換行符)數據構成的字符串文本。
HTTP 請求報文由請求行、請求頭、空行和請求包體(body)組成。如下圖所示:
真實示例:
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "macOS"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 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: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: BIDUPSID=8B0207CE0B6364E5934651E84F17999B; PSTM=1619707475;
主要描述了客戶端想要如何操作服務端的資源;請求行由三部分構成:
這三個部分通常使用空格(space)來分隔,最后要用 CRLF 換行表示結束。
GET / HTTP/1.1
這個請求行,結合之前的描述,意思就是“服務端妹子你好,我是客戶端蛋蛋,現在我想獲取網站根目錄的默認信息,我這邊用的協議版本是 1.1,麻煩你也要用這個版本回復我哦”
HTTP的報文頭,報文頭包含若干個屬性,格式為“屬性名:屬性值”,服務端據此獲取客戶端的信息。與緩存相關的規(guī)則信息,均包含在header中,請求頭可大致分為四種類型:通用首部字段、請求首部字段、響應首部字段、實體首部字段。這里先簡單羅列,稍后做具體解釋。
請求體就是 HTTP 要傳輸的內容,HTTP 可以承載很多類型的數字數據:圖片、音頻、視頻、HTML 文檔等。
HTTP 響應報文由狀態(tài)行、響應頭部、空行和響應包體(body)組成。如下圖所示:
以請求 www.baidu.com為例:
HTTP/1.1 200 OK
Bdpagetype: 1
Bdqid: 0xfb0d743100040ad2
Cache-Control: private
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Fri, 24 Dec 2021 08:20:44 GMT
Expires: Fri, 24 Dec 2021 08:20:44 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=17; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=35635_34439_35104_35628_35488_35436_35456_34584_35491_35584_35586_34873_35317_26350_35610_35562; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1640334044050133761018090243032019634898
X-Frame-Options: sameorigin
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
狀態(tài)行包含了 協議版本、狀態(tài)碼以及狀態(tài)描述。
和請求報文的請求頭類似,響應頭也由鍵值對組成,每行一對,鍵和值用英文冒號 : 分隔。響應頭域允許服務器傳遞不能放在狀態(tài)行的附加信息,這些域主要描述服務器的信息和Request-URI進一步的信息
服務器返回給瀏覽器的響應信息,響應數據的格式是根據服務器來的,常見的響應數據格式有:text/html、application/json等。
常見的響應格式:
在 HTTP 的請求頭和響應頭中都是由首部字段來表示的,首部內容可以為客戶端和服務器分別處理請求和響應提供所需要的信息。
首部字段可以分為通用首部字段、請求首部字段、響應首部字段、實體首部字段。
通用首部字段是指請求報文和響應報文都會使用到的首部字段。
先來看下都有哪些字段:
通過指定 Cache-Control 的指令,就能操作緩存的工作機制。
一般在客戶端和服務端之間還存在一個緩存服務器,如果請求的資源在緩存服務器中有,就不會再請求源服務器,提高了請求響應的效率。
指令的參數可以多選,通過“,”分隔。
Cache-Control: private, max-age=0, no-cache
public 指令
Cache-Control: public
當使用 public 指令時,明確表明其他用戶也可以利用緩存。
private 指令
Cache-Control: private
當指定 private 指令后,響應只以特定的用戶作為對象,這與 public 指令的行為相反。
緩存服務器會對該特定用戶提供資源緩存的服務,對于其他用戶發(fā)送過來的請求,代理服務器則不會返回緩存。
no-cache 指令
Cache-Control: no-cache
使用 no-cache 指令可以防止從緩存中拿過期的數據。
在請求中如果包含該指令,則客戶端將不會接收緩存過的響應,中間的緩存服務器會把請求轉發(fā)給源服務器。
如果響應中包含該指令,緩存服務器會向源服務器進行資源有效期的確認,如果是過期的資源則不緩存。
no-store 指令
Cache-Control: no-store
該指令規(guī)定緩存不能在本地存儲請求或響應的任一部分。這里我們要和上面那個 no-cache 指令要區(qū)分開,no-store才是真正不進行緩存,no-cache 只是不對過期的資源進行緩存。
Connection 有兩個作用:控制不再轉發(fā)給代理的首部字段、管理持久連接。
Connection: close
當服務器端想明確斷開連接時,則指定 Connection 首部字段的值為 Close。
首部字段 Date 表明創(chuàng)建 HTTP 報文的日期和時間。
首部字段 Trailer 會事先說明在報文主體后記錄了哪些首部字段。該首部字段可應用在 HTTP/1.1 版本分塊傳輸編碼時。
該字段規(guī)定了傳輸報文主體時采用的編碼方式。 HTTP/1.1 的傳輸編碼方式僅對分塊傳輸編碼有效。
請求首部字段是從客戶端往服務器端發(fā)送請求報文中所使用的字段,用于補充請求的附加信息、客戶端信息、對響應內容相關的優(yōu)先級等內容。
常用字段具體說明
Accept: text/html,application/xhtml+xml,application/xml;q=0.3
該字段可以通知服務器 客戶端能夠接收處理的媒體類型及優(yōu)先級。
比如,如果瀏覽器不支持 PNG 圖片的顯示,那 Accept 就不指定 image/png ,而指定可處理的 image/gif 和 image/jpeg 等圖片類型。 若想要給顯示的媒體類型增加優(yōu)先級,則使用 q=來額外表示權重值。用分號(;)進行分隔。權重值 q 的范圍是 0~1(可精確到小數點 后 3 位),且 1 為最大值。不指定權重 q 值時,默認權重為 q=1.0。
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
通知服務器 客戶端支持的字符集及字符集的相對優(yōu)先順序。
Accept-Encoding: gzip, deflate
首部字段用來告知服務器 客戶端支持的內容編碼及內容編碼的優(yōu)先級順序。可一次性指定多種內容編碼。
Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3
用來告知服務器 客戶端能夠處理的自然 語言集(指中文或英文等),以及自然語言集的相對優(yōu)先級。可一次 指定多種自然語言集。
Authorization: Basic dWVub3NlbjpwYXNzd29yZA==
首部字段 Authorization 是用來告知服務器,客戶端的認證信息(證書值)。
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0)
首部字段 User-Agent 會將創(chuàng)建請求的瀏覽器和用戶代理名稱等信息傳 達給服務器。
由網絡爬蟲發(fā)起請求時,有可能會在字段內添加爬蟲作者的電子郵件地址。此外,如果請求經過代理,那么中間也很可能被添加上代理服務器的名稱。
響應首部字段是由服務器端向客戶端返回響應報文中所使用的字段,用于補充響應的附加信息、服務器信息,以及對客戶端的附加要求等信息。
Accept-Ranges: bytes 當不能處理范圍請求時,Accept-Ranges: none
用來告知客戶端服務器是否能處理范圍請 求,以指定獲取服務器端某個部分的資源。
Age: 600
Age 能告知客戶端,源服務器在多久前創(chuàng)建了響應。字段值的單位為秒。
Location: http://www.usagidesign.jp/sample.html
該字段可以將響應接收方引導至某個與請求 URI 位置 不同的資源。
基本上,該字段會配合 3xx :Redirection 的響應,提供重定向的 URI。
Retry-After: 120
告知客戶端應該在多久之后再次發(fā)送請求。主要 配合狀態(tài)碼 503 Service Unavailable 響應,或 3xx Redirect 響應一起使 用。
Server: Apache/2.2.17 (Unix)
告知客戶端當前服務器上安裝的 HTTP 服務器應用程序的信息。
實體首部字段是包含在請求報文和響應報文中的實體部分所使用的首部,用于補充內容的更新時間等與實體相關的信息。
Allow: GET, HEAD
用于通知客戶端能夠支持 Request-URI 指定資源的所有 HTTP 方法。
Content-Encoding: gzip
會告知客戶端服務器對實體的主體部分選用的內容編碼方式。
Content-Language: zh-CN
首部字段 Content-Language 會告知客戶端,實體主體使用的自然語言。
Content-Length: 15000
表明了實體主體部分的大小(單位是字 節(jié))。
Content-Type: text/html; charset=UTF-8
說明了實體主體內對象的媒體類型。
網絡安全在我身邊##職場面試#
經過這一段時間的學習,我們已經學習了HTTP的基礎知識。今天,小唐將會帶領大家正式的開始學習有關HTTP的知識。
在之前的文章,小唐告訴了大家HTTP通信包括HTTP請求和HTTP響應,并且也告訴了大家兩臺主機在進行HTTP通信的時候,通信的內容可以通過HTTP請求報文和HTTP響應報文來分析。
在接下來的一段時間,我們來聊聊HTTP請求。
在HTTP請求中,包含了客戶端要對服務器所請求的內容和請求的信息,不管是內容還是信息,都是我們HTTP請求的基礎。嚴格意義上來講HTTP請求報文的每一個部分都有著其特定的含義。
HTTP請求報文由請求頭、請求首部和請求實體三個主要部分組成,如下圖:
HTTP請求報文組成
什么是請求頭?
請求頭是HTTP頭的一種,可以在HTTP請求中使用。用來對HTTP的請求做一個詳細的描述,并且要確保這樣的HTTP請求能夠讓服務端返回正確的響應。簡單的講,請求頭就像是某一篇議論文的第一段,起著概括性的描述的作用。
什么是請求首部?
請求首部是為了確保對HTTP請求有著更加詳細的描述。用于告訴服務器是誰或什么在發(fā)送請求、請求的來源在哪里等信息。因此服務器可以根據請求首部給出的客戶端信息來給客戶端提供更好的響應。我們可以這樣來理解,如果我們的HTTP請求頭作為一個大綱性的指導,那么,HTTP請求首部就是對這個大綱更進一步的描述。當規(guī)定了指導性的大綱后,也作出了具體的規(guī)劃。接下來我們就需要根據大綱和規(guī)范的指導,開始把請求數據正式的發(fā)送給服務器了,這就是請求實體的作用。
什么是請求實體?
簡而言之,請求實體就是我們要傳輸的數據了。因為,請求頭規(guī)定了大體的方向,請求首部告訴了我們客戶端要把請求發(fā)出去具體要怎么做,還少了一部分請求需要把什么內容發(fā)出去,而這一個缺少的部分就是通過請求實體來實現的。
簡單的一句話理解就是請求頭規(guī)定了方向,請求首部落實了細節(jié),請求實體負責具體的實施。這三者之間的關系十分密切也是缺一不可的。
隨著互聯網的發(fā)展,人們覺得對于HTTP報文的請求頭、請求首部和請求實體的定義太過于抽象。因此,又把HTTP請求報文的這三部分內容做了一個更加詳細的劃分,充分利用了分層的“分而治之”的思想。
人們把HTTP報文的請求頭劃分為了請求方法、請求URI和協議版本三個部分;把請求首部又劃分出了許多有意義的字段,而請求實體本來就是一起的,把抽象的HTTP請求具體化了,因此我們可以畫出如下的更加具體的HTTP請求報文圖了:
HTTP請求報文結構
在接下來關于HTTP請求報文的學習,就會圍繞HTTP請求報文的結構來學習。
一、什么是請求方法?
對于請求方法的最簡單理解就是告知服務器的請求意圖以及用什么方式去請求。在HTTP/1.1中規(guī)定了八大請求方法。
二、什么是請求URI?
要想理解請求URI是什么,首先我們得理解什么是URI,為了方便大家的理解,小唐給大家舉一個簡單的例子,在你的面前,有著許多的盒子,每一個盒子都有一個唯一表示盒子所在位置的符號用來告訴你需要去哪里找這些盒子,大概意思就是盒子的位置是唯一的,我們可以通過定位的方式查找盒子所在的位置。那么,在廣闊的互聯網中,有著很多的互聯網資源,不同的資源在互聯中的位置都是唯一的。如果人們想要在互聯網中尋找某一個資源,那么,就一定會在互聯網中找到一個唯一用來定位互聯網資源的方法,這就是URI。URI在計算機領域叫做統(tǒng)一資源定位符,也就是小唐說的那一個唯一表示位置的的符號。
如果人們想要訪問互聯網的資源,他一定不是隨便訪問的,因為人們知道所要尋找什么樣的互聯網資源,因此人們也知道這些資源在互聯網中的URI。所以如果想要訪問指定的互聯網資源,我們只需要找到這個資源的URI就行了,這樣的過程就叫做請求URI。
那么,請求URI在什么位置可以找到呢,如果你是仔細的并且在訪問網站的時候你也留意過網站的域名變化,你一定遇到過這樣的格式:
找一找請求URI
如果你仔細的觀察就會發(fā)現這樣的地址由兩個部分組成,第一個部分是:http://www.xxx.com/ddd/search.php,第二個部分是?name=xiaotang&age=22。
第一個部分表示的是一個查詢頁面,第二個部分表示的是通過什么條件去查詢,這兩個部分組合起來就是一個根據姓名和年齡查詢的功能頁面了。第二個部分又叫做查詢字符串。如果你還記得最開始學習的域名基礎的話,你也許還能把第一部分的內容進行更加詳細的劃分,比如:http://www.xxx.com是域名,那么/ddd/search.php是什么呢?這就是請求URI。在互聯網中,我們通常把域名和查詢字符串之間的那一個部分叫做請求URI。
三、請求方法都有哪些?
上文中,小唐提到了HTTP/1.1規(guī)定的用于表示請求的八大方法,接下來小唐會把這八大請求方法,做一個簡短的介紹,之后會拿出在生活和工作中經常用到的請求方法給大家一個詳細的講解。我們來看一看有哪些請求方法吧。
1、八大請求方法概覽:
四、日常生活中常見的請求方法有哪些?
在工作中或者生活中常用的方法主要有GET方法、POST方法、OPTIONS方法。
1、GET方法
GET方法是用來獲取服務器上已經被URI識別的Web資源的。表示請求訪問的指定資源經服務器解析后返回響應內容。簡單的講,如果客戶端請求訪問的資源是文本,服務器通過對請求的處理后,就會把這個資源保持原樣的返回給客戶端。如果客戶端請求訪問的是一個服務器的應用的計算功能的話,那么服務器就會把計算后的結果返回。
舉個簡單的例子,我們有著這樣一個HTTP請求報文:
HTTP請求報文1
如上圖,客戶端對服務器發(fā)起了一個請求,其中請求的方法是GET,請求的URI是/index.html,用的是HTTP協議1.1版本的規(guī)范,并且通過首部指明了請求的服務器主機為www.example.com,此時,如果服務器收到了這樣的請求就會返回一個指定的資源。大白話理解就是,客戶端想訪問www.example.com的網站服務器的index.html資源,然后服務器把這個資源返回給客戶端。
再舉一個例子,假設網站服務器上有一個查詢頁面的Web資源,我們把它叫做search.php頁面,這個頁面的主要功能是可以根據姓名和年齡來查詢信息,那么,客戶端想要想要請求服務器的查詢功能的時候就會產生這樣一個請求報文:
HTTP請求報文2
這個時候服務器收到這樣的請求就會把相應的結果返回給客戶端了。
2、POST方法
主要是用來傳輸請求主體的內容的,有著和GET方法同樣的作用,比如GET方法中的請求報文2這張圖,POST方法主要經常用于在網頁中有進行數據交互的表格。可以想象這樣一個頁面,在頁面中有著兩個輸入框,一個是用來輸入姓名的,一個是用來輸入年齡的,還有一個查詢按鈕,點擊查詢按鈕后,我們可以獲取查詢后的結果,如果客戶端要獲取這樣一個查詢頁面的查詢結果,就需要使用到POST方法了,因此POST方法就是一個把數據發(fā)送給服務器處理的過程。使用POST方法會產生類似于下面這樣一個HTTP請求報文:
HTTP請求POST方法
首先是字面意思的差別,GET方法表示的是獲取頁面,而POST方法表示的把數據交給服務器處理,當然在一定的時候POST方法要處理的數據也可以放在GET方法里面,但這不是安全的做法。
其次,在使用GET方法的時候,請求報文里面的請求實體是空的,因為GET方法把請求實體里面的數據顯式的展示在了,URI里面,在瀏覽器的地址欄也能看見這些數據,因此類似于用戶名和密碼這些私密的內容就會暴露在大家面前;但POST方法不一樣,POST方法是把請求處理的數據放在請求實體里面的,而在真實的HTTP通信中請求報文是加密的,所以相比于GET方法,如果要處理隱私數據那么POST方法是最佳的選擇。
3、OPTIONS方法
OPTIONS方法可是大有作用,它主要用來查詢針對某一個請求URI指定的資源支持那些HTTP請求方法的,相當于一個查詢操作,查詢的是Web資源支持使用哪些請求方法,服務器在收到HTTP請求的OPTIONS方法的時候,會返回這一個Web資源支持那些HTTP請求方法。
五、什么是協議版本?
協議版本相比于請求方法來說就更容易理解了,它其實就是指的HTTP協議的版本號,到目前為止HTTP協議一共有三個版本,分別是HTTP 0.9,HTTP/1.0和HTTP/1.1的版本,而現在我們常用的是HTTP/1.1版本。
接下來我們再來說一說請求首部字段的那些事。
請求首部字段簡單的講就是從客戶端向服務器端發(fā)送請求報文時使用的首部。補充了請求的附加內容、客戶端信息、響應內容相關優(yōu)先級等信息。通常情況下,我們能在請求報文中經常看見的請求首部字段有這些,小唐簡單在這里給大家簡單的描述下:
接下來,我們依次的看一下這些請求首部字段都是做什么用的,可以告訴服務器的那些附加請求信息。
1、Accept:用戶代理可處理的媒體類型
Accept首部字段可通知服務器,用戶代理能夠處理的媒體類型以及媒體類型的優(yōu)先級,可以使用type/subtype這種形式來表示。這里有幾種常見的媒體類型表現形式可以參考一下:
(1)文本文件
text/html,text/json,application/xml等
(2)圖片文件:
image/jpeg,image/png等
(3)視頻文件:
video/mpeg等
(4)應用程序的二進制文件:
application/octest-stream等。
如果想要給顯示的媒體類型增加優(yōu)先級,則使用q=來額外表示權重值,用分號進行分隔。權重值q的范圍是0-1,q為1的時候表示最大,不指定權重值q的時候默認q=1.0,當服務器提供多種內容的時候,將會首先返回權重值最高的媒體類型。
2、Accept-Charset:優(yōu)先的字符集
Accept-Charset首部字段可以用來通知服務器用戶代理支持的字符集及字符集相對優(yōu)先順序。另外,可一次性指定多種字符集。與首部字段Accept相同的是可以使用權重q來表示相對優(yōu)先級。
3、Accept-Encoding:優(yōu)先的內容編碼
Accept-Encoding首部字段用來告知服務器用戶代理支持的內容編碼及內容編碼的優(yōu)先級順序。可一次性指定多種內容編碼。下面是常見的幾種內容編碼類型:gzip、deflate等,采用權重q值來表示相對優(yōu)先級,也可以使用*號作為通配符,指定任意的編碼格式。
4、Accept-Language:優(yōu)先的語言(自然語言)
首部字段Accept-Language用來告知服務器用戶代理能夠處理的自然語言集(指中文或英文等),以及自然語言集的相對優(yōu)先級。可一次指定多種自然語言集,同樣的可以使用q來表示優(yōu)先級。
5、Host:請求資源所在的服務器
首部字段Host會告知服務器,請求的資源所處互聯網的主機名和端口號。Host首部字段是HTTP/1.1規(guī)范內是唯一一個必須被包含在請求內的首部字段。
6、Referer:對請求中URI的原始獲取方
首部字段Referer會告知服務器請求的原始資源的URI,這個時候,服務器看見這個字段就會知道請求是從哪一個頁面發(fā)起的。
7、User-Agent:HTTP客戶端程序的信息
首部字段User-Agent會將創(chuàng)建請求的瀏覽器和用戶代理名稱等信息傳達給服務器。
通過本篇文章,你將會學習到請求報文中常用的請求方法、常用的請求首部字段的意義,在接下來的文章中,小唐將會帶你進入響應報文的學習,我們不見不散。
歡迎關注【小唐IT實用技術講解】頭條號,一起加速成長,成為一名優(yōu)秀的互聯網技術精英~如果你喜歡小唐的文章,不妨點贊、轉發(fā)、收藏一下哦。
TTP有兩種報文格式:
請求報文:由客戶端向服務器端發(fā)出的報文。
響應報文:從服務端到客戶端的報文。
我們呢,一個一個來說一下,先說請求報文。先看一下大學期間比較熟悉的一張圖
我們先從最右邊開始看,可以看出來,HTTTP請求報文由三部分構成,分別是:請求行、請求頭、請求實體。當然,嚴格意義上來說,應該還包括空行。
一.請求行:
首先,為什么要用請求行?
其實,請求航的存在其主要目的就是為了區(qū)分報文是請求報文還是響應報文,以及記錄相應的URL以及協議版本。可以看出,請求行主要由三部分構成:方法、請求資源的URL、HTTP的版本。其中URL和版本無須多說,咱們主要說一下“方法”;
HTTP請求的方法主要有:GET、POST、PUT、DELETE、OPTIONS、HEAD、TRANCE、CONNECT等
其中,最常用的是GET和POST請求,但是我們都來了解一下。
我們重點來說一下GET和POST方法。
1、GET請求,請求的數據會附在URL后面,已key=value(參數名=參數值)的形式傳遞,具體例子:http://localhost:8888/abc/login.jsp?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD,在這里有一點十分的重要:GET請求中的參數用“?”分割URL實體和傳遞參數,而參數之間用“&”進行分割。其中,如果傳輸的數據是英文字母或者數據,則原樣發(fā)送;如果時空格,轉換成“+”;如果是中文或者其他的字符,則直接把傳輸的數用BASE64加密,轉換成十六進制輸出,比如后面的%E4%BD%A0%E5%A5%BD就是16進制的輸出。
POST請求,則是把提交的數據放在HTTP請求實體中。
2、GET請求最大長度是有限制的,可能有一種說法是GET請求傳遞參數的最大長度是1024KB,其實這種說法是不準確的。實際中,URL并不存在參數上限的限制,HTTP規(guī)范里面也并沒有對URL的長度進行限制。而這個限制主要是來自瀏覽器和服務器。比如IE6.0瀏覽器所支持的最大長度的URL長度是2083KB,firefox 3.0.3瀏覽器所支持的最大長度是7764KB.
POST請求傳遞的數據是沒有大小限制的,HTTP規(guī)范中也沒有對其進行相應的限制。只不過是處理器的處理能力限制了它。
一般來說,GET請求傳遞的數據大小要小于POST傳遞數據的大小。
3、POST的安全性要比GET請求的安全性要高一些。因為GET請求傳遞的參數是后綴在URL后面的,可以直接看到,所以安全性較POST請求安全性會差一些!
我們來看一下具體請求報文示例:
其中第一行就是請求行,上圖中“GET”代表著請求的方法為GET請求,HTTP/1.1 代表這使用的HTTP協議的版本,中間代表著URL。
二.請求頭:
1、請求頭的作用:請求頭是用來通知服務器有關客戶端請求的一些信息。
2:請求頭的格式:請求頭由關鍵字/值對構成,每行一對。關鍵字和值用英文冒號“:”隔開,值對之間用英文逗號","隔開。
比如上圖中:Accept、Host、User-Agent等等都是請求頭中關鍵字。
我們來了解幾個比較重要的請求頭中屬性,后期我們會有專門的一篇文章去介紹HTTP 報文的頭部。
Accept:指定客戶端能夠接收的內容類型 示例:Accept: text/plain, text/html
Cookie:HTTP請求發(fā)送時,會把保存在該請求域名下的所有cookie值一起發(fā)送給web服務器。 示例:Cookie: $Version=1; Skin=new;
Content-Type:顯示HTTP提交的內容類型,一般來說POST請求會設置這個屬性 示例:Content-Type: application/x-www-form-urlencoded
三.請求實體:
請求實體作用:用來傳輸具體數據報文
請求頭和請求正文之間會有一個空行,這個空行非常的重要,主要是用來告訴服務器端請求頭已經結束了,接下來的是請求正文啦!具體見下圖。
上圖中的“Pn=2&kw=nba”就是具體的請求報文。
嚴格意義上將,響應報文由四部分構成:狀態(tài)行、響應頭、空行、響應正文構成。
一.狀態(tài)行
在響應中唯一真正的區(qū)別在于第一行中用狀態(tài)信息代替了請求信息。狀態(tài)行(status line)通過提供一個狀態(tài)碼來說明所請求的資源情況。
狀態(tài)行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發(fā)回的響應狀態(tài)代碼;Reason-Phrase表示狀態(tài)代碼的文本描述。狀態(tài)代碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值。
其中狀態(tài)行由3部分構成,分別是協議版本、狀態(tài)碼、狀態(tài)描述,之間由空格構成。
對于,我們開發(fā)人員來說,狀態(tài)行中可能最重要的就是狀態(tài)碼,不同狀態(tài)碼能表示出此次請求的狀態(tài)。
狀態(tài)碼由三位數字組成,其中200~299代表著成功,300~399代表著資源重定向,400~499代表客戶端請求錯誤,500~599表示服務器端出錯。
其中呢,有幾個狀態(tài)碼是比較常見,比較重要的,上圖!
二.響應頭部:
與請求頭部是類似的,它是用來告訴客戶端響應報文的一些相關信息的。前面我們已經大致的講述了請求頭,響應頭部我們就直接上圖吧。
響應頭說明Server服務器應用程序軟件的名稱和版本Content-Type響應正文的類型(是圖片還是二進制字符串)Content-Length響應正文長度Content-Charset響應正文使用的編碼Content-Encoding響應正文使用的數據壓縮格式Content-Language響應正文使用的語言
三.響應正文:
用來傳輸響應數據,跟請求實體是類似的,在這里就不贅述了。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。