HTTP最強資料大全

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

爲了方便有興趣的朋友一塊兒維護HTTP資源大全,我把資源放到了 Github 上。但願你們多多推薦哈,謝謝你們!php

B/S 結構定義

瀏覽器-服務器(Browser/Server)結構,簡稱B/S結構,與C/S結構不一樣,其客戶端不須要安裝專門的軟件,只須要瀏覽器便可,瀏覽器經過Web服務器數據庫進行交互,能夠方便的在不一樣平臺下工做;服務器端可採用高性能計算機,並安裝OracleSybaseInformix等大型數據庫。B/S結構簡化了客戶端的工做,它是隨着Internet技術興起而產生的,對C/S技術的改進,但該結構下服務器端的工做較重,對服務器的性能要求更高。—— 維基百科html

URI (統一資源標誌符)

電腦術語中,統一資源標識符(英語:Uniform Resource Identifier,或URI)是一個用於標識某一互聯網資源名稱的字符串。 該種標識容許用戶對網絡中(通常指萬維網)的資源經過特定的協議進行交互操做。URI的最多見的形式是統一資源定位符(URL),常常指定爲非正式的網址。更罕見的用法是統一資源名稱(URN),其目的是經過提供一種途徑。用於在特定的命名空間資源的標識,以補充網址。—— 維基百科前端

URI 文法

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

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

權限                 路徑
        ┌───────────────┴───────────────┐┌───┴────┐
  abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
  └┬┘   └───────┬───────┘ └────┬────┘ └┬┘           └─────────┬─────────┘ └──┬──┘
  協議        用戶信息         主機名    端口                  查詢參數          片斷複製代碼

MIME

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文檔 .pdf application/pdf

瞭解更多的 MIME 類型 - 互聯網媒體類型android

HTTP 協議

超文本傳輸協議英文HyperText Transfer Protocol縮寫HTTP)是互聯網上應用最爲普遍的一種網絡協議。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。經過HTTP或者HTTPS協議請求的資源由統一資源標識符(Uniform Resource Identifiers,URI)來標識。—— 維基百科

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

HTTP 協議主要特色

  • 簡單快速:當客戶端向服務器端發送請求時,只是簡單的填寫請求路徑和請求方法便可,而後就能夠經過瀏覽器或其餘方式將該請求發送就好了
  • 靈活:HTTP 協議容許客戶端和服務器端傳輸任意類型任意格式的數據對象
  • 無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接,採用這種方式能夠節省傳輸時間。(當今多數服務器支持Keep-Alive功能,使用服務器支持長鏈接,解決無鏈接的問題)
  • 無狀態:無狀態是指協議對於事務處理沒有記憶能力,服務器不知道客戶端是什麼狀態。即客戶端發送HTTP請求後,服務器根據請求,會給咱們發送數據,發送完後,不會記錄信息。(使用 cookie 機制能夠保持 session,解決無狀態的問題)

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 (值)用英文冒號 : 分隔。請求頭通知服務器有關於客戶端請求的信息,典型的請求頭有:

  • 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/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 圖書

參考資源

相關文章
相關標籤/搜索