常用物联网应用层协议(1)——先说HTTP协议 (2)

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
常用的Method只有GET以及POST,如果有涉及到协议转换,比如HTTP1转换到HTTP2、HTTP转换到HTTPS或者转换为websocket,可能回使用OPTIONS方法先询问。至于其他的方法通常不怎么用,值得注意的是标准的restful接口业务会在GET和POST基础上还有PUT和DELETE方法。

针对Request-URI则是我们在浏览器输入的域名和端后后面的内容,比如/devices,如果是根目录,比如,实际上Request-URI是“/”,即默认都是“/”开始,这样的目录结构和Linux的目录结构类似,而实际上也是来源于它。

HTTP-Version我们常用的是HTTP/1.1,当然,现在也有部分网站使用HTTP/2

第一节的客户端请求里面第一行则是请求行的内容,具体如下:

POST /devices HTTP/1.1 关于消息报头

在第一节关于HTTP抓包的请求实例中,除了a=b&c=d这一个内容外其余的全是消息报头,即

Host: 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的形式成对出现,除了上述内容外,我们常说的cookie、session等通常情况下也是放在消息报头中进行传输

我们也常说HTTP Header,直接将消息报头理解为HEADER里面的所有东西也是没什么问题的。

关于请求正文

上述例子中,“a=b&c=d”即是请求正文,请求正文通常情况下有按照form形式、按照json形式进行传输,但是也可以自由发挥填充任意东西,只要服务端能去解析即可。
关于form形式除了最简单的a=b&c=d外还有mutiform等形式,也是在请求头中进行定义,然后请求正文使用相应的格式进行数据填充。

具体请求例子

具体的例子里面我们将以最小的报文头进行展示而展示无关的信息

打开网站首页

GET / HTTP/1.1 Host:

以GET形式传入username为haha以及password为hehe到网站的登录接口(假设为/login)

GET /login?username=haha&password=hehe HTTP/1.1 Host:

以POST标准FORM形式传入username为haha以及password为hehe到网站的登录接口(假设为/login)

POST /login HTTP/1.1 Host: username=haha&password=hehe

以POST标准json形式传入username为haha以及password为hehe到网站的登录接口(假设为/login)

POST /login HTTP/1.1 Host: {"username":"haha","password":"hehe"}

查询网站的设备列表,并带上cookie为123456(假设为/devicelist)

GET /devicelist HTTP/1.1 Host: Cookie: 123456

查询网站的设备列表,并带上cookie为123456,要求服务端保持连接(假设为/devicelist)

GET /devicelist HTTP/1.1 Host: Cookie: 123456 Connection: keep-alive 总结和后续计划

本文主要讲解了HTTP一些基本概念以及请求相关的报文。

接下来第二篇将讲解HTTP响应、HTTP2简介以及当下主流的HTTPS简单交互过程,最后将模拟请求一次网站并进行抓包演示。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspyds.html