久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

你應(yīng)該知道的HTTP基礎(chǔ)知識

 宇智波瞬潤 2016-05-10

轉(zhuǎn)載請注明出處
作者:@怪盜kidou
說明:本文內(nèi)容僅限于本人熟知的內(nèi)容,,HTTP的內(nèi)容任意一個知識點都可以單獨寫一篇博客,,所以別指望靠一篇博客可以講清楚,本文的主要作用是為以后的博客作鋪墊,,所以更詳細(xì)的HTTP協(xié)議內(nèi)容可參考RFC 2616,,本人水平有限,如有不正確的地方歡迎留言指出,。

本文主要內(nèi)容:

  • HTTP請求報文格式
  • HTTP響應(yīng)報文格式
  • Header
  • 請求體的3種形式
  • 推薦調(diào)試工具
  • HTTP的組成圖示

1. HTTP請求報文格式

HTTP 的請求報文分為三個部分 請求行,、請求頭請求體,格式如圖:


HTTP請求報文格式


注:部分文章也將HTTP請求報文分為兩部分請求頭和請求體,,請求頭的第一行為請求行,。

1.1 請求行

請求行(Request Line)分為三個部分:請求方法請求地址協(xié)議及版本,,以CRLF(\r\n)結(jié)束,。
HTTP/1.1 定義的請求方法有8種:GET、POST,、PUT,、DELETE、PATCH,、HEAD,、OPTIONS、TRACE,最常的兩種GET和POST,如果是RESTful接口的話一般會用到GET,、POST,、DELETE、PUT,。

在了解請求地址之前,,先了解一下URL的構(gòu)成:


URL.png


PATH是URL主機以后的部分,即包含了Query String,,如:

URL PATH
http://http://www.jianshu.com/ /
http://localhost:8080/index.php?id=1234 /index.php?id=1234
http://weibo.com/920507888/home /920507888/home

請求報文示例:


HTTP請求報文格式示例

2. HTTP響應(yīng)報文格式

HTTP響應(yīng)的格式上除狀態(tài)行(第一行)與請求的請求行不一樣以外,,其它就格式而言是一樣的,但排除狀態(tài)行和請求行的區(qū)別,,從Header上還是能區(qū)分出HTTP請求和HTTP響應(yīng)的,,怎么區(qū)分就要看前面的常見Header啦。


HTTP_響應(yīng)

狀態(tài)碼(就是上圖中的響應(yīng)碼) 的詳細(xì)可以查看 HTTP狀態(tài)碼詳解

為了更直觀的展示HTTP響應(yīng),,下面的例子,,自nc 1270.0.1:80 << EOFEOF之間,是一個簡單的HTTP請求.


HTTP請求和響應(yīng)

3. Header

Header可用于傳遞一些附加信息,,格式: 鍵: 值,,注意冒號后面有一個空格!如:

Content-Length: 1024
Content-Type: text/plain

3.1 請求和響應(yīng)常見通用Header

名稱 作用
Content-Type 請求體/響應(yīng)體的類型,,如:text/plain,、application/json
Accept 說明接收的類型,可以多個值,,用,(半角逗號)分開
Content-Length 請求體/響應(yīng)體的長度,,單位字節(jié)
Content-Encoding 請求體/響應(yīng)體的編碼格式,如gzip,deflate
Accept-Encoding 告知對方我方接受的Content-Encoding
ETag 給當(dāng)前資源的標(biāo)識,,和Last-Modified,、If-None-MatchIf-Modified-Since配合,,用于緩存控制
Cache-Control 取值為一般為no-cachemax-age=XX,,XX為個整數(shù),表示該資源緩存有效期(秒)

3.2 常見請求Header

名稱 作用
Authorization 用于設(shè)置身份認(rèn)證信息
User-Agent 用戶標(biāo)識,,如:OS和瀏覽器的類型和版本
If-Modified-Since 值為上一次服務(wù)器返回的 Last-Modified 值,,用于確認(rèn)某個資源是否被更改過,沒有更改過(304)就從緩存中讀取
If-None-Match 值為上一次服務(wù)器返回的 ETag 值,,一般會和If-Modified-Since一起出現(xiàn)
Cookie 已有的Cookie
Referer 表示請求引用自哪個地址,,比如你從頁面A跳轉(zhuǎn)到頁面B時,值為頁面A的地址
Host 請求的主機和端口號

3.3 常見響應(yīng)Header

名稱 作用
Date 服務(wù)器的日期
Last-Modified 該資源最后被修改時間
Transfer-Encoding 取值為一般為chunked,,出現(xiàn)在Content-Length不能確定的情況下,,表示服務(wù)器不知道響應(yīng)版體的數(shù)據(jù)大小,一般同時還會出現(xiàn)Content-Encoding響應(yīng)頭
Set-Cookie 設(shè)置Cookie
Location 重定向到另一個URL,如輸入瀏覽器就輸入baidu.com回車,,會自動跳到 https://www.baidu.com ,,就是通過這個響應(yīng)頭控制的
Server 后臺服務(wù)器

4. 請求體的3種形式

根據(jù)應(yīng)用場景的不同,HTTP請求的請求體有三種不同的形式,。

第一種:

移動開發(fā)者常見的,,請求體是任意類型,服務(wù)器不會解析請求體,,請求體的處理需要自己解析,,如 POST JSON時候就是這類。


HTTP請求,形式一

第二種:

第二種和第三種都有固定格式的,,是服務(wù)器端開發(fā)人員最先了解到的兩種,。這里的格式要求就是URL中Query String的格式要求:多個鍵值對之間用&連接,鍵與值之前用=連接,,且只能用ASCII字符,,非ASCII字符需使用UrlEncode編碼。


HTTP請求,形式二

第二種示例

第三種:

第三種請求體的請求體被分成為多個部分,,文件上傳時會被使用,,這種格式最先應(yīng)該是被用于郵件傳輸中,每個字段/文件都被boundary(Content-Type中指定)分成單獨的段,,每段以-- 加 boundary開頭,,然后是該段的描述頭,,描述頭之后空一行接內(nèi)容,,請求結(jié)束的標(biāo)制為boundary后面加--,結(jié)構(gòu)見下圖:


HTTP請求,形式三

區(qū)分是否被當(dāng)成文件的關(guān)鍵是Content-Disposition是否包含filename,,因為文件有不同的類型,,所以還要使用Content-Type指示文件的類型,如果不知道是什么類型取值可以為application/octet-stream表示該文件是個二進制文件,,如果不是文件則Content-Type可以省略,。

下圖為一個帶有文件的上傳的請求體原文:


第三種請求體示例

注意:
第二、三種請求體需求配合特定的Content-Type請求頭,,如:
第二種配合Content-Type:application/x-www-form-urlencoded
第三種配合Content-Type: multipart/form-data; boundary={boundary} ,,
*上面的form-data也可以是mixedalternative,、digest,、parallel,但我只用到了form-data
如果兩者沒有相配合,,那么服務(wù)器不會解析請求體,,也就是說只會當(dāng)成第一種情況!

表單或者模擬表單 指的就是第二種和第三種(multipart/form-data)

5. 推薦調(diào)試工具

5.1 cURL

cURL 相當(dāng)強大命令行工具,基本上你知道的上層協(xié)議它都支持,,具體使用方法就自行發(fā)現(xiàn)了,,下圖為發(fā)起一個HTTP GET請求并打印請求和響應(yīng)的詳細(xì)內(nèi)容。


cURL截圖

5.2 bat

batastaxie(謝孟軍) 用Golang開發(fā)的類似cURL的命令行API調(diào)試工具,可以方便的打印出HTTP請求和響應(yīng),,還能高亮Header,、格式化JSON等功能,非常好用,,API調(diào)式神器,。


bat截圖

5.3 nc

nc 是 netcat 的簡寫,被稱為“網(wǎng)絡(luò)工具中的瑞士軍刀”,,不過我個人是把它當(dāng)成Socket用,,經(jīng)常使用它來打印各種請求,當(dāng)然它的作用可不只是這樣,,你也可以用它發(fā)起各式各樣的請求,,以前調(diào)式POP3也是用的它,只不過請求報文得自己寫,,上面有個圖“HTTP請求和響應(yīng)”就是用nc完成的,。

6. HTTP的組成圖示

感覺寫得有點亂,如果按下圖的結(jié)構(gòu)寫會不會更好呢?


HTTP報文組成.png

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多