HTTP最強資料大全

B/S 結(jié)構(gòu)定義

瀏覽器-服務(wù)器(Browser/Server)結(jié)構(gòu)昨寞,簡稱B/S結(jié)構(gòu),與C/S結(jié)構(gòu)不同儡首,其客戶端不需要安裝專門的軟件毕莱,只需要瀏覽器即可器贩,瀏覽器通過Web服務(wù)器數(shù)據(jù)庫進行交互,可以方便的在不同平臺下工作朋截;服務(wù)器端可采用高性能計算機蛹稍,并安裝OracleSybase部服、Informix等大型數(shù)據(jù)庫唆姐。B/S結(jié)構(gòu)簡化了客戶端的工作,它是隨著Internet技術(shù)興起而產(chǎn)生的廓八,對C/S技術(shù)的改進奉芦,但該結(jié)構(gòu)下服務(wù)器端的工作較重,對服務(wù)器的性能要求更高剧蹂∩Γ—— 維基百科

browser-and-server

URI (統(tǒng)一資源標(biāo)志符)

電腦術(shù)語中,統(tǒng)一資源標(biāo)識符(英語:Uniform Resource Identifier宠叼,或URI)是一個用于標(biāo)識某一互聯(lián)網(wǎng)資源名稱的字符串先巴。 該種標(biāo)識允許用戶對網(wǎng)絡(luò)中(一般指萬維網(wǎng))的資源通過特定的協(xié)議進行交互操作。URI的最常見的形式是統(tǒng)一資源定位符(URL)车吹,經(jīng)常指定為非正式的網(wǎng)址筹裕。更罕見的用法是統(tǒng)一資源名稱(URN)醋闭,其目的是通過提供一種途徑窄驹。用于在特定的命名空間資源的標(biāo)識,以補充網(wǎng)址证逻±植海—— 維基百科

URI 文法

URI文法由URI協(xié)議名(例如“http”,“ftp”,“mailto”或“file”)丈咐,一個冒號瑞眼,和協(xié)議對應(yīng)的內(nèi)容所構(gòu)成。特定的協(xié)議定義了協(xié)議內(nèi)容的語法和語義棵逊,而所有的協(xié)議都必須遵循一定的URI文法通用規(guī)則伤疙,亦即為某些專門目的保留部分特殊字符×居埃—— 維基百科

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

                       權(quán)限                 路徑
        ┌───────────────┴───────────────┐┌───┴────┐
  abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
  └┬┘   └───────┬───────┘ └────┬────┘ └┬┘           └─────────┬─────────┘ └──┬──┘
  協(xié)議        用戶信息         主機名    端口                  查詢參數(shù)          片段

MIME

MIME(Multipurpose Internet Mail Extensions)多用途互聯(lián)網(wǎng)郵件擴展類型徒像。是設(shè)定某種擴展名文件用一種應(yīng)用程序來打開的方式類型,當(dāng)該擴展名文件被訪問的時候蛙讥,瀏覽器會自動使用指定應(yīng)用程序來打開锯蛀。多用于指定一些客戶端自定義文件名,以及一些媒體文件打開方式次慢。 —— 百度百科

文件格式

每個 MIME 類型由兩部分組成旁涤,前面是數(shù)據(jù)的大類別,例如聲音audio迫像、圖象image等劈愚,后面定義具體的種類。

常見的 MIME 類型有:

資源名稱 后綴 類型
超文本標(biāo)記語言文本 .html text/html
xml文檔 .xml text/xml
普通文本 .txt text/plain
PNG圖像 .png image/png
PDF文檔 .pdf application/pdf

了解更多的 MIME 類型 - 互聯(lián)網(wǎng)媒體類型

HTTP 協(xié)議

超文本傳輸協(xié)議英文HyperText Transfer Protocol闻妓,縮寫HTTP)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議造虎。設(shè)計HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁面的方法。通過HTTP或者HTTPS協(xié)議請求的資源由統(tǒng)一資源標(biāo)識符(Uniform Resource Identifiers纷闺,URI)來標(biāo)識算凿。—— 維基百科

HTTP 協(xié)議是基于請求與響應(yīng)犁功,具體如下圖所示:

request-and-response

HTTP 協(xié)議主要特點

  • 簡單快速:當(dāng)客戶端向服務(wù)器端發(fā)送請求時氓轰,只是簡單的填寫請求路徑和請求方法即可,然后就可以通過瀏覽器或其他方式將該請求發(fā)送就行了
  • 靈活:HTTP 協(xié)議允許客戶端和服務(wù)器端傳輸任意類型任意格式的數(shù)據(jù)對象
  • 無連接:無連接的含義是限制每次連接只處理一個請求浸卦。服務(wù)器處理完客戶的請求署鸡,并收到客戶的應(yīng)答后,即斷開連接限嫌,采用這種方式可以節(jié)省傳輸時間靴庆。(當(dāng)今多數(shù)服務(wù)器支持Keep-Alive功能怒医,使用服務(wù)器支持長連接焰薄,解決無連接的問題)
  • 無狀態(tài):無狀態(tài)是指協(xié)議對于事務(wù)處理沒有記憶能力,服務(wù)器不知道客戶端是什么狀態(tài)。即客戶端發(fā)送HTTP請求后,服務(wù)器根據(jù)請求啡省,會給我們發(fā)送數(shù)據(jù),發(fā)送完后,不會記錄信息。(使用 cookie 機制可以保持 session劲赠,解決無狀態(tài)的問題)

HTTP 請求報文

HTTP 請求報文由請求行請求頭空行請求體(請求數(shù)據(jù)) 4 個部分組成轧叽,如下圖所示:

http-request-message

請求報文示例

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 協(xié)議版本組成识樱,它們之間用空格分開垢村。

GET / HTTP/1.1

請求頭

請求頭由 key-value 對組成,每行一對,key (鍵) 和 value (值)用英文冒號 : 分隔抚芦。請求頭通知服務(wù)器有關(guān)于客戶端請求的信息烙常,典型的請求頭有:

  • User-Agent:用戶代理信息 - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 ...
  • Accept:客戶端可識別的內(nèi)容類型列表 - 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服務(wù)器或代理服務(wù)器厅目,在完成本次請求的響應(yīng)后番枚,斷開連接
    • keep-alive:告訴WEB服務(wù)器或代理服務(wù)器。在完成本次請求的響應(yīng)后损敷,保持連接葫笼,以等待后續(xù)請求
  • Cookie:存儲于客戶端擴展字段,向同一域名的服務(wù)端發(fā)送屬于該域的cookie - PSTM=1490844191; BIDUPSID=2145FF54639208435F60E1E165379255;

空行

最后一個請求頭之后是一個空行拗馒,發(fā)送回車符和換行符路星,通知服務(wù)器以下不再有請求頭。

請求體

請求數(shù)據(jù)不在 GET 方法中使用诱桂,而是在 POST 方法中使用洋丐。與請求數(shù)據(jù)相關(guān)的最常使用的請求頭是 Content-Type和 Content-Length辆雾。

HTTP 響應(yīng)報文

HTTP響應(yīng)報文由狀態(tài)行保檐、響應(yīng)頭、空行和響應(yīng)體4 個部分組成诈悍,如下圖所示:

http-response-message

響應(yīng)報文示例

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=/

狀態(tài)行

狀態(tài)行格式: HTTP-Version Status-Code Reason-Phrase CRLF

  • HTTP-Version - HTTP 協(xié)議版本
  • Status-Code - 狀態(tài)碼
  • Reason-Phrase - 狀態(tài)碼描述
  • CRLF - 回車/換行符

響應(yīng)頭

響應(yīng)頭由 key-value 對組成触菜,每行一對九榔,key (鍵) 和 value (值)用英文冒號 : 分隔。響應(yīng)頭域允許服務(wù)器傳遞不能放在狀態(tài)行的附加信息涡相,這些域主要描述服務(wù)器的信息和Request-URI進一步的信息哲泊,典型的響應(yīng)頭有:

  • Server:包含處理請求的原始服務(wù)器的軟件信息
  • Date:服務(wù)器日期
  • Content-Type:返回的資源類型 (MIME)
  • Connection:連接方式
    • close:連接已經(jīng)關(guān)閉
    • keep-alive:連接已保持,在等待本次連接的后續(xù)請求
  • Cache-Control:緩存控制
  • Expires:設(shè)置過期時間
  • Set-Cookie:設(shè)置 Cookie 信息

空行

最后一個響應(yīng)頭之后是一個空行催蝗,發(fā)送回車符和換行符切威,通知瀏覽器以下不再有響應(yīng)頭。

響應(yīng)體

服務(wù)器返回給瀏覽器的響應(yīng)信息丙号,下面是百度首頁的響應(yīng)體片段:

<!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 >
    <title>百度一下先朦,你就知道</title>
</head>
<body>
  ...
</body>
</html>

HTTP Methods

HTTP 協(xié)議的請求方法有:GET、POST犬缨、HEAD喳魏、PUT、DELETE怀薛、OPTIONS刺彩、TRACE、CONNECT、PATCH创倔、HEAD

HTTP 常用的請求方法:

  • GET - 獲取資源嗡害,使用 URL 方式傳遞參數(shù),大小為 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

狀態(tài)代碼由三位數(shù)字組成霸妹,第一個數(shù)字定義了響應(yīng)的類別,且有五種可能取值:

  • 1xx:指示信息 – 表示請求已接收念搬,繼續(xù)處理
  • 2xx:成功 – 表示請求已被成功接收
  • 3xx:重定向 – 要完成請求必須進行更進一步的操作
  • 4xx:客戶端錯誤 – 請求有語法錯誤或請求無法實現(xiàn)
  • 5xx:服務(wù)器錯誤 – 服務(wù)器未能實現(xiàn)合法的請求

常見狀態(tài)代碼抑堡、狀態(tài)描述的說明如下:

  • 200 OK:客戶端請求成功
  • 204 No Content:沒有新文檔摆出,瀏覽器應(yīng)該繼續(xù)顯示原來的文檔
  • 206 Partial Content:客戶發(fā)送了一個帶有Range頭的GET請求朗徊,服務(wù)器完成了它
  • 301 Moved Permanently:所請求的頁面已經(jīng)轉(zhuǎn)移至新的url
  • 302 Found:所請求的頁面已經(jīng)臨時轉(zhuǎn)移至新的url
  • 304 Not Modified:客戶端有緩沖的文檔并發(fā)出了一個條件性的請求,服務(wù)器告訴客戶偎漫,原來緩沖的文檔還可以繼續(xù)使用爷恳。
  • 400 Bad Request:客戶端請求有語法錯誤,不能被服務(wù)器所理解
  • 401 Unauthorized:請求未經(jīng)授權(quán)象踊,這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用
  • 403 Forbidden:對被請求頁面的訪問被禁止
  • 404 Not Found:請求資源不存在
  • 500 Internal Server Error:服務(wù)器發(fā)生不可預(yù)期的錯誤
  • 503 Server Unavailable:請求未完成温亲,服務(wù)器臨時過載或當(dāng)機,一段時間后可能恢復(fù)正常

HTTP Cookie & Session

HTTP Cache(緩存)

HTTP CORS (跨域資源共享)

HTTPS

HTTP/2

HTTP 安全

HTTP 面試

HTTP 爬蟲文章

Resources

Node.js

Java

PHP

Python

HTTP 資源

文章

視頻

HTTP 抓包工具及教程

工具

  • Fiddler for Windows - Fiddler是一個 HTTP 協(xié)議調(diào)試代理工具
  • Charles for Mac Mac下HTTP 協(xié)議調(diào)試代理工具
  • Fiddler-AddOns - Fiddler 插件地址
  • Wireshark - 是一個網(wǎng)絡(luò)封包分析軟件,網(wǎng)絡(luò)封包分析軟件的功能是擷取網(wǎng)絡(luò)封包熔酷,并盡可能顯示出最為詳細的網(wǎng)絡(luò)封包資料
  • mitmproxy - 一款可交互式的命令行抓包工具

教程

Chrome HTTP 插件

  • Proxy SwitchyOmega - 輕松快捷地管理和切換多個代理設(shè)置
  • 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, 它們不是標(biāo)準(zhǔn)庫. urllib3 提供線程安全連接池和文件post支持,與urllib及urllib2的關(guān)系不大. requests 自稱HTTP for Humans, 使用更簡潔方便孤紧。

詳細信息請參考 - 開源中國 - python中 urllib, urllib2, httplib, httplib2 幾個庫的區(qū)別

HTTP 壓力測試

工具

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

教程

HTTP 代理服務(wù)器

產(chǎn)品

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

文章

HTTP 圖書

參考資源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阴颖,一起剝皮案震驚了整個濱河市活喊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖钾菊,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帅矗,死亡現(xiàn)場離奇詭異,居然都是意外死亡煞烫,警方通過查閱死者的電腦和手機浑此,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滞详,“玉大人凛俱,你說我怎么就攤上這事×霞ⅲ” “怎么了蒲犬?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長岸啡。 經(jīng)常有香客問我原叮,道長,這世上最難降的妖魔是什么巡蘸? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任奋隶,我火速辦了婚禮,結(jié)果婚禮上悦荒,老公的妹妹穿的比我還像新娘唯欣。我一直安慰自己,他們只是感情好搬味,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布境氢。 她就那樣靜靜地躺著,像睡著了一般身腻。 火紅的嫁衣襯著肌膚如雪产还。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天嘀趟,我揣著相機與錄音脐区,去河邊找鬼。 笑死她按,一個胖子當(dāng)著我的面吹牛牛隅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酌泰,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼媒佣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了陵刹?” 一聲冷哼從身側(cè)響起默伍,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后也糊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炼蹦,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年狸剃,在試婚紗的時候發(fā)現(xiàn)自己被綠了掐隐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡钞馁,死狀恐怖虑省,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情僧凰,我是刑警寧澤探颈,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站允悦,受9級特大地震影響膝擂,放射性物質(zhì)發(fā)生泄漏虑啤。R本人自食惡果不足惜隙弛,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狞山。 院中可真熱鬧全闷,春花似錦、人聲如沸萍启。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勘纯。三九已至局服,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驳遵,已是汗流浹背淫奔。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堤结,地道東北人唆迁。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像竞穷,于是被迫代替她去往敵國和親唐责。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容