面试题整理学习(一):在浏览器中输入网址后的流程
来源:互联网 发布:淘宝开店不可用余额 编辑:程序博客网 时间:2024/06/05 18:15
本篇博客属于整理性质的文章,贴出主要的参考链接在浏览器中输入网址后都发生了什么,当你从浏览器地址栏中输入URL回车后发生了什么
输入网址后流程图
域名解析服务器是基于UDP协议实现的一个应用程序,通常通过监听53端口来获取客户端的域名解析请求。
DNS查找过程为:
浏览器缓存->系统缓存->路由器缓存->ISP DNS缓存->递归搜索
递归搜索过程为:从根域名服务器到顶级域名服务器到所查询的域名服务器。
2、域名服务器向客户端返回查询结果域名,从而完成域名到IP地址的转换。
3、客户端向web服务器发送HTTP请求
得到了域名对应的IP地址后客户端便可向真正的web服务器发生HTTP请求。通常一个HTTP请求格式如下:
GET http://www.cricode.com/ HTTP/1.1Host: www.cricode.comConnection: keep-aliveAccept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36Accept-Encoding: gzip,deflate,sdchAccept-Language: zh-CN,zh;q=0.8
如果浏览器存储了该域名下的cookie,那么cookie也会放入http请求中
HTTP请求是一个基于TCP协议之上的应用层协议——超文本传输协议。浏览器通过DNS获取到web服务器真的IP地址后,便向Web服务器发起TCP连接请求,通过TCP三次握手建立好连接后,浏览器便可以将HTTP请求数据通过发送给服务器了。
TCP三次握手连接:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
4、服务器给浏览器进行一个301永久重定向响应。
IP对应的服务器很可能是代理服务器,比如输入“http://baidu.com”,而不是“http://www.baidu.com”,这两个网址对应的是同一个网页,因此通过代理服务器的方式进行重定向响应,让这两个网址访问的同一个网页。 浏览器根据重定向地址再次进行HTTP请求。
5、发送响应数据给客户端
Web服务器通常通过监听80端口来获取客户端的HTTP请求。与客户端建立好TCP连接后,Web服务器开始接受客户端发来的数据,并通过HTTP解码,从接受到的网络数据中解析出请求的url信息以前其他诸如Accept-Encoding、Accept-Language等信息。
Web服务器根据HTTP请求头的信息,得到响应数据返回给客户端。一个典型的HTTP响应头数据报如下:
HTTP/1.1 200 OKDate: Fri, 24 Oct 2014 13:55:18 GMTServer: ApacheX-Powered-By: PHP/5.4.32Keep-Alive: timeout=5, max=10000Connection: Keep-AliveTransfer-Encoding: chunkedContent-Type: text/html; charset=UTF-8a0f6<!DOCTYPE HTML><html><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=10,IE=9,IE=8"><meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0"><title>快课网— 程序员的自我修养!</title><body class="home blog">。。。。。。。。。。。。。。</body></html>
至此,一个HTTP通信过程完成。web服务器会根据HTTP请求头中的Connection字段值决定是否关闭TCP链接通道,当Connection字段值为keep-alive时,web服务器不会立即关闭此连接。
6、浏览器响应过程
浏览器收到响应内容之后,生成主页框架,同时向服务端继续发送请求,请求的内容是主页里的一些资源,比如说图片、视频等。 对于静态的页面内容,浏览器通常进行缓存,对于动态的内容通常不缓存,缓存的时间也是有期限的。
浏览器向服务器发送异步请求,因为有些页面显示完成之后客户端仍需要与服务端保持联系。
整个过程结束之后,浏览器关闭TCP连接。
TCP四次挥手断开连接
假设Client端发起中断连接请求,即发送FIN报文。Server端接到FIN报文后,意思是说"Client端没有数据要发送了",但是如果Server端还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以Server端先发送ACK,告诉Client端"请求已经收到,但是Server端还没准备好,请继续等待消息"。这个时候Client端进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,告诉Client端"数据发送完成,准备好关闭连接"。Client端收到FIN报文后知道可以断开连接,但是怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。Server端收到ACK后断开连接。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,则自身关闭连接。
- 面试题整理学习(一):在浏览器中输入网址后的流程
- 在浏览器中输入 网址 后执行的全部过程
- 在浏览器中输入网址后都发生了什么
- 在浏览器中输入网址后都发生了什么
- 在浏览器中输入网址后都发生了什么
- 在浏览器中输入网址后都发生了什么
- 在浏览器中输入网址后都发生了什么
- 在浏览器中输入一个网址后,发生了什么?
- 描述在浏览器中输入一个网址后的发生的事情
- 在浏览器输入网址后回车执行的具体步骤
- 【学习笔记】浏览器输入一个网址回车后的全过程
- 在浏览器中输入网址按下回车后都发生了什么(整体概况)
- 在浏览器中输入网址按下回车后都发生了什么(深入分析)
- 在浏览器输入URL后的Web流程
- 在浏览器中输入网址按下回车后发生了什么?
- 面试题整理(一)
- asp.net 的那点事(1、当用户在浏览器地址栏输入了网址后,发生了什么?)
- 【一个经典的google面试题】在浏览器中输入Google.com并且按下回车之后发生了什么?
- 搜狗百度缠斗2年的专利大战 都说自己胜了?
- 二季度AMD处理器市场份额大涨,Ryzen立功
- 腾讯手机管家发起公益行动,撬动社会关注老人防骗
- 小程序---金额转换
- 设计模式——生成器(建造者)模式
- 面试题整理学习(一):在浏览器中输入网址后的流程
- 四款工具顺利实现Python与JavaScript间的代码转换
- HDU 2121-Ice_cream’s world II
- DMA方式
- 因违约行为 乐视体育被体奥动力切断比赛信号提供
- 丰田伙伴机器人HRS完成第一次家庭实验,实现护理援助
- 计算机界研究生可参加的竞赛
- C++学习之路(17)---命令行编译c++程序
- Linux工具---系统资源实时监测(网络,磁盘,内存,CPU等)