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

HTTP是一个属于应用层的面向对象的协议,目前使用最为广泛的是HTTP1.1协议。当然,许多网站已经开始支持HTTP2.0,HTTP2复杂度高于HTTP1.1,我们先从HTTP1.1说起。

HTTP于1990 年提出,经过几年的使用与发展,得到不断地完善和扩展。主要有以下特点:

支持客户/服务器模式

ASCII码传输,人能直接读懂

参数灵活

*无连接/无状态(仅针对HTTP2以前的版本)

两个重要的网站

1.https://www.ietf.org/rfc/

主要存储RFC标准文档

2.https://zh.wikipedia.org/zh-cn/超文本传输协议

这个地址是关于HTTP的详细介绍

关于RFC

RFC:Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件。RFC文件是由Internet Society(ISOC)赞助发行。基本的互联网通信协议都有在RFC文件内详细说明。RFC文件还额外加入许多在标准内的论题,例如对于互联网新开发的协议及发展中所有的记录。因此几乎所有的互联网标准都有收录在RFC文件之中。(来自百度百科)

RFC2026将标准定义位4个阶段:因特网草案、建议标准、草案标准、因特网标准。更多的过程可以看看这些文件:

RFC 2223 "Instructions to RFC Authors"。

RFC 2026 "The Internet Standards Process -- Revision 3"。

浏览器输入某个网站地址并按下回车后发生了什么

假设我们在浏览器钟输入,这个网站的IP地址是11.22.33.44,当回车按下后计算机将做如下工作:
1.首先检查本地的各种缓存,比如DNS缓存、网站内容缓存等,如果有并且规则表明不需在服务器查找则直接展示内容出来
2.检查本地的hosts配置,如果输入的网站域名在本机有配置则加载本机配置的IP地址,比如我们直接配置了一条hosts如下:

11.22.33.44

那么计算机将会直接向11.22.33.44这个地址发送数据,而不会做DNS查询。
3.如果本机什么都没有则进行DNS查询,DNS和本机的hosts类似,即传入,然后DNS服务器返回给机器11.22.33.44,这个DNS服务器即我们在TCP/IP里面填写的服务器地址,它使用的是UDP传输。
4.使用IP建立连接,需要记住的是在互联网世界里面只有IP地址才是唯一地址,而网站域名只是一种别名,在连接服务器的过程中也是使用IP地址进行连接。
5.发送客户端请求的数据。
6.接收服务端响应的数据。
当然,实际情形下远不止以上几步这么简单,以上的每一步也可以拆分位许多小步,甚至形成一篇新的文章,但是基本流程就是这样。

怎么观察HTTP协议内容

如上文所说,HTTP协议是基于应用层的协议,那么计算机网络抓包过后的应用层数据即包含HTTP协议的内容,在windows里面我们可以采用大名鼎鼎的wireshark进行数据报文的抓取,然后筛选HTTP协议进行观察,也可以使用smartsniff这样小而精的软件专门抓取应用层内容,在Linux里面直接使用tcpdump进行抓取即可,然后将抓取的结果使用相关的软件打开观察,也可以导入到wireshark进行观察。一个实际抓取的较为典型的HTTP内容如下:

客户端请求: POST /devices HTTP/1.1 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 a=b&c=d 服务器响应: 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 协议详解 HTTP之URL

HTTP URL格式如下:

[":"port][abs_path]

host 表示合法的 Internet 主机域名或者 IP 地址
port 指定一个端口号,为空则使用缺省端口 80
abs_path 指定请求资源的 URI
举几个例子:

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

以上均符合HTTP URL的定义,我们可以简单地将其理解位我们在浏览器里面输入的网站域名

HTTP之请求 请求组成部分

http请求由三部分组成,分别是:请求行、消息报头、请求正文

关于请求行

请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,即

Method Request-URI HTTP-Version CRLF

针对Method有以下定义,并且必须使用以下定义的内容,如果填入其他的数据那么就不是标准的HTTP协议(虽然一部分服务器能自动纠错)

GET 请求获取 Request-URI 所标识的资源

POST 在 Request-URI 所标识的资源后附加新的数据

HEAD 请求获取由 Request-URI 所标识的资源的响应消息报头

PUT 请求服务器存储一个资源,并用 Request-URI 作为其标识

DELETE 请求服务器删除 Request-URI 所标识的资源

TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT 保留将来使用

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

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