建立TCP连接后,浏览器发起http请求
如果浏览器存储了该域名下的Cookies,那么会把Cookies放入HTTP请求头里发给服务器。
下面是Chrome发起的http请求报文头部信息:
GET / HTTP/1.1
Host: www.tiiit.cn
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Mobile Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
If-None-Match: W/"2d3-164cc2ce712"
If-Modified-Since: Tue, 24 Jul 2018 12:04:12 GMT
服务器端响应http请求,浏览器得到html代码
服务器端WEB程序接收到http请求以后,就开始处理该请求,处理之后就返回给浏览器html文件。
用Chrome浏览器看到的响应头信息:
HTTP/1.1 304 Not Modified
Server: nginx
Date: Sun, 21 Oct 2018 16:17:15 GMT
Connection: keep-alive
X-Powered-By: Express
Cache-Control: public, max-age=2592000
Last-Modified: Tue, 24 Jul 2018 12:04:12 GMT
ETag: W/"2d3-164cc2ce712"
浏览器解析html代码,并请求html代码中的资源
浏览器拿到index.html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载。
浏览器会使用多线程下载(每个浏览器的线程数不一样),这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序。
但是由于每个资源大小不一样,而浏览器又多线程请求资源,所以显示的顺序并不一定是代码里面的顺序。
浏览器在请求未过期的静态资源时,向服务器端发起一个http请求,询问自从上一次修改时间到现在有没有对资源进行修改。
如果服务器端返回304状态码,告诉浏览器服务器端没有修改,那么浏览器会直接读取本地的该资源的缓存文件。