HTTP 是一种允许浏览器向服务器获取资源的协议
浏览器使用HTTP协议作为应用层协议,用来封装请求的文本信息。使用 TCP/IP作为传输层协议发送到网络上
从 浏览器输入 https://mp.csdn.net/ 发生了什么
一.构建请求
游览器构建请求行信息 GET /index.html HTTP1.1 ,构建好后,浏览器准备发起网络请求
二.查找缓存
在真正发起网络请求之前,浏览器会先在浏览器缓存中查询是否有要请求的文件。
浏览器缓存是一种在本地保存资源副本,以供下次请求时直接使用的技术
三.准备IP地址和端口
DNS把域名和IP地址做一一映射关系。这套域名映射为 IP 的系统就叫做“域名系统”,简称 DNS
在准备ip地址和端口的时候
1.首先会请求dns返回域名对应的IP。浏览器还提供dns数据缓存服务,如果域名已解析过,则会缓存。
2.然后会通过url获取端口号,如果未指明端口号,则默认为80端口
四.等待TCP队列
Chrome有个机制,同一个域名同时最多只能建立6个TCP连接(http/1.1)。
假如同一域名下同时有10个请求发生,那么其中4个请求进入排队等待状态,直至进行中的请求完成
五.建立TCP连接
通过三次握手与服务器建立连接
六.发送HTTP请求
建立TCP连接之后,HTTP就可以传输了
1.浏览器会向服务器发送请求行,包括了请求方法(get,post...)、请求url、HTTP协议版本号
2.发送请求行命令之后,还会以请求头发送一些浏览器的基础信息给服务器,比如操作系统,浏览器内核,cookie
3.如果请求行使用的是post请求方法,还需要将数据通过请求体发送给服务器
七.服务器处理HTTP请求
服务器处理结束会返回
1.响应行,包括了请求方法(get,post...)、状态码、HTTP协议版本号
2.响应头,包括了服务器生成返回数据的时间、返回的数据类型、Cookie
-----重定向操作:响应行的状态码为301或302,浏览器就会获取响应头的Location字段中的地址,并跳转到该地址
3.响应体(正文),包括了服务器返回给我们的数据
八.关闭TCP连接
通常服务器向客户端返回了请求数据之后,经过四次挥手阶段就会关闭TCP连接
如果浏览器或者服务器在响应头设置了 Connection:Keep-Alive,那么TCP连接不会被关闭,浏览器可以继续通过这个TCP连接发送http请求。节省了建立TCP连接的时间
为什么很多站点第二次打开会快很多?
浏览器缓存了一些耗时的数据
比如 DNS缓存,页面资源缓存
页面资源缓存
第一次访问页面:
当第七步服务器处理HTTP请求返回响应头的 Cache-control: Max-age = 2000, 则会把这次请求的资源缓存本地
第二次访问页面:
当进入第二步查找缓存时
如果没有缓存,继续往后走 建立TCP链接,发送请求.....
如果有缓存, 查看缓存是否过期
没有过期, 直接返回 缓存的的数据,不再进行后面的步骤
过期了, 建立tcp连接,发送http请求,服务器处理http请求,判断响应行状态码
响应行状态为304,表示内容未更新,可以直接使用缓存,并刷新缓存时间
不为304, 服务器返回响应头,响应体。关闭tcp连接