以浏览器输入www.baidu.com为例
1.域名解析/域名->IP地址
- 首先是去查找浏览器缓存,浏览器一般会保存你之前访问网站的DNS信息,保存的时间根据浏览器不同有所差异。
- 若浏览器缓存中没有,浏览器会做系统调用(gethostbyname)访问系统缓存中保存的DNS信息。Windows下你修改的hosts文件中的DNS在这时候就会起作用。
- 若系统缓存中没有,查询请求会发送至路由器,一般路由器中也有DNS缓存。
- 若还是没有,会去访问你在TCP/IPv4中填的DNS服务器地址(例如223.5.5.5 223.6.6.6)。若你没有手动修改DNS服务器地址,这个DNS请求会发送到ISP(互联网服务提供商)DNS服务器继续查询。这里所说的DNS服务器被叫为localDNS服务器。
-若ISP DNS服务器缓存中还是没有,则会递归查询DNS服务器,根域名服务器->顶级域名服务器.com->baidu域名服务器
若此时还未获取到IP地址则不存在。
2.建立TCP连接
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,端口号一般为80。三次握手在此不再赘述(此内还涉及ARP协议)。
3. 浏览器向web服务器发送http请求
建立连接后,浏览器向web服务器发送http请求。
GET 这个请求定义了要读取的URL: “http://www.baidu.com/”。 浏览器自身定义 (User-Agent 头), 和它希望接受什么类型的相应 (Accept and Accept-Encoding 头). Connection头要求服务器为了后边的请求不要关闭TCP连接。
4.web服务器响应
服务器接收到获取请求,然后处理并返回一个响应。
若成功为HTTP/1.1 200 OK
若不成功,则根据返回响应状态码进行相应的操作。
响应代码由三位数组成:
1XX:表示请求已收到,继续处理。范围100-101
2XX:表成功,服务器成功处理,范围为200-206
3XX:重定向,有些资源被移动了,web会告诉客户端新地址,此时浏览器会重新对新资源发起请求,范围为300-305
4XX:客户端错误状态码
5XX:web服务器自己内部错误
常见状态码:
200:请求成功
302:重定向
404:请求资源不存在
400:客户端请求有语法错误
401:请求未经授权
403:服务器收到请求,但拒绝提供服务
500:服务器内部错误
503:服务器当前不能处理客户端请求,过一段时间或许恢复正常。
5.web服务器返回HTML响应
若web服务器响应成功,会将网页内容附在Response的实体头当中。报头中Content-type为“text/html”报头让浏览器将该响应内容以HTML形式呈现。
6.浏览器显示HTML
浏览器并不需要等HTML全部获取完就会在页面中显示。
7.获取其他信息
浏览器会发送一个请求获取网络图片、css层叠样式表、js文件等内容