python+pytest介面自動化(2)-HTTP協議基礎

給你一頁白紙發表於2022-03-03

HTTP協議介紹

簡介

HTTP 即 HyperText Transfer Protocol(超文字傳輸協議),是網際網路上應用最為廣泛的一種網路協議。所有的 WWW 檔案都必須遵守這個標準。

設計 HTTP 最初的目的是為了提供一種釋出和接收 HTML 頁面的方法。HTTP 協議在 OSI 模型中屬於應用層協議,應用層協議除了 HTTP 還有 FTP、SMTP、DNS、RIP、Telnet 等。

HTTP 協議應用於客戶端—服務端架構上,瀏覽器或 APP 作為 HTTP 客戶端通過 URL 向 HTTP 服務端(即 Web 伺服器)傳送請求,伺服器將超文字傳輸到本地瀏覽器。

  • 超文字

    我們在瀏覽器裡面看到的網頁就是超文字解析而成的,網頁原始碼是一系列 HTML 程式碼,裡面包含了一系列標籤,如 img 顯示圖片,p 指定顯示段落等,瀏覽器解析這些標籤後便形成了我們平常看到的網頁,而這網頁的原始碼 HTML 就可以稱作超文字。

    例如我們在 Chrome 瀏覽器裡任意開啟一個頁面,右鍵點選"檢視原始碼",這些原始碼都是超文字。

  • URL

    URL 即 Uniform Resource Locator(統一資源定位符),就像每家每戶都有一個門牌地址一樣,每個網頁也都有一個 Internet 地址(如www.baidu.com)。當你在瀏覽器的地址框中輸入一個 URL 或是單擊一個超級連結時,URL就確定了要瀏覽的地址。瀏覽器通過超文字傳輸協議(HTTP), 將 Web 伺服器上站點的網頁程式碼提取出來,並渲染成網頁。

特點

  • 無連線

    限制每次連線只處理一個請求。服務端處理完客戶端的請求,並收到客戶端的應答後, 便斷開連線。採用這種方式可以節省傳輸時間。

  • 無狀態

    HTTP 協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。如果伺服器不需要先前資訊,那麼它的應答就比較快。但是缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大,此時可以設定快取。

  • 媒體獨立

    只要客戶端和服務端知道如何處理資料內容,任何型別的資料都可以通過 HTTP 傳送。客戶端以及服務端指定使用適合的 MIME-type 來傳輸。

HTTP協議介面請求方法

HTTP請求中常見的請求方式有GET、POST兩種。

  • GET 用於獲取資源資訊,即在資料庫中做查詢操作,不影響資料庫本身的資料,如 百度輸入pytest查詢、查詢訂單狀態等。
  • POST 用於可能會修改伺服器上的資源,即相當於在資料庫中做了修改的操作,會影響資料庫本身的資料,如 使用者註冊、登入、提交評論、發帖、修改密碼等。

下面我們通過按理來說明這兩種請求方式的區別。

  • 案例1-GET請求

    在瀏覽器中輸入URLhttps://www.baidu.com/s?wd=pytest並回車,這個其實就是在百度搜尋 pytest 這個關鍵詞。URL 中包含了請求的引數資訊,這裡引數 wd 就是要搜尋的關鍵字。

    在瀏覽器可以看到 Query String Parameters 選項就是請求的引數。即發起一次 GET 請求時,引數會以 Query String Parameters 的形式進行傳遞, ? 後的字串則為其請求引數,有多個請求引數則以& 作為分隔符,如https://www.baidu.com/s?wd=pytest&ie=utf-8

  • 案例2-POST請求

    通常情況下,網站登入時需要提交使用者名稱密碼,這裡包含了敏感資訊,使用 GET 方式請求的話密碼就會暴露在 URL 裡面,造成密碼洩露,所以這裡最好以 POST 方式傳送。

    以登入TestHome為例,我們可以看到,在 Request URL 中是沒有請求引數的,請求引數使用者名稱、密碼以 Form Data 的形式(不止有這種請求形式)傳送,如下圖所示:

關於GET、POST請求引數的形式(即格式),在後續文章中會詳細介紹。

除了常用的 GET,POST 請求外,還有一些請求方式,如 PUT、DELETE、HEAD 等,將其簡單總結如下:

需要注意的是,很多公司直接使用POST請求方式替代了用於修改資源的 PUT 方式以及用於刪除資源的 DELETE 方式。

HTTP協議與HTTPS協議的區別

瀏覽網站時,通過瀏覽器位址列可以看到有的網站是以 http 開頭(如http://www.weather.com.cn),而有的是以 https 開頭(如https://www.baidu.com/), 那麼這兩種有什麼區別呢?

首先我們需要明白HTTP協議包含HTTPS協議,但HTTPS又有自身的特點。

HTTPS 的全稱是 Hyper Text Transfer Protocol over Secure Socket Layer,即在 HTTP 下加入 SSL 層(Secure Sockets Layer 安全套接層), 簡單講就是 HTTP 的安全版。

通過 HTTPS 傳輸的內容都是經過 SSL 加密的,SSL的主要作用可以分為以下兩種:

  • 建立一個資訊保安通道,來保證資料傳輸的安全。
  • 確認網站的真實性。凡是使用了 https 的網站,都可以通過點選瀏覽器位址列的鎖頭標誌來檢視網站認證之 後的真實資訊,也可以通過 CA 機構頒發的安全簽章來查詢。

HTTP 與 HTTPS 區別簡單總結如下:

  • HTTP 資訊是明文傳輸,安全性差;HTTPS 資訊通過SSL加密傳輸,安全性好。
  • 使用 HTTPS 協議需要到 CA(Certificate Authority 即數字證照認證機構)申請證照,一般免費證照較少,因而需要一定費用。
  • 預設埠不一樣,HTTP為 80,HTTPS 為 443。
  • HTTP 頁面響應速度比 HTTPS 快,主要是因為 HTTP 使用 TCP 三次握手建立連線,而 HTTPS除了 TCP 外,還要加上 SSL 9 次握手,一共是 12 次。
  • HTTPS 其實就是建構在 SSL/TLS 之上的 HTTP 協議,SSL 涉及到安全演算法會消耗 CPU 資源,所以 HTTPS 比 HTTP 要更耗費伺服器資源。

HTTP協議與TCP/IP協議的區別

TCP/IP 協議與 HTTP 協議在面試或工作中經常會遇到,這裡簡單介紹下兩者之間的區別。

TCP/IP 協議是傳輸層協議,主要解決資料如何在網路中傳輸,而 HTTP 是應用層協議,主要解決如何包裝資料。 建議先了解下網路 OSI 七層模型。

關於 TCP/IP 和 HTTP 協議的關係,網路有一段比較容易理解的介紹:“我們在傳輸資料時,可以只使用(傳輸層) TCP/IP 協議,但是那樣的話,如果沒有應用層,便無法識別資料內容,如果想要使傳輸的資料有意義,則必須使用到應用層協議,應用層協議有很多,比如 HTTP、FTP、TELNET 等,也可以自己定義應用層協議。WEB 使用 HTTP 協議作應用層協議,以封裝 HTTP 文字資訊,然後使用 TCP/IP 做傳輸層協議將它發到網路上。”

HTTP請求過程

說明

在瀏覽器中輸入網址https://www.baidu.com?wd=pytest,回車後瀏覽器會開啟對應頁面。這個過程就是瀏覽器向網站所在的伺服器傳送了一個Request,即請求,網站伺服器接收到這個Request之後進行處理和解析,然後返回一個對應的Response,即響應,然後傳回給瀏覽器,Response裡就包含了頁面的原始碼 等內容,瀏覽器再對其進行解析便將網頁呈現了出來。

以請求https://www.baidu.com?wd=pytest為例,開啟F12抓包,如圖所示:

我們可以通過選單欄中下列tab頁面檢視主要的請求資訊:

  • Headers中為請求頭部資訊,包括General (基礎資訊如url、method、status code等)、Respose Headers (響應頭資訊)、Request Header (請求頭資訊)。
  • Payload中為具體的請求入參。
  • Preview/Respose中都為響應內容,只是這兩者中內容的展示格式不一樣。

其他如Initiator、Timing、Cookie不做過多說明,有興趣大家可以自行去探究。

Request

Request,即請求,由客戶端向服務端發出。Request 可以分為四部分內容:

  • Request URL

    即請求網址,也就是統一資源定位符,用 URL 可以唯一確定我們想請求的資源。如:https://www.baidu.com?wd=pytest

  • Request Method

    即請求方法,之前已經介紹過。

  • Request Headers

    即請求頭,用來說明伺服器要使用的附加資訊,比較重要的資訊有 Cookie、Referer、User-Agent 等,常用的請求頭資訊說明如下:

    • Accept,請求報頭域,用於指定客戶端可接受哪些型別的資訊。
    • Accept-Encoding,指定客戶端可接受的內容編碼。
    • Accept-Language,指定客戶端可接受的語言型別。
    • Host,用於指定請求資源的主機 IP 和埠號,其內容為請求 URL 的原始伺服器或閘道器的位置。從 HTTP 1.1 版本開始,Request 必須包含此內容。
    • Cookie,也常用複數形式 Cookies,是網站為了辨別使用者進行 Session 跟蹤而儲存在使用者本地的資料。 Cookies 的主要功能就是維持當前訪問會話。
    • Referer,此內容用來標識這個請求是從哪個頁面發過來的,伺服器可以拿到這一資訊並做相應的處理,如 做來源統計、做防盜鏈處理等。
    • Content-Type,即Internet Media Type,網際網路媒體型別,也叫做MIME型別。在HTTP協議訊息頭中,使用它來表示具體請求中的媒體型別資訊。例如application/x-www-form-urlencoded表示表單資料, text/html代表HTML格式,application/json代表json型別。
    • User-Agent,簡稱 UA,它是一個特殊字串頭,使得伺服器能夠識別客戶使用的作業系統及版本、瀏覽器 及版本等資訊。如在做爬蟲時加上此資訊可以偽裝為瀏覽器,如果不加很可能會被識別出為爬蟲。
  • Request Body

    即請求體,一般用於POST請求中,主要定義向伺服器提交的資料型別,說白了就是POST介面的請求引數。而對於GET請求而言,因為請求引數直接放在URL裡,所以Request Body則為空。

    如上圖所示,可以在Payload中檢視GET請求的請求引數以及POST請求的Request Body

Response

Response,即響應,由服務端返回給客戶端。Response 可以分為如下三部分:

  • Response Status Code

    • 1**,資訊型,伺服器收到請求,需要請求者繼續操作。
    • 2**,成功型,請求成功收到,理解並處理。
    • 3**,重定向,需要進一步的操作以完成請求。
    • 4**,客戶端錯誤,請求包含語法錯誤或無法完成請求。
    • 5**,伺服器錯誤,伺服器在處理請求的過程中發生了錯誤

    常見的狀態碼說明如下:

  • Response Headers

    即響應頭,其中包含了伺服器對請求的應答資訊,如 Content-Type、Server、Set-Cookie 等,常用的響應頭資訊說明如下:

    • Content-Encoding,指定 Response 內容的編碼。
    • Date,標識 Response 產生的時間。
    • Last-Modified,指定資源的最後修改時間。
    • Set-Cookie,設定 Cookie,Response Headers 中的 Set-Cookie 即告訴瀏覽器需要將此內容放在 Cookies 中,下次請求攜帶 Cookies 內容。
    • Expires,指定 Response 的過期時間,使用它可以控制代理伺服器或瀏覽器將內容更新到快取中,如果再 次訪問時,直接從快取中載入,降低伺服器負載,縮短載入時間。
    • Content-Type,文件型別,指定了返回的資料型別是什麼,如 text/html 則代表返回 HTML 文件, application/x-javascript 則代表返回 JavaScript 檔案,image/jpeg 則代表返回了圖片。
  • Response Body

    即響應體,介面返回的正文資料都是在響應體中,如請求一個網頁,它的響應體就是網頁的 HTML 程式碼,請求一張圖片,它的響應體就是圖片的二進位制資料。一般在介面的響應內容大多都是 json 格式。

    如上圖所示,可以在PreviewRespose中檢視響應體內容。

總結

瞭解HTTP協議是做好介面測試的前提與基礎。

其中,HTTP與HTTPS有什麼區別,HTTP協議與TCP/IP協議分別屬於OSI七層模型中的哪一層,這在面試過程中也會經常問到。

相關文章