输入url到页面加载都发生了什么事情?(一道软件测试面试题)
文章首发于公众号:软件测试er
输入url到页面加载都发生了什么事情?这是一道软件测试面试题,且相关知识其实还有多种问法:
Question 1请讲一下tcp三次握手
OK等你把这个记好了,下次面试:Question 2 tcp和http有什么区别??
Question 3 http和https区别?
Question 4 http请求方法?
Question 5常见的返回状态码有哪些?都是什么含义?。。。
一开始我也只是应付面试,去了解这些问题,但是发现自己并不能很好的理解。而在平时测试中需要定位前后端bug以及做接口测试都需要你对这些知识的了解。
所以我用这个问题梳理了一下这些知识,加深自己理解,希望也对你有帮助。
输入url到页面加载整体流程概况如下:
1、浏览器的地址栏输入URL并按下回车。
2、浏览器查找当前URL的DNS缓存记录。
3、DNS解析URL对应的IP。
4、根据IP建立TCP连接(三次握手)。
5、HTTP发起请求。
6、服务器处理请求,浏览器接收HTTP响应。
7、渲染页面,构建DOM树。
8、关闭TCP连接(四次挥手)。
再来详细描述一下
一、举例输入 https://www.baidu.com/这个域名由三部分组成:协议名、域名、端口号,这里端口是隐藏的默认端口号(HTTP默认端口80,HTTPS默认端口443。)。协议:https域名:www.baidu.com,用来定位网站的独一无二的名字/这个是根目录,也就是说,通过网站名找到服务器,然后在服务器存放网页的根目录
二、DNS域名解析域名解析的过程实际是将域名还原为IP地址的过程(这个过程可以大致了解一下就行):①查询浏览器缓存是否有当前URL的DNS缓存记录②操作系统缓存(如你在本地host文件中绑定了ip)③查询本地域名服务器(大约80%的域名解析到这里就完成了,这台服务器一般在你的城市的某个角落)以上还没完成域名解析,则本地域名服务器向其他根域名服务器继续发出查询...........
三、在获取到IP地址后建立tcp连接(三次握手通俗版)第一次握手:客户端要和服务端进行通信,首先要告知服务端一声,遂发出一个SYN=1的连接请求信号,”服务端哥哥,我想给你说说话”。第二次握手:当服务端接收到客户端的连接请求,此时要给客户端一个确认信息,”我知道了(ACK),我这边已经准备好了,你现在能连吗(SYN)”。第三次握手:当客户端收到了服务端的确认连接信息后,要礼貌的告知一下服务端,“好的,咱们开始联通吧(ACK)”。到此整个建立连接的过程已经结束,接下来就是双方你一句我一句甚至同时交流传递信息的过程了。
四、浏览器向服务器发送HTTP请求常见请求方法
序号 | 方法 | 描述 |
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
你可以点击F12查看请求方法
五、浏览器缓存
六、浏览器接收响应
服务器在收到浏览器发送的HTTP请求之后,会将收到的HTTP报文封装成HTTP的Request对象,并通过不同的Web服务器进行处理,处理完的结果以HTTP的Response对象返回,主要包括状态码,响应头,响应报文三个部分。
状态码主要包括以下部分
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。
看到响应码500等5xx类型,一般是在开发人员在操作,不要着急提bug哦
响应头主要由Cache-Control、 Connection、Date、Pragma等组成。响应体为服务器返回给浏览器的信息,主要由HTML,css,js,图片文件组成。如下
七、页面渲染
八、关闭TCP连接
四次挥手断开连接通俗版:
第一次挥手:双方交流的差不多了,此时客户端也已经结尾了,接下来要断开通信连接,所以告诉服务端“我说完了(FIN)”,此时自身形成等待结束连接的状态。
第二次挥手:服务端知道客户端已经没话说了,服务端此时还有两句话要给客户端说“我知道你说完了(ACK),我再说两句&*…%¥”…
第三次挥手:此时客户端洗耳恭听继续处于等待结束的状态,服务器端也说完了,自身此时处于等待关闭连接的状态,并对告诉客户端,“我说完了,咱们断了吧(FIN)”。
第四次挥手:客户端收知道服务端也说完了,也要告诉服务端一声(ACK),因为连接和断开要双方都按下关闭操作才能断开,客户端同时又为自己定义一个定时器,因为不知道刚才说的这句话能不能准确到达服务端(网络不稳定或者其他因素引起的网络原因)。所以默认时间定为两个通信的最大时间之和,超出这个时间就默认服务器端已经接收到了自己的确认信息,此时客户端就关闭自身连接,服务器端一旦接收到客户端发来的确定通知就立刻关闭服务器端的连接。 到此为止双方整个通信过程就此终结。 这里要声明一下:断开链接不一定就是客户端,谁都可以先发起断开指令,另外客户端和服务端是没有固定标准的,谁先发起请求谁就是客户端。
再来看一下这几个问题
Question 1请讲一下tcp三次握手
见上文
Question 2 tcp和http有什么区别??
http基于TCP连接HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP也就一定支持TCPTCP是传输层(底层通讯协议),定义的是数据传输和连接方式的规范HTTP是应用层协议,定义的是传输数据的内容的规范
Question 3 http和https区别?
1、http明文传输,连接无状态;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
2、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
3、http端口80,https端口443。HTTP:超文本传输协议。是一个客户端和服务器端请求和应答的标准,用于从服务器传输超文本到本地浏览器的传输协议。HTTPS:加了密的HTTP。HTTPS=HTTP+TLS或SSL,SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)
Question 4 http请求方法?见上文
Question 5常见的返回状态码有哪些?都是什么含义?见上文
文章首发于公众号:软件测试er