桥下红药

机器应该工作、人类应该思考

关于Http协议

总分类 0 评

Http协议,先从表面文字理解,这是一个协议,协议可以粗略的理解成A、B双方约定好的规矩和标准,好比很多年前Js标准还没出来,各大浏览器都来一套各自的标准,结果就很坑爹了,道理一样Http协议就是必须双方制定、遵守一个标准的通信方式吧。

假设世界上现在没有Http协议,我就想发明一种社交方式,我在浏览器上输入 xxx.com/article/xxx 当我把这段网址告诉你的时候,你需要根据逻辑给我内容(新闻、图片、帖子等等等),前提是现在Http协议还木有诞生,我们想要完成这个通信过程需要借助TCP通信传递数据,我们定制规则封装一下TCP命名叫做Http协议,传递数据可以自定义数据格式,这个自定义的标准格式就是 Http 的结构了,如 请求头、Body、Host等,当所有人都遵守这个规则后,第一代网络冲浪,浏览网页就诞生了,想想都有些激动!感觉自己生错了年代。

瞜一眼这个烂大街的结构图

先不用管Https,道理是一样的。Http建立在TCP的基础上,也可以说封装了TCP。接着继续说Http协议,核心东西还是它包装了TCP然后定制了哪些属于自己的规则呢?

举栗子

GET /562f25980001b1b106000338.jpg HTTP/1.1

Host img.xxx.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/,/*;q=0.8
Referer http://www.xxx.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8
Connection: Keep-Alive

一个Get请求大约是这样的,接下来随便解释下这些定义的东西是什么,可以整体看成个List数据结构,每行里面又是个前面是Key,后面是Value。当然第一行除外。

  1. 第一行告诉服务器方,说我现在的请求是Get类型的,我想访问路径是/562f25980001b1b106000338.jpg 这样的一个资源,使用的协议是 HTTP/1.1版本的,你快用 HTTP/1.1版本的协议规则把这我想要的资源给我,服务器方接收到这个第一行的字符串解析完就知道这个意思了,就去找这个资源返回给客户端。

  2. 底下这些就全部都是一些其他规则了,Host是服务器(目标)地址,浏览器自动给加的,就是把你URL前面截取出来添加的,DNS解析应该也是根据这个来的。User-Agent代表当前请求的浏览器标识,同理这些都叫请求头(Header),Connection 是告诉服务器方你返回我结果后先别急着关掉TCP通道,我短时间内还有许多请求要来,来回创建关闭TCP多浪费时间,直接复用吧! 这些都是可以更改的。Cookie 也是其中之一。

举一反三

  • 那么发送请求是这种规则,服务器响应我们也是这种规则,响应数据里面有个叫Body的东西,它就是服务器给你的结果了。(Response结构不多解释了)。接着浏览器收到结果了发现是个Html就直接解析展示,文件等资源就是下载!(实际要复杂,比如断点续传等)

上一篇

发表评论