更新內容:新增視頻教程 - WEB系統測試、PHP的HTTP協議、okhttp框架解析與應用、走進Requests庫、接口測試基礎入門篇、JMeter之HTT
P協議接口性能測試; 更新時間:2017-04-03javascript
爲了方便有興趣的朋友一塊兒維護HTTP資源大全,我把資源放到了 Github 上。但願你們多多推薦哈,謝謝你們!php
瀏覽器-服務器(Browser/Server)結構,簡稱B/S結構,與C/S結構不一樣,其客戶端不須要安裝專門的軟件,只須要瀏覽器便可,瀏覽器經過Web服務器與數據庫進行交互,能夠方便的在不一樣平臺下工做;服務器端可採用高性能計算機,並安裝Oracle、Sybase、Informix等大型數據庫。B/S結構簡化了客戶端的工做,它是隨着Internet技術興起而產生的,對C/S技術的改進,但該結構下服務器端的工做較重,對服務器的性能要求更高。—— 維基百科html
在電腦術語中,統一資源標識符(英語:Uniform Resource Identifier,或URI)是一個用於標識某一互聯網資源名稱的字符串。 該種標識容許用戶對網絡中(通常指萬維網)的資源經過特定的協議進行交互操做。URI的最多見的形式是統一資源定位符(URL),常常指定爲非正式的網址。更罕見的用法是統一資源名稱(URN),其目的是經過提供一種途徑。用於在特定的命名空間資源的標識,以補充網址。—— 維基百科前端
URI文法由URI協議名(例如「
http
」,「ftp
」,「mailto
」或「file
」),一個冒號,和協議對應的內容所構成。特定的協議定義了協議內容的語法和語義,而全部的協議都必須遵循必定的URI文法通用規則,亦即爲某些專門目的保留部分特殊字符。—— 維基百科java
下面展現了 URI 例子及它們的組成部分:node
權限 路徑 ┌───────────────┴───────────────┐┌───┴────┐ abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1 └┬┘ └───────┬───────┘ └────┬────┘ └┬┘ └─────────┬─────────┘ └──┬──┘ 協議 用戶信息 主機名 端口 查詢參數 片斷
MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開。多用於指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。 —— 百度百科python
每一個 MIME 類型由兩部分組成,前面是數據的大類別,例如聲音audio、圖象image等,後面定義具體的種類。jquery
常見的 MIME 類型有:linux
資源名稱 | 後綴 | 類型 |
---|---|---|
超文本標記語言文本 | .html | text/html |
xml文檔 | .xml | text/xml |
普通文本 | .txt | text/plain |
PNG圖像 | .png | image/png |
PDF文檔 | application/pdf |
瞭解更多的 MIME 類型 - 互聯網媒體類型ios
超文本傳輸協議(英文:HyperText Transfer Protocol,縮寫:HTTP)是互聯網上應用最爲普遍的一種網絡協議。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。經過HTTP或者HTTPS協議請求的資源由統一資源標識符(Uniform Resource Identifiers,URI)來標識。—— 維基百科
HTTP 協議是基於請求與響應,具體以下圖所示:
簡單快速:當客戶端向服務器端發送請求時,只是簡單的填寫請求路徑和請求方法便可,而後就能夠經過瀏覽器或其餘方式將該請求發送就好了
靈活:HTTP 協議容許客戶端和服務器端傳輸任意類型任意格式的數據對象
無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接,採用這種方式能夠節省傳輸時間。(當今多數服務器支持Keep-Alive功能,使用服務器支持長鏈接,解決無鏈接的問題)
無狀態:無狀態是指協議對於事務處理沒有記憶能力,服務器不知道客戶端是什麼狀態。即客戶端發送HTTP請求後,服務器根據請求,會給咱們發送數據,發送完後,不會記錄信息。(使用 cookie 機制能夠保持 session,解決無狀態的問題)
HTTP 請求報文由請求行、請求頭、空行 和 請求體(請求數據) 4 個部分組成,以下圖所示:
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響應報文由狀態行、響應頭、空行和響應體4 個部分組成,以下圖所示:
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 協議的請求方法有: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
- 刪除用戶
狀態代碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
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:請求未完成,服務器臨時過載或當機,一段時間後可能恢復正常
github.io - HTTP 協議 (筆試面試知識整理) - 資料很全面
Jerry Qu - HTTP系列歸檔文章 (感謝天之驕子推薦)
Browser Develop Tools - 瀏覽器開發者工具
Fiddler for Windows - Fiddler是一個 HTTP 協議調試代理工具
Charles for Mac Mac下HTTP 協議調試代理工具
Fiddler-AddOns - Fiddler 插件地址
Wireshark - 是一個網絡封包分析軟件,網絡封包分析軟件的功能是擷取網絡封包,並儘量顯示出最爲詳細的網絡封包資料
mitmproxy - 一款可交互式的命令行抓包工具
Fiddler CertMaker for iOS and Android - HTTPS 證書生成插件
簡書 - HTTPS以及Fiddler抓取HTTPS協議 - APP HTTPS 抓包
Proxy SwitchyOmega - 輕鬆快捷地管理和切換多個代理設置
CORS Toggle - 容許跨域請求
Postman - 功能超級強大 HTTP Client
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
若只使用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 幾個庫的區別
LoadRunner
SoapUI
Jmeter
http_load
webbench
ab
siege
Nginx
Squid
Privoxy
Varnish
Polipo
Tinyproxy
HAProxy
ATS