1. 程式人生 > >http報文---請求報文和響應報文

http報文---請求報文和響應報文

HTTP請求報文格式:

HTTP請求報文主要由請求行、首部行、請求正文3部分組成


1,請求行

由3部分組成,分別為:請求方法URL見備註1)以及協議版本,之間由空格分隔

請求方法包括GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE以及擴充套件方法,當然並不是所有的伺服器都實現了所有的方法,部分方法即便支援,處於安全性的考慮也是不可用的。

方法欄位

①GET:請求獲取Request-URI(URI:通用資源識別符號,URL是其子集,URI注重的是標識,而URL強調的是位置,可以將URL看成原始的URI),所標識的資源。

最常見的一種請求方式,當客戶端要從伺服器中讀取文件時,當點選網頁上的連結或者通過在瀏覽器的位址列輸入網址來瀏覽網頁的,使用的都是GET方式

。GET方法要求伺服器將URL定位的資源放在響應報文的資料部分,回送給客戶端。使用GET方法時,請求引數和對應的值附加在URL後面,利用一個問號(“?”)代表URL的結尾與請求引數的開始傳遞引數長度受限制。例如,/index.jsp?id=100&op=bind,這樣通過GET方式傳遞的資料直接表示在地址中,所以我們可以把請求結果以連結的形式傳送給好友。

地址中”?”之後的部分就是通過GET傳送的請求資料,我們可以在位址列中清楚的看到,各個資料之間用”&”符號隔開。顯然,這種方式不適合傳送私密資料。另外,由於不同的瀏覽器對地址的字元限制也有所不同,一般最多隻能識別1024個字元,所以如果

需要傳送大量資料的時候,也不適合使用GET方式

②POST:在Request-URI所標識的資源後附加新的資料;支援HTML表單提交,表單中有使用者添入的資料,這些資料會發送到伺服器端,由伺服器儲存至某位置(例如傳送處理程式)

對於上面提到的不適合使用GET方式的情況,可以考慮使用POST方式,因為使用POST方法可以允許客戶端給伺服器提供資訊較多。POST方法將請求引數封裝在HTTP請求資料中,以名稱/值的形式出現,可以傳輸大量資料,這樣POST方式對傳送的資料大小沒有限制,而且也不會顯示在URL中。

③HEAD:請求Request-URI所標識的資源響應訊息報頭,HEAD方法可以在響應時不返回訊息體。

HEAD就像GET,只不過服務端接受到HEAD請求後只返回響應頭,而不會發送響應內容。當我們只需要檢視某個頁面的狀態的時候,使用HEAD是非常高效的,因為在傳輸的過程中省去了頁面內容。

④PUT:與GET相反,請求伺服器儲存一個資源,並用Request-URI做為其標識;例如釋出系統。

⑤DELETE:請求刪除URL指向的資源

⑥OPTIONS:請求查詢伺服器的效能,或者查詢與資源相關的選項

⑦TRACE:跟蹤請求要經過的防火牆、代理或閘道器等,主要用於測試或診斷

⑧CONNECT保留將來使用

協議版本的格式為:HTTP/主版本號.次版本號,常用的有HTTP/1.0和HTTP/1.1

2,請求頭部

請求頭部為請求報文添加了一些附加資訊,由“名/值”對組成,每行一對,名和值之間使用冒號分隔

常見請求頭如下:

請求頭

說明

Host

接受請求的伺服器地址,可以是IP:埠號,也可以是域名

User-Agent

傳送請求的應用程式名稱

Connection

指定與連線相關的屬性,如Connection:Keep-Alive

Accept-Charset

通知服務端可以傳送的編碼格式

Accept-Encoding

通知服務端可以傳送的資料壓縮格式

Accept-Language

通知服務端可以傳送的語言

請求頭部的最後會有一個空行,表示請求頭部結束接下來為請求正文這一行非常重要,必不可少

3,請求正文

可選部分,比如GET請求就沒有請求正文

GET請求示例:

POST請求示例:

HTTP響應報文格式:

HTTP響應報文主要由狀態行、響應頭部、響應正文3部分組成

1,狀態行

由3部分組成,分別為:協議版本,狀態碼,狀態碼描述,之間由空格分隔

狀態碼為3位數字:

200~299的狀態碼錶示成功

300~399的狀態碼指資源重定向

400~499的狀態碼指客戶端請求出錯

500~599的狀態碼指服務端出錯(HTTP/1.1向協議中引入了資訊性狀態碼,範圍為100~199)

常遇到的狀態碼說明:

狀態碼狀態碼描述簡要說明
200OK客戶端請求成功,資訊在返回的響應報文中
201Created 請求已經被實現,而且有一個新的資源已經依據請求的需要而建立,且其URI已經隨Location頭資訊返回。
301Moved Permanently被請求的資源已永久移動到新位置,並且將來任何對此資源的引用都應該使用本響應返回的若干個URI之一
302Found在響應報文中使用首部“Location: URL”指定臨時資源位置
304Not Modified條件式請求中使用

403

400

Forbidden

Bad Request

請求被伺服器拒絕

一個通用差錯程式碼,指示該請求不能被伺服器理解

404Not Found伺服器無法找到請求的URL
405Method Not Allowed不允許使用此方法請求相應的URL
500Internal Server Error伺服器內部錯誤
502Bad Gateway代理伺服器從上游收到了一條偽響應
503Service Unavailable伺服器此時無法提供服務,但將來可能可用
505HTTP Version Not Supported

伺服器不支援,或者拒絕支援在請求中使用的HTTP版本。這暗示著伺服器不能或不願使用與客戶端相同的版本。響應中應當包含一個描述了為何版本不被支援以及伺服器支援哪些協議的實體

2,響應頭部

與請求頭部類似,為響應報文添加了一些附加資訊

常見響應頭部如下:

響應頭

說明

Server

伺服器應用程式軟體的名稱和版本

Content-Type

響應正文的型別(是圖片還是二進位制字串)

Content-Length

響應正文長度

Content-Charset

響應正文使用的編碼

Content-Encoding

響應正文使用的資料壓縮格式

Content-Language

響應正文使用的語言

響應示例:

PS

1,URI、URL和URN之間的區別

URI全名為Uniform Resource Indentifier(統一資源標識),用來唯一的標識一個資源,是一個通用的概念,URI由兩個主要的子集URL和URN組成

URL全名為Uniform Resource Locator(統一資源定位),通過描述資源的位置來標識資源

URN全名為Uniform Resource Name(統一資源命名),通過資源的名字來標識資源,與其所處的位置無關,這樣即使資源的位置發生變動,其URN也不會變化

HTTP規範將更通用的概念URI作為其資源識別符號,但是實際上,HTTP應用程式處理的只是URI的URL子集

關於HTTP請求GET和POST的區別

1.GET提交,請求的資料會附在URL之後(就是把資料放置在HTTP協議頭<request-line>中),以?分割URL和傳輸資料,多個引數用&連線;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果資料是英文字母/數字,原樣傳送,如果是空格,轉換為+,如果是中文/其他字元,則直接把字串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號以16進製表示的ASCII。

POST提交:把提交的資料放置在是HTTP包的包體<request-body>中

因此,GET提交的資料會在位址列中顯示出來,而POST提交,位址列不會改變

2.傳輸資料的大小:

   首先宣告,HTTP協議沒有對傳輸的資料大小進行限制,HTTP協議規範也沒有對URL長度進行限制。 而在實際開發中存在的限制主要有:

   GET:特定瀏覽器和伺服器對URL長度有限制,例如IE對URL長度的限制是2083位元組(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於作業系統的支援。

   因此對於GET提交時,傳輸資料就會受到URL長度的限制。

   POST:由於不是通過URL傳值,理論上資料不受限。但實際各個WEB伺服器會規定對post提交資料大小進行限制,Apache、IIS6都有各自的配置。

3.安全性:

    POST的安全性要比GET的安全性高。注意:這裡所說的安全性和上面GET提到的“安全”不是同個概念。上面“安全”的含義僅僅是不作資料修改,而這裡安全的含義是真正的Security的含義,比如:通過GET提交資料,使用者名稱和密碼將明文出現在URL上,因為(1)登入頁面有可能被瀏覽器快取, (2)其他人檢視瀏覽器的歷史紀錄,那麼別人就可以拿到你的賬號和密碼了。


相關推薦

HTTP請求響應頭相關欄位

請求頭: Accept:用於告訴伺服器。客戶端支援的資料結構。 Accept-Charset:用於告訴伺服器。客戶端採用的編碼。 Accept-Encoding:用於告訴伺服器。客戶端支援的資料壓縮方式。 Accept-Language:用於告訴伺服器。

HTTP請求報文響應報文

狀態碼 技術分享 http ima cto con 例如 消息 char 請求報文 請求報文包含請求行、請求頭部、請求正文,還有空行。 請求行 由請求方法、URL和協議版本組成。 請求方法包括:GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE 協

HTTP協議中request報文請求方法狀態響應

cti keep lang one com location 部分 AC url   一個HTTP請求報文由4部分組成: 請求行(request line) 請求頭部(header) 空行 請求數據   下圖給出了請求報文的一般格式:

簡述HTTP報文請求方法狀態響應

不同的 說明 nal timeout 定位 是否 擁有 authorize let 1. Method 請求方法,表明客戶端希望服務器對資源執行的動作; 1.1. GET 向服務器請求資源。 1.2 HEAD 和GET方法的行為類似,但服務器在響應中只返回首部,不會返回

關於HTTP報文請求方法狀態響應

1. Method 請求方法,表明客戶端希望伺服器對資源執行的動作; 1.1 GET 向伺服器請求資源。 1.2 HEAD 和GET方法的行為類似,但伺服器在響應中只返回首部,不會返回實體的主體部分。這就允許客戶端在未獲取實際資源的情況下,對資源的首部進行檢查。可以做到: 不獲取資源的情況下

http協議基礎(二)請求響應報文的構成

http協議用於客戶端和伺服器之間的通訊,請求訪問資源的一方稱為客戶端,而提供資源響應的一方稱為伺服器端。 下面就是客戶端和服務端之間簡單的通訊過程 PS:請求必須從客戶端建立通訊,服務端沒收到請求之前不會發送響應 下面先來說說請求的構成: 1)請求方法URI協議/版本  2)請求頭(

HTTP協議淺析(中):請求報文響應報文

1. 請求報文格式 1.1 伺服器測試程式碼 伺服器測試程式碼: #include <stdio.h> #include <stdlib.h> #include <string.h>

http協議 請求報文響應報文

引用 學習Web開發不好好學習HTTP報文,將會“打拳不練功,到老一場空”,你花在犯迷糊上的時間比你沉下心來學習HTTP的時間肯定會多很多。 HTTP請求報文解剖HTTP請求報文由3部分組成(請求行+請求頭+請求體): 下面是一個實際的請求報文: ①是請求方法,GET和

http請求響應報文的架構

1.請求行(包含了請求方式、請求資源的路徑、遵循的協議及版本)GET /news3/1.html HTTP/1.1GET:請求方式,在HTTP協議中一共規定了7種請求方式, 只用GET和POST/news3/1.html:請求資源的路徑HTTP/1.1:瀏覽器傳送請求時所使用

HTTP協議(中):請求報文響應報文

1. 請求報文格式 1.1 伺服器測試程式碼 伺服器測試程式碼: #include <stdio.h> #include <stdlib.h> #include <string.h>

16,python實現----HTTP請求報文響應報文

import socket import re ''' 請求報文: 請求行: GET / HTTP/1.1 請求行格式: 請求方式 請求的資源路徑 HTTP版本 請求頭: Host: www.baidu.com

HTTP請求報文響應報文(簡書)

文章作者:Tyan部落格:noahsnail.com  |  CSDN  |  簡書1. HTTP報文HTTP報文是由一行一行的簡單字串組成的。HTTP報文都是純文字,不是二進位制程式碼,所以人們可以很方便地對其進行讀寫。下圖是一個例子:從Web客戶端發往Web伺服器的HTT

HTTP 請求報文響應報文的格式

HTTP 請求報文 由請求行、請求頭部、空行 和 請求包體 4 個部分組成:   (1)請求行:請求行由方法欄位、URL 欄位 和HTTP 協議版本欄位 3 個部分組成,他們之間使用空格隔開。常用的 HTTP 請求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRA

怎麼檢視真實專案的http 請求請求報文響應報文,即requestresponse?只有這樣,才能完全徹底明白一個http 請求整個過程,傳送接收的是什麼東西。

IE瀏覽器,f12,網路,捕獲。 如,在前後端分離(即動靜分離,前端只有html程式碼,後端是介面返回json字串。這種方式,是最接近移動端專案即app專案的模式)方式,一個使用者儲存修改即savemodify為例: 因為是form提交是post方式,所以請求正文是

http報文---請求報文響應報文

HTTP請求報文格式:HTTP請求報文主要由請求行、首部行、請求正文3部分組成1,請求行由3部分組成,分別為:請求方法、URL(見備註1)以及協議版本,之間由空格分隔請求方法包括GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE以及擴充套件方法,當然

圖解HTTP筆記之第三章:http請求報文響應報文

http的請求報文和響應報文 心好累,人好睏,早上差點遲到,還遇到一奇葩大媽,哎不說了,記筆記: 客戶端傳送的報文稱為請求報文,服務端響應的報文稱為響應報文,報文的格式如下: 報文傳輸過程中會

[轉載]http以post方式上傳一個檔案,構造其請求訊息報文

  首先客戶端連結 192.168.24.56 後, 應該傳送如下http 請求:   Accept: text/plain, */*   Accept-Language: zh-cn   Host: 192.168.24.56  Content-Type:multipart/form-data;bo

HTTP請求響應

.cn 訪問 htm ref 頁面 格式 技術分享 -s charset 這篇文章簡單總結一下HTTP請求頭和響應頭,並舉一些web開發中響應頭的用例。 1. HTTP請求頭 accept:瀏覽器通過這個頭告訴服務器,它所支持的數據類型。如:text/html,

http請求響應頭詳細解釋

pad 使用 after 網絡資源 max OS lai 通信 緩存 想對http請求頭和響應頭有更細致的了解,請看如下 Requests部分 Header解釋示例 Accept 指定客戶端能夠接收的內容類型 Accept: text/plain, text/html

Wireshark的HTTP請求響應包如何對應

以Wireshark2.6.3版本為例,如下圖所示,紅框中的803是一次HTTP的GET請求包,綠框中的809、810兩條記錄都是響應包,究竟哪個是803的響應包呢?接下來介紹三種方式識別; 通過傳輸控制協議資訊識別 如下圖,點選803這條記錄後,在下面的