HTTP请求过程

这篇文章简单描述一下HTTP请求的过程。


当我们在浏览器输入网址之后都发生了什么呢?

以访问http://www.jianshu.com/users/b1a98bffbff5/latest_articles这个网址为例。

大概的过程分为DNS域名解析 -> TCP三次握手 -> 发起HTTP请求 -> 服务器响应数据 -> 浏览器解析html代码并再次请求图片,CSS,JS等等 -> 再次得到数据之后渲染页面


一、DNS域名解析

域名对应到主机就是利用DNS这个服务来做到的。

如果找到了,就跳出这一步,如果没找到,就进行下一步,如果到了最后都没找到,就返回404

1.浏览器查询自身DNS缓存
2.查询操作系统DNS缓存
3.查询本机hosts文件
4.查询宽带运营商DNS服务器
5.宽带运营商迭代查询DNS服务器
顺序是 -> / -> com -> jianshu.com

DNS服务器会返回给浏览器一个IP地址,然后进行下一步


二、TCP三次握手

下面是tcp三次握手的过程


tcp三次握手

其实简单翻译过来就是:

客户:咱们俩聊聊。
服务器: 可以。
客户:好,那开聊吧!


三、发起HTTP请求

TCP三次握手之后已经确定可以可以连接了,然后浏览器就向服务器发起http请求:

HTTP请求头(Request Headers)部分:

GET /users/b1a98bffbff5/latest_articles HTTP/1.1
Host: www.jianshu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: //太长了,删除了
If-None-Match: W/"696182938902d4185e2b3398a08d787d"


四、服务器响应数据

响应头(Response Headers)部分:

HTTP/1.1 200 OK
Server: nginx
Connection: keep-alive
Date: Mon, 28 Nov 2016 03:41:45 GMT
Cache-Control: private, max-age=0
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Content-Encoding: gzip
Vary: Accept-Encoding
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff

响应体就是页面的HTML部分了,然后里面出现的有src之类的属性,浏览器会再次发起请求,服务器再次响应,浏览器得到数据之后就会渲染HTML了


浏览器再次请求其他文件

五、浏览器渲染页面

得到数据之后,浏览器按照自己的工作机制,来渲染页面。
这方面的知识可以看这个链接


每一个部分我准备再各写一篇文章详细描述一下这个过程,欢迎持续关注。


参考:

http://www.linux178.com/web/httprequest.html

你可能感兴趣的:(HTTP请求过程)