Python介面測試之HTTP詳解(十二)

2022-09-22 19:12:22 字數 4584 閱讀 3007

超文字傳輸協議 (http) 是一種用於分散式、協作式、超**資訊系統的應用級協議。這是1990年以來全球資訊網 (即因特網) 資料通訊的基礎。http 是一種通用

和無狀態的協議, 它可以用於其他目的, 以及使用其請求方法、錯誤**和標頭的擴充套件。

基本上, http 是一種基於 tcp/ip 的通訊協議, 用於在全球資訊網上傳送資料

(html 檔案、影象檔案、查詢結果等)。預設埠為 tcp 80, 但也可以使用其他埠。它為計算機提供了一種標準化的通訊方式。http 規範指定如何構造客戶端的

請求資料並將其傳送到伺服器, 以及伺服器如何響應這些請求。

有三基本特性使 http 成為一個簡單但功能強大的協議:

1、http 是無連線的: http 客戶端, 即瀏覽器啟動 http 請求, 在發出請求後, 客戶端斷開與伺服器的連線並等待響應。伺服器處理請求並重新與客戶端的連線以傳送響應。

2、http 是獨立於**的: 這意味著, 只要客戶端和伺服器都知道如何處理資料內容, 任何型別的資料都可以通過 http 傳送。客戶端和伺服器都需要使用適當的 mime 類

型來指定內容型別。

3、http 是無狀態的: 如上所述, http 是無連線的, 它是 http 是無狀態協議的直接結果。伺服器和客戶端只在當前請求期間才知道對方。後來, 他們倆都忘了對方。由於協

議的這種性質, 無論是客戶端還是瀏覽器都不能在 web 頁之間的不同請求之間保留資訊。http/1.0 使用每個請求/響應交換的新連線, 而 http/1.1 連線可用於一個或多個請求

/響應交換機。

下圖顯示了 web 應用程式的一個非常基本的體系結構, 並描述了 http 所處的位置:

http 協議是一種請求/響應協議, 基於基於客戶端/伺服器的體系結構, 其中 web 瀏覽器、機器人和搜尋引擎等行為類似於 http 客戶端, web 伺服器充當伺服器。

http 客戶端以請求方法、uri 和協議版本的形式向伺服器傳送請求, 後跟一個類似 mime 的訊息, 其中包含請求修飾符、客戶端資訊以及通過 tcp/ip 連線的可能的正文內容。

http 伺服器使用狀態行進行響應, 包括訊息的協議版本和成功或錯誤**, 後跟類似 mime 的訊息, 其中包含伺服器資訊、實體元和可能的實體正文內容。

這裡將列出一些重要的 http 協議引數以及它們在通訊中使用的語法。例如, 日期格式、url 格式等。這將幫助您在編寫 http 客戶端或伺服器程式時構造請求和響應訊息。

http 使用 . 編號方案來指示協議的版本。http 訊息的版本由第一行中的 http 版本欄位指示。下面是指定 http 版本號的一般語法:

http-version = "http" "/" 1*digit "." 1*digit

統一資源識別符號 (uri) 是簡單格式化的, 包含名稱、位置等的 case-insensitive 字串, 用於標識資源, 例如**、web 服務等。用於 http 的 uri 的一般語法如下:

uri = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]

如果埠為空或未給定, 則假定埠80為 http, 空 abs_path 等效於 "/" 的 abs_path。在保留的和不安全的集合中的字元與它們的 "%" 十六進位制十六進位制編碼等效。

所有 http 日期/時間戳都必須以格林尼治標準時間 (gmt) 表示, 無例外。允許 http 應用程式使用下列三個日期/時間戳表示法:

sun, 06 nov 1994 08:49:37 gmt ; rfc 822, updated by rfc 1123

我們使用字符集來指定客戶端首選的字符集。可以列出多個字符集, 用逗號分隔。如果未指定值, 則預設為 us ascii。

內容編碼值表示在通過網路傳遞內容之前, 已使用編碼演算法對其進行編碼。內容編碼是

主要用於允許文件被壓縮或在不丟失身份的情況下進行有用的轉換。

所有的內容

編碼值都是 case-insensitive 的。http/1.1 在接受編碼和內容編碼標頭欄位中使用內容編碼值, 我們將在後面的章節中看到。

http 在內容型別中使用 internet **型別並接受標頭欄位, 以便提供開放式和可擴充套件的資料型別和文字協商。所有**型別的值都在 internet 指定的數字頒發機構 (iana)

中註冊。指定**型別的常規語法如下:

media-type = type "/" subtype *( ";" parameter )
如:

accept: image/gif
http 在接受語言和內容語言欄位中使用語言標記。語言標記由一個或多個部分組成: 主要語言標記和可能的空系列子:

language-tag = primary-tag *( "-" subtag )
標籤內不允許空格, 所有標籤都是 case-insensitive 的。其中任何兩個字母的主標籤是一個 iso-639 的語言縮寫和任何兩個字母的初始子是一個 iso-3166 國家**。

http 基於客戶端-伺服器體系結構模型和一個無狀態請求/響應協議, 它通過在可靠的 tcp/ip 連線之間交換訊息來操作。

http

"客戶端" 是一個程式 (web 瀏覽器或任何其他

客戶端), 它為傳送一個或多個 http 請求訊息而建立到伺服器的連線。http "服務

器" 是一個程式 (通常是像 apache web 伺服器或 internet 資訊服務 iis 等的 web 伺服器),

它接受連線以通過傳送 http 響應消

息來服務 http 請求。

http 使用統一資源識別符號 (uri) 來標識給定的資源並建立連線。建立連線後, http 訊息的傳遞方式與

internet

郵件 [rfc5322] 和多用途 internet 郵件擴充套件 (mime) [rfc2045] 所使用的格式類似。這些訊息包括從客戶端到伺服器

的請求以及從伺服器到客戶端的響應, 其格式如下:

http-message = | ; http/1.1 messages
http 請求和 http 響應使用 rfc 822 的通用訊息格式來傳輸所需的資料。此通用郵件格式包括以下四項。

a start-line

zero or more header fields followed by crlf

an empty line (i.e., a line with nothing preceding the crlf) indicating the end of the header fields

optionally a message-body

起始行將具有以下通用語法:

start-line = request-line | status-line
我們將在討論 http 請求和 http 響應訊息時分別討論請求行和狀態行。現在, 讓我們看看在請求和響應的情況下開始行的示例:

get /hello.htm http/1.1 (this is request-line sent by the client)

http/1.1 200 ok (this is status-line sent by the server)

http 標頭欄位提供有關請求或響應的必需資訊, 或有關在訊息正文中傳送的物件。有四種型別的 http 訊息頭:

通用頭: 這些頭欄位對請求和響應訊息具有一般適用性。

請求頭: 這些頭欄位僅適用於請求訊息。

響應頭: 這些頭欄位僅適用於響應訊息。

實體-頁首: 這些標頭欄位定義元關於實體體, 或者, 如果沒有正文, 則說明請求所標識的資源。

所有 above-mentioned 標頭都遵循相同的通用格式, 並且每個標題欄位都由一個後跟冒號 (:) 和欄位值的名稱組成, 如下所示:

message-header = field-name ":" [ field-value ]
以下是各種標題欄位的示例:

user-agent: curl/7.16.3 libcurl/7.16.3 openssl/0.9.7l zlib/1.2.3

host: www.example.com

accept-language: en, mi

date: mon, 27 jul 2009 12:28:53 gmt

server: apache

last-modified: wed, 22 jul 2009 19:15:56 gmt

etag: "34aa387-d-1568eb00"

accept-ranges: bytes

content-length: 51

vary: accept-encoding

content-type: text/plain

Python之HTTP靜態Web伺服器開發

眾所周知,http協議是基於tcp協議的基礎上產生的瀏覽器到伺服器的通訊協議 ,其根本原理也是通過socket進行通訊。 使用http協議通訊,需要注意其返回的響應報文格式不能有任何問題。 響應報文,一共包括4個部分,分別是響應行,響應頭,空行,響應體,並且每項資料之間必須使用 r n隔開。 空行是...

python3筆記二十二 正規表示式之函式

一 學習內容 二 re match函式 需要匯入包 import re 1 格式 match pattern string flags 0 2 引數 pattern 匹配的正規表示式 string 要匹配的字串 flags 標識位,用於控制正規表示式的匹配方式,它的值有 re i 忽略大小寫 re...