一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

常用物聯(lián)網(wǎng)應(yīng)用層協(xié)議(1)——先說HTTP協(xié)議

 小樣樣樣樣樣樣 2022-10-13 發(fā)布于北京

概念

簡(jiǎn)介

HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,目前使用最為廣泛的是HTTP1.1協(xié)議。當(dāng)然,許多網(wǎng)站已經(jīng)開始支持HTTP2.0,HTTP2復(fù)雜度高于HTTP1.1,我們先從HTTP1.1說起。

HTTP于1990 年提出,經(jīng)過幾年的使用與發(fā)展,得到不斷地完善和擴(kuò)展。主要有以下特點(diǎn):

  • 支持客戶/服務(wù)器模式
  • ASCII碼傳輸,人能直接讀懂
  • 參數(shù)靈活
  • *無連接/無狀態(tài)(僅針對(duì)HTTP2以前的版本)

兩個(gè)重要的網(wǎng)站

1.https://www./rfc/

主要存儲(chǔ)RFC標(biāo)準(zhǔn)文檔

2.https://zh./zh-cn/超文本傳輸協(xié)議

這個(gè)地址是關(guān)于HTTP的詳細(xì)介紹

關(guān)于RFC

RFC:Request For Comments(RFC),是一系列以編號(hào)排定的文件。文件收集了有關(guān)互聯(lián)網(wǎng)相關(guān)信息,以及UNIX和互聯(lián)網(wǎng)社區(qū)的軟件文件。RFC文件是由Internet Society(ISOC)贊助發(fā)行?;镜幕ヂ?lián)網(wǎng)通信協(xié)議都有在RFC文件內(nèi)詳細(xì)說明。RFC文件還額外加入許多在標(biāo)準(zhǔn)內(nèi)的論題,例如對(duì)于互聯(lián)網(wǎng)新開發(fā)的協(xié)議及發(fā)展中所有的記錄。因此幾乎所有的互聯(lián)網(wǎng)標(biāo)準(zhǔn)都有收錄在RFC文件之中。(來自百度百科)

RFC2026將標(biāo)準(zhǔn)定義位4個(gè)階段:因特網(wǎng)草案、建議標(biāo)準(zhǔn)、草案標(biāo)準(zhǔn)、因特網(wǎng)標(biāo)準(zhǔn)。更多的過程可以看看這些文件:

  • RFC 2223 "Instructions to RFC Authors"。
  • RFC 2026 "The Internet Standards Process -- Revision 3"。

瀏覽器輸入某個(gè)網(wǎng)站地址并按下回車后發(fā)生了什么

假設(shè)我們?cè)跒g覽器鐘輸入www.,這個(gè)網(wǎng)站的IP地址是11.22.33.44,當(dāng)回車按下后計(jì)算機(jī)將做如下工作:
1.首先檢查本地的各種緩存,比如DNS緩存、網(wǎng)站內(nèi)容緩存等,如果有并且規(guī)則表明不需在服務(wù)器查找則直接展示內(nèi)容出來
2.檢查本地的hosts配置,如果輸入的網(wǎng)站域名在本機(jī)有配置則加載本機(jī)配置的IP地址,比如我們直接配置了一條hosts如下:

11.22.33.44 www.

那么計(jì)算機(jī)將會(huì)直接向11.22.33.44這個(gè)地址發(fā)送數(shù)據(jù),而不會(huì)做DNS查詢。
3.如果本機(jī)什么都沒有則進(jìn)行DNS查詢,DNS和本機(jī)的hosts類似,即傳入www.,然后DNS服務(wù)器返回給機(jī)器11.22.33.44,這個(gè)DNS服務(wù)器即我們?cè)赥CP/IP里面填寫的服務(wù)器地址,它使用的是UDP傳輸。
4.使用IP建立連接,需要記住的是在互聯(lián)網(wǎng)世界里面只有IP地址才是唯一地址,而網(wǎng)站域名只是一種別名,在連接服務(wù)器的過程中也是使用IP地址進(jìn)行連接。
5.發(fā)送客戶端請(qǐng)求的數(shù)據(jù)。
6.接收服務(wù)端響應(yīng)的數(shù)據(jù)。
當(dāng)然,實(shí)際情形下遠(yuǎn)不止以上幾步這么簡(jiǎn)單,以上的每一步也可以拆分位許多小步,甚至形成一篇新的文章,但是基本流程就是這樣。

怎么觀察HTTP協(xié)議內(nèi)容

如上文所說,HTTP協(xié)議是基于應(yīng)用層的協(xié)議,那么計(jì)算機(jī)網(wǎng)絡(luò)抓包過后的應(yīng)用層數(shù)據(jù)即包含HTTP協(xié)議的內(nèi)容,在windows里面我們可以采用大名鼎鼎的wireshark進(jìn)行數(shù)據(jù)報(bào)文的抓取,然后篩選HTTP協(xié)議進(jìn)行觀察,也可以使用smartsniff這樣小而精的軟件專門抓取應(yīng)用層內(nèi)容,在Linux里面直接使用tcpdump進(jìn)行抓取即可,然后將抓取的結(jié)果使用相關(guān)的軟件打開觀察,也可以導(dǎo)入到wireshark進(jìn)行觀察。一個(gè)實(shí)際抓取的較為典型的HTTP內(nèi)容如下:

客戶端請(qǐng)求:
POST /devices HTTP/1.1
Host: www.
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9

a=b&c=d

服務(wù)器響應(yīng):
HTTP/1.1 200 OK
Date: Tue, 27 Oct 2020 02:13:39 GMT
Content-Type: application/json
Content-Length: 5
Connection: keep-alive
Server: nginx
Pragma: no-cache

Hello

協(xié)議詳解

HTTP之URL

HTTP URL格式如下:

http://host[":"port][abs_path]

host 表示合法的 Internet 主機(jī)域名或者 IP 地址
port 指定一個(gè)端口號(hào),為空則使用缺省端口 80
abs_path 指定請(qǐng)求資源的 URI
舉幾個(gè)例子:

http://www.
http://www.:8080
http://www./devices
http://www.:8080/devices/data
http://11.22.33.44/devices/data
http://11.22.33.44:8080/devices/data

以上均符合HTTP URL的定義,我們可以簡(jiǎn)單地將其理解位我們?cè)跒g覽器里面輸入的網(wǎng)站域名

HTTP之請(qǐng)求

請(qǐng)求組成部分

http請(qǐng)求由三部分組成,分別是:請(qǐng)求行、消息報(bào)頭、請(qǐng)求正文

關(guān)于請(qǐng)求行

請(qǐng)求行以一個(gè)方法符號(hào)開頭,以空格分開,后面跟著請(qǐng)求的URI和協(xié)議的版本,即

Method Request-URI HTTP-Version CRLF

針對(duì)Method有以下定義,并且必須使用以下定義的內(nèi)容,如果填入其他的數(shù)據(jù)那么就不是標(biāo)準(zhǔn)的HTTP協(xié)議(雖然一部分服務(wù)器能自動(dòng)糾錯(cuò))

  • GET 請(qǐng)求獲取 Request-URI 所標(biāo)識(shí)的資源
  • POST 在 Request-URI 所標(biāo)識(shí)的資源后附加新的數(shù)據(jù)
  • HEAD 請(qǐng)求獲取由 Request-URI 所標(biāo)識(shí)的資源的響應(yīng)消息報(bào)頭
  • PUT 請(qǐng)求服務(wù)器存儲(chǔ)一個(gè)資源,并用 Request-URI 作為其標(biāo)識(shí)
  • DELETE 請(qǐng)求服務(wù)器刪除 Request-URI 所標(biāo)識(shí)的資源
  • TRACE 請(qǐng)求服務(wù)器回送收到的請(qǐng)求信息,主要用于測(cè)試或診斷
  • CONNECT 保留將來使用
  • OPTIONS 請(qǐng)求查詢服務(wù)器的性能,或者查詢與資源相關(guān)的選項(xiàng)和需求
    常用的Method只有GET以及POST,如果有涉及到協(xié)議轉(zhuǎn)換,比如HTTP1轉(zhuǎn)換到HTTP2、HTTP轉(zhuǎn)換到HTTPS或者轉(zhuǎn)換為websocket,可能回使用OPTIONS方法先詢問。至于其他的方法通常不怎么用,值得注意的是標(biāo)準(zhǔn)的restful接口業(yè)務(wù)會(huì)在GET和POST基礎(chǔ)上還有PUT和DELETE方法。

針對(duì)Request-URI則是我們?cè)跒g覽器輸入的域名和端后后面的內(nèi)容,比如/devices,如果是根目錄,比如www.,實(shí)際上Request-URI是“/”,即默認(rèn)都是“/”開始,這樣的目錄結(jié)構(gòu)和Linux的目錄結(jié)構(gòu)類似,而實(shí)際上也是來源于它。

HTTP-Version我們常用的是HTTP/1.1,當(dāng)然,現(xiàn)在也有部分網(wǎng)站使用HTTP/2

第一節(jié)的客戶端請(qǐng)求里面第一行則是請(qǐng)求行的內(nèi)容,具體如下:

POST /devices HTTP/1.1

關(guān)于消息報(bào)頭

在第一節(jié)關(guān)于HTTP抓包的請(qǐng)求實(shí)例中,除了a=b&c=d這一個(gè)內(nèi)容外其余的全是消息報(bào)頭,即

Host: www.
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9

這里面也是HTTP核心東西之一,它以key: value的形式成對(duì)出現(xiàn),除了上述內(nèi)容外,我們常說的cookie、session等通常情況下也是放在消息報(bào)頭中進(jìn)行傳輸

我們也常說HTTP Header,直接將消息報(bào)頭理解為HEADER里面的所有東西也是沒什么問題的。

關(guān)于請(qǐng)求正文

上述例子中,“a=b&c=d”即是請(qǐng)求正文,請(qǐng)求正文通常情況下有按照form形式、按照json形式進(jìn)行傳輸,但是也可以自由發(fā)揮填充任意東西,只要服務(wù)端能去解析即可。
關(guān)于form形式除了最簡(jiǎn)單的a=b&c=d外還有mutiform等形式,也是在請(qǐng)求頭中進(jìn)行定義,然后請(qǐng)求正文使用相應(yīng)的格式進(jìn)行數(shù)據(jù)填充。

具體請(qǐng)求例子

具體的例子里面我們將以最小的報(bào)文頭進(jìn)行展示而展示無關(guān)的信息

  • 打開www.網(wǎng)站首頁
GET / HTTP/1.1
Host: www.
  • 以GET形式傳入username為haha以及password為hehe到www.網(wǎng)站的登錄接口(假設(shè)為/login)
GET /login?username=haha&password=hehe HTTP/1.1
Host: www.
  • 以POST標(biāo)準(zhǔn)FORM形式傳入username為haha以及password為hehe到www.網(wǎng)站的登錄接口(假設(shè)為/login)
POST /login HTTP/1.1
Host: www.

username=haha&password=hehe
  • 以POST標(biāo)準(zhǔn)json形式傳入username為haha以及password為hehe到www.網(wǎng)站的登錄接口(假設(shè)為/login)
POST /login HTTP/1.1
Host: www.

{"username":"haha","password":"hehe"}
  • 查詢www.網(wǎng)站的設(shè)備列表,并帶上cookie為123456(假設(shè)為/devicelist)
GET /devicelist HTTP/1.1
Host: www.
Cookie: 123456
  • 查詢www.網(wǎng)站的設(shè)備列表,并帶上cookie為123456,要求服務(wù)端保持連接(假設(shè)為/devicelist)
GET /devicelist HTTP/1.1
Host: www.
Cookie: 123456
Connection: keep-alive

總結(jié)和后續(xù)計(jì)劃

本文主要講解了HTTP一些基本概念以及請(qǐng)求相關(guān)的報(bào)文。

接下來第二篇將講解HTTP響應(yīng)、HTTP2簡(jiǎn)介以及當(dāng)下主流的HTTPS簡(jiǎn)單交互過程,最后將模擬請(qǐng)求一次網(wǎng)站并進(jìn)行抓包演示。

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    成人区人妻精品一区二区三区| 亚洲欧美日本成人在线| 国产亚洲精品一二三区| 国产女性精品一区二区三区| av一区二区三区天堂| 99国产一区在线播放| 国产精品午夜一区二区三区 | 国产精品国产亚洲看不卡| 欧美一区日韩二区亚洲三区| 丰满人妻一二区二区三区av| 丝袜人妻夜夜爽一区二区三区| 欧美日韩国产午夜福利| 国产精品一区二区不卡中文| 熟女免费视频一区二区| 亚洲中文字幕在线综合视频| 国产午夜精品亚洲精品国产| 欧美日韩中国性生活视频| 日韩国产亚洲欧美另类| 午夜福利在线观看免费| 国内精品偷拍视频久久| 在线懂色一区二区三区精品| 国产不卡一区二区四区| 在线观看欧美视频一区| 亚洲高清欧美中文字幕| 日韩精品第一区二区三区| 青青操视频在线观看国产| 在线免费观看一二区视频 | 国产亚洲欧美一区二区| 国产成人免费激情视频| 色婷婷人妻av毛片一区二区三区| 久热99中文字幕视频在线 | 在线一区二区免费的视频| 人妻久久这里只有精品| 99免费人成看国产片| 男人和女人黄 色大片| 女人精品内射国产99| 中文字幕免费观看亚洲视频| 黄色激情视频中文字幕| 精品一区二区三区乱码中文| 一级片二级片欧美日韩| 久久永久免费一区二区|