HTTP最強資料大全

semlinker發表於2019-03-02

更新內容:新增視訊教程 - WEB系統測試、PHP的HTTP協議、okhttp框架解析與應用、走進Requests庫、介面測試基礎入門篇、JMeter之HTTP協議介面效能測試;
更新時間:2017-04-03

為了方便有興趣的朋友一起維護HTTP資源大全,我把資源放到了 Github 上。希望大家多多推薦哈,謝謝大家!

B/S 結構定義

瀏覽器-伺服器(Browser/Server)結構,簡稱B/S結構,與C/S結構不同,其客戶端不需要安裝專門的軟體,只需要瀏覽器即可,瀏覽器通過Web伺服器資料庫進行互動,可以方便的在不同平臺下工作;伺服器端可採用高效能計算機,並安裝OracleSybaseInformix等大型資料庫。B/S結構簡化了客戶端的工作,它是隨著Internet技術興起而產生的,對C/S技術的改進,但該結構下伺服器端的工作較重,對伺服器的效能要求更高。—— 維基百科

HTTP最強資料大全

URI (統一資源標誌符)

電腦術語中,統一資源識別符號(英語:Uniform Resource Identifier,或URI)是一個用於標識某一網際網路資源名稱的字串。 該種標識允許使用者對網路中(一般指全球資訊網)的資源通過特定的協議進行互動操作。URI的最常見的形式是統一資源定位符(URL),經常指定為非正式的網址。更罕見的用法是統一資源名稱(URN),其目的是通過提供一種途徑。用於在特定的名稱空間資源的標識,以補充網址。—— 維基百科

URI 文法

URI文法由URI協議名(例如“http”,“ftp”,“mailto”或“file”),一個冒號,和協議對應的內容所構成。特定的協議定義了協議內容的語法和語義,而所有的協議都必須遵循一定的URI文法通用規則,亦即為某些專門目的保留部分特殊字元。—— 維基百科

下面展示了 URI 例子及它們的組成部分:

                       許可權                 路徑
        ┌───────────────┴───────────────┐┌───┴────┐
  abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
  └┬┘   └───────┬───────┘ └────┬────┘ └┬┘           └─────────┬─────────┘ └──┬──┘
  協議        使用者資訊         主機名    埠                  查詢引數          片段複製程式碼

MIME

MIME(Multipurpose Internet Mail Extensions)多用途網際網路郵件擴充套件型別。是設定某種副檔名檔案用一種應用程式來開啟的方式型別,當該副檔名檔案被訪問的時候,瀏覽器會自動使用指定應用程式來開啟。多用於指定一些客戶端自定義檔名,以及一些媒體檔案開啟方式。 —— 百度百科

檔案格式

每個 MIME 型別由兩部分組成,前面是資料的大類別,例如聲音audio、圖象image等,後面定義具體的種類。

常見的 MIME 型別有:

資源名稱 字尾 型別
超文字標記語言文字 .html text/html
xml文件 .xml text/xml
普通文字 .txt text/plain
PNG影像 .png image/png
PDF文件 .pdf application/pdf

瞭解更多的 MIME 型別 - 網際網路媒體型別

HTTP 協議

超文字傳輸協議英文HyperText Transfer Protocol縮寫HTTP)是網際網路上應用最為廣泛的一種網路協議。設計HTTP最初的目的是為了提供一種釋出和接收HTML頁面的方法。通過HTTP或者HTTPS協議請求的資源由統一資源識別符號(Uniform Resource Identifiers,URI)來標識。—— 維基百科

HTTP 協議是基於請求與相應,具體如下圖所示:

HTTP最強資料大全

HTTP 協議主要特點

  • 簡單快速:當客戶端向伺服器端傳送請求時,只是簡單的填寫請求路徑和請求方法即可,然後就可以通過瀏覽器或其他方式將該請求傳送就行了
  • 靈活:HTTP 協議允許客戶端和伺服器端傳輸任意型別任意格式的資料物件
  • 無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線,採用這種方式可以節省傳輸時間。(當今多數伺服器支援Keep-Alive功能,使用伺服器支援長連線,解決無連線的問題)
  • 無狀態:無狀態是指協議對於事務處理沒有記憶能力,伺服器不知道客戶端是什麼狀態。即客戶端傳送HTTP請求後,伺服器根據請求,會給我們傳送資料,傳送完後,不會記錄資訊。(使用 cookie 機制可以保持 session,解決無狀態的問題)

HTTP 請求報文

HTTP 請求報文由請求行請求頭空行請求體(請求資料) 4 個部分組成,如下圖所示:

HTTP最強資料大全

請求報文示例

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,id;q=0.4
Cookie: PSTM=1490844191; BIDUPSID=2145FF54639208435F60E1E165379255; BAIDUID=CFA344942EE2E0EE081D8B13B5C847F9:FG=1;複製程式碼

請求行

請求行由請求方法、URL 和 HTTP 協議版本組成,它們之間用空格分開。

GET / HTTP/1.1複製程式碼

請求頭

請求頭由 key-value 對組成,每行一對,key (鍵) 和 value (值)用英文冒號 : 分隔。請求頭通知伺服器有關於客戶端請求的資訊,典型的請求頭有:

  • User-Agent:使用者代理資訊 - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 ...
  • Accept:客戶端可識別的內容型別列表 - text/html,application/xhtml+xml,application/xml
  • Accept-Language:客戶端可接受的自然語言 - zh-CN,zh;q=0.8,en;q=0.6,id;q=0.4
  • Accept-Encoding:客戶端可接受的編碼壓縮格式 - gzip, deflate, sdch, br
  • Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機 - www.baidu.com
  • connection:連線方式
    • close:告訴WEB伺服器或代理伺服器,在完成本次請求的響應後,斷開連線
    • keep-alive:告訴WEB伺服器或代理伺服器。在完成本次請求的響應後,保持連線,以等待後續請求
  • Cookie:儲存於客戶端擴充套件欄位,向同一域名的服務端傳送屬於該域的cookie - PSTM=1490844191; BIDUPSID=2145FF54639208435F60E1E165379255;

空行

最後一個請求頭之後是一個空行,傳送回車符和換行符,通知伺服器以下不再有請求頭。

請求體

請求資料不在 GET 方法中使用,而是在 POST 方法中使用。與請求資料相關的最常使用的請求頭是 Content-Type和 Content-Length。

HTTP 響應報文

HTTP響應報文由狀態行、響應頭、空行和響應體4 個部分組成,如下圖所示:

HTTP最強資料大全

響應報文示例

HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Thu, 30 Mar 2017 12:28:00 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Cache-Control: private
Expires: Thu, 30 Mar 2017 12:27:43 GMT
Set-Cookie: BDSVRTM=0; path=/複製程式碼

狀態行

狀態行格式: HTTP-Version Status-Code Reason-Phrase CRLF

  • HTTP-Version - HTTP 協議版本
  • Status-Code - 狀態碼
  • Reason-Phrase - 狀態碼描述
  • CRLF - 回車/換行符

響應頭

響應頭由 key-value 對組成,每行一對,key (鍵) 和 value (值)用英文冒號 : 分隔。響應頭域允許伺服器傳遞不能放在狀態行的附加資訊,這些域主要描述伺服器的資訊和Request-URI進一步的資訊,典型的響應頭有:

  • Server:包含處理請求的原始伺服器的軟體資訊
  • Date:伺服器日期
  • Content-Type:返回的資源型別 (MIME)
  • Connection:連線方式
    • close:連線已經關閉
    • keep-alive:連線已保持,在等待本次連線的後續請求
  • Cache-Control:快取控制
  • Expires:設定過期時間
  • Set-Cookie:設定 Cookie 資訊

空行

最後一個響應頭之後是一個空行,傳送回車符和換行符,通知瀏覽器以下不再有響應頭。

響應體

伺服器返回給瀏覽器的響應資訊,下面是百度首頁的響應體片段:

<!DOCTYPE html>
<!--STATUS OK-->
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <link rel="icon" sizes="any" mask href="//www.baidu.com/img/baidu.svg">
    <title>百度一下,你就知道</title>
</head>
<body>
  ...
</body>
</html>複製程式碼

HTTP Methods

HTTP 協議的請求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT、PATCH、HEAD

HTTP 常用的請求方法:

  • GET - 獲取資源,使用 URL 方式傳遞引數,大小為 2KB
    • http://www.example.com/users - 獲取所有使用者
  • POST - 傳輸資源,HTTP Body, 大小預設8M
    • http://www.example.com/users/a-unique-id - 新增使用者
  • PUT - 資源更新
    • http://www.example.com/users/a-unique-id - 更新使用者
  • DELETE - 刪除資源
    • http://www.example.com/users/a-unique-id - 刪除使用者

HTTP Status Code

狀態程式碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:

  • 1xx:指示資訊 – 表示請求已接收,繼續處理
  • 2xx:成功 – 表示請求已被成功接收
  • 3xx:重定向 – 要完成請求必須進行更進一步的操作
  • 4xx:客戶端錯誤 – 請求有語法錯誤或請求無法實現
  • 5xx:伺服器錯誤 – 伺服器未能實現合法的請求

常見狀態程式碼、狀態描述的說明如下:

  • 200 OK:客戶端請求成功
  • 204 No Content:沒有新文件,瀏覽器應該繼續顯示原來的文件
  • 206 Partial Content:客戶傳送了一個帶有Range頭的GET請求,伺服器完成了它
  • 301 Moved Permanently:所請求的頁面已經轉移至新的url
  • 302 Found:所請求的頁面已經臨時轉移至新的url
  • 304 Not Modified:客戶端有緩衝的文件併發出了一個條件性的請求,伺服器告訴客戶,原來緩衝的文件還可以繼續使用。
  • 400 Bad Request:客戶端請求有語法錯誤,不能被伺服器所理解
  • 401 Unauthorized:請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用
  • 403 Forbidden:對被請求頁面的訪問被禁止
  • 404 Not Found:請求資源不存在
  • 500 Internal Server Error:伺服器發生不可預期的錯誤
  • 503 Server Unavailable:請求未完成,伺服器臨時過載或當機,一段時間後可能恢復正常

HTTP Cache(快取)

HTTP CORS (跨域資源共享)

HTTPS

HTTP/2

HTTP 安全

HTTP 面試

HTTP 爬蟲文章

Resources

Node.js

Java

PHP

Python

HTTP 資源

文章

工具

  • Fiddler for Windows - Fiddler是一個 HTTP 協議除錯代理工具
  • Charles for Mac Mac下HTTP 協議除錯代理工具
  • Fiddler-AddOns - Fiddler 外掛地址
  • Wireshark - 是一個網路封包分析軟體,網路封包分析軟體的功能是擷取網路封包,並儘可能顯示出最為詳細的網路封包資料
  • mitmproxy - 一款可互動式的命令列抓包工具

教程

Chrome HTTP 外掛

  • Proxy SwitchyOmega - 輕鬆快捷地管理和切換多個代理設定
  • CORS Toggle - 允許跨域請求
  • Postman - 功能超級強大 HTTP Client

HTTP 平臺資源庫

Browser

Node.js

  • request - Request is designed to be the simplest way possible to make http calls
  • axios- Promise based HTTP client for the browser and node.js
  • http-proxy - It is an HTTP programmable proxying library that supports websockets
  • superagent - SuperAgent is a small progressive client-side HTTP request library
  • morgan - HTTP request logger middleware for node.js

Java

Android

Python

若只使用python3.X, 下面可以不看了, 記住有個urllib的庫就行了

python2.X 有這些庫名可用: urllib, urllib2, urllib3, httplib, httplib2, requests

python3.X 有這些庫名可用: urllib, urllib3, httplib2, requests

兩者都有的urllib3和requests, 它們不是標準庫. urllib3 提供執行緒安全連線池和檔案post支援,與urllib及urllib2的關係不大. requests 自稱HTTP for Humans, 使用更簡潔方便。

詳細資訊請參考 - 開源中國 - python中 urllib, urllib2, httplib, httplib2 幾個庫的區別

HTTP 壓力測試

工具

  • LoadRunner
  • SoapUI
  • Jmeter
  • http_load
  • webbench
  • ab
  • siege

教程

HTTP 代理伺服器

產品

  • Nginx
  • Squid
  • Privoxy
  • Varnish
  • Polipo
  • Tinyproxy
  • HAProxy
  • ATS

文章

HTTP 圖書

參考資源

相關文章