更新內容:新增視頻教程 - WEB系統測試、PHP的HTTP協議、okhttp框架解析與應用、走進Requests庫、接口測試基礎入門篇、JMeter之HTTP協議接口性能測試;
更新時間: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 類型 - 互聯網媒體類型android
超文本傳輸協議(英文:HyperText Transfer Protocol,縮寫:HTTP)是互聯網上應用最爲普遍的一種網絡協議。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。經過HTTP或者HTTPS協議請求的資源由統一資源標識符(Uniform Resource Identifiers,URI)來標識。—— 維基百科
HTTP 協議是基於請求與相應,具體以下圖所示:
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 (值)用英文冒號 :
分隔。請求頭通知服務器有關於客戶端請求的信息,典型的請求頭有:
www.baidu.com
最後一個請求頭以後是一個空行,發送回車符和換行符,通知服務器如下再也不有請求頭。
請求數據不在 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
響應頭由 key-value
對組成,每行一對,key (鍵) 和 value (值)用英文冒號 :
分隔。響應頭域容許服務器傳遞不能放在狀態行的附加信息,這些域主要描述服務器的信息和Request-URI進一步的信息,典型的響應頭有:
最後一個響應頭以後是一個空行,發送回車符和換行符,通知瀏覽器如下再也不有響應頭。
服務器返回給瀏覽器的響應信息,下面是百度首頁的響應體片斷:
<!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 經常使用的請求方法:
http://www.example.com/users
- 獲取全部用戶http://www.example.com/users/a-unique-id
- 新增用戶http://www.example.com/users/a-unique-id
- 更新用戶http://www.example.com/users/a-unique-id
- 刪除用戶狀態代碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
常見狀態代碼、狀態描述的說明以下:
github.io - HTTP 協議 (筆試面試知識整理) - 資料很全面
若只使用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 幾個庫的區別