美文网首页
如何轻松理解HTTP

如何轻松理解HTTP

作者: 小米Metre | 来源:发表于2019-07-21 14:49 被阅读0次
一、前言

HTTP充斥着整个互联网,你浏览一下网址,搜索一某个信息,购买一件商品,刷个微博、看段视频 等等,都有HTTP的身影。

作为一个开发者,你发送一段数据,获取一段信息,播放一段视频,显示一张图片,都离不了HTTP。

那HTTP到底是什么呢?应该怎样理解它呢?

二、HTTP是什么?

HTTP的全称:HyperText Transfer Protocol,中文叫超文本传输协议。

虽然名字中有个传输,但它跟传输没有半毛钱关系,它就是一种协议,和租房合约一样,是一种双方约定的规则。

有一定的格式,比如合同,要是甲乙双方、有要具体内容、时间等等。

HTTP也一样,由起始行(start line)、头部字段集合(header)和消息正文(entity)组成。

1、起始行:描述请求或者响应的基本信息
2、头部字段集合:以key-value的形式说明报文内容
3、消息正文:具体需要传输的数据,可以是文本、图片视频等二级制数据。

HTTP完整的格式如下:

图片来自极客时间

其中HTTP完整的头部格式如下:

完整的请求头 完整的响应头
三、在浏览器输入网址,再敲回车后,发生了什么?

先看个图:

Wireshark抓的网络包

这是通过Wireshark抓包工具,对模拟的本地请求抓取的日志。

先看前三行,发现都是TCP协议,这就是传说中的三次握手,52085是浏览器的默认端口,80是服务器的默认端口。经过 SYN、SYN/ACK、ACK 的三个包之后,浏览器与服务器建立起来了。

这时候,HTTP才开始工作,按照HTTP的协议规定,通过TCP发送了一个请求:

GET / HTTP/1.1
Host:127.0.0.1
Connection:keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Cookie: xlp_pagesize_=100; Idea-55a25aa0=bab4cd0b-9792-4161-8188-4fd6cb030c7b; pageSize="100"; Webstorm-ba996a58=6a96c9b6-2894-4b38-a1f1-d66d2d7fcb19
If-None-Match: "5cdde79b-2a2"
If-Modified-Since: Thu, 16 May 2019 22:43:39 GMT
##这里是一个换行
##下面是具体的报文内容,这里的内容空

也就是图中第四行。
这也就是HTTP协议中,起始行。

GET 表示获取资源的方式
/ 表示获取根目录下的默认文件
HTTP1.1表示我用的协议的版本。
Host:127.0.0.1If-Modified-Since: Thu, 16 May 2019 22:43:39 GMT 都是头部字段集合。

接着服务会跟浏览器回复一个包,也就是第5行,

接着服务会根据浏览器的要求,读取相关的文件,再拼成HTTP格式的报文,发回去,

这就是第6行的包:

HTTP/1.1 200 OK
Server: openresty/1.15.8.1
Date: Sun, 21 Jul 2019 06:26:05 GMT
Content-Type: text/html
Content-Length: 674
Last-Modified: Thu, 16 May 2019 22:43:39 GMT
Connection: keep-alive
ETag: "5cdde79b-2a2"
Accept-Ranges: bytes
##这里是一个换行
##下面是具体的报文内容

HTTP1.1表示我用的协议的版本。
200 表示状态码
OK 表示对状态码的描述
Server: openresty/1.15.8.1Accept-Ranges: bytes 都是头部字段集合。

再获取服务的资源包后,浏览器会回复服务器一个TCP的ACK包确认。也就是第七行。

浏览器接收到响应数据后,开始解析报文,调用排版引擎、JavaScript引擎等等开始出来,然后浏览器窗口才出现了我们看到的页面样子。

到此,整个流程完成!

相关文章

  • 如何轻松理解HTTP

    一、前言 HTTP充斥着整个互联网,你浏览一下网址,搜索一某个信息,购买一件商品,刷个微博、看段视频 等等,都有H...

  • 轻松理解HTTP基本知识

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年...

  • 如何轻松安装 Debian Linux 系统

    如何轻松安装 Debian Linux 系统[http://www.linuxeden.com/a/89974] ...

  • CRF

    条件随机场(CRF)的理解如何轻松愉快地理解条件随机场(CRF)?条件随机场(CRF)如何直观地理解条件随机场,并...

  • Http理解

    参考资料:刘望舒的blog玉刚说cache-control 木上有水的blog 一、Htt...

  • HTTP理解

    看HTTP协议之前首先要1.了解OSI七层网络模型(自己百度去)2.其次要知道TCP/IP协议为什么呢:因为首先要...

  • HTTP理解

    OSI 七层模型指什么 OSI是ISO制定的一个用于标准化计算机或通信系统间互联的标准体系。从底层到高层分别为 H...

  • 理解HTTP

    什么是HTTP HTTP(HyperText Transfer Protocol)超文本传输协议 维基百科 HTT...

  • 理解HTTP

    1.使用HTTP访问web应用 web使用一种http(超文本传输协议)的协议作为规范完成从客户端到服务器等一系列...

  • http理解

    深入理解httphttps://blog.csdn.net/weixin_38087538/article/det...

网友评论

      本文标题:如何轻松理解HTTP

      本文链接:https://www.haomeiwen.com/subject/oedmlctx.html