1、首先进行DNS域名解析,目的是找到对应的ip地址
DNS解析过程:
首先搜索浏览器自身的DNS缓存-----》没有找到则去本机的host文件中找-------》发起DNS递归查询,先查本地域名服务器———》根域名服务器———》com顶级域名服务器
直到最后本地域名服务器得到google的IP地址并把它缓存到本地,供下次查询使用。
2、得到IP地址后进行TCP三次握手建立连接
第一次握手:客户端向服务器发送带有SYN标志的数据包,然后客户端进入SYN_SEND 状态
第二次握手:服务端向客户端发送带有SYN+ACK标志的数据包,服务端进入SYN_RECV 状态
第三次握手:客户端向服务端发送带有ACK标志的数据包,客户端和服务器端都进入ESTABLISHED 状态
为什么需要三次握手:确保双方的发送和接收都正常
3、客户端向服务端发起HTTP请求,发送到服务器端口号为80的端口,如果是HTTPS请求则发送到443端口
HTTP和HTTPS区别:
1、HTTP是明文传输,HTTPS是具有安全性的SSL/TLS加密传输协议
SSL:安全套接层,在传输层与应用层之间对网络传输进行加密,SSL分为两层:
SSL记录协议:建立在TCP协议之上,负责数据加密、封装;
SSL握手协议:建立在SSL记录协议之上,负责传输前对通讯双方进行身份验证、协商加密算法、交换加密秘钥等。
HTTP请求格式由三部分组成:1请求行 2.请求头 3.request body。
(1)请求行分为三个部分:请求方法、URL和协议版本
1)请求方法:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。
GET&POST区别:
1、GET表示从服务器获取数据;POST可以向服务器发送数据和下载数据
2、GET会把参数写在URL里,不安全但高效;POST把数据写在request body,安全但不高效
3、GET对参数的长度有限制,而POST对参数长度没有限制
2)URL:统一资源定位符,组成:<协议>://<主机>:<端口>/<路径>
3)协议版本,常用的有HTTP/1.0和HTTP/1.1
HTTP/1.0和HTTP/1.1的区别:
- 连接方式 : HTTP 1.0 为短连接,HTTP 1.1 支持长连接。
- 状态响应码 : HTTP/1.1 中新加入了大量的状态码,比如说,
100 (Continue)
——临时响应,在请求大资源前的预热请求,206 (Partial Content)
——范围请求的标识码,409 (Conflict)
——请求与当前资源的规定冲突,410 (Gone)
——资源已被永久转移,而且没有任何已知的转发地址。 - 缓存处理 : 在 HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。
- 带宽优化及网络连接的使用 :HTTP1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
- Host 头处理 : HTTP/1.1 在请求头中加入了
Host
字段。
(2)请求头
4、服务器响应HTTP请求,调用相应的servlet并返回资源给客户端
http响应格式:状态行、响应头部、响应正文
状态行包括三部分:协议版本、状态码、状态码描述
状态代码为3位数字。
1xx:临时响应--表示请求已接收,继续处理。
2xx:成功--表示请求已被成功接收、理解、接受。
3xx:重定向--要完成请求必须进行更进一步的操作。
4xx:客户端错误--请求有语法错误或请求无法实现。
5xx:服务器端错误--服务器未能实现合法的请求。
响应正文就是html
5、浏览器对数据进行解析和渲染
6、通过四次挥手关闭TCP连接
第一次挥手:客户端向服务端发送带有FIN标志的数据包,并进入FIN-WAIT-1状态
第二次挥手:服务端向客户端发送带有ACK标志的数据包,服务端进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。
第三次挥手:服务端向客户端发送带有FIN标志的数据包,服务端进入 LAST-ACK 状态
第四次挥手:客户端向服务端发送带有ACK标志的数据包,并进入TIME-WAIT状态,服务端在收到 ACK标志的数据包后进入 CLOSE 状态。此时,如果客户端等待 2MSL 后依然没有收到回复,就证明服务端已正常关闭,随后,客户端也可以关闭连接了。
为什么要进行四次挥手:要保证双方都已经发送完数据,如果只进行三次挥手,服务端可能还有数据没发送完,所以必须双方都发送FIN标志的数据包才能保证双方都没有要发送的数据了。
为什么要等待2MSL再关闭连接:MSL是报文最长寿命,如果客户端发送完ACK后,2MSL内没有收到FIN报文则说明客户端已收到ACK,ACK没有发生报文丢失。
整个过程用到的协议有:
应用层协议:DNS/HTTP
传输层协议:TCP
网络层协议:IP/OSPF:动态路由协议,基于链路状态算法,考虑了链路的带宽、延迟等因素来选择最佳路径。/ARP地址解析协议:ARP 解决了 IP 地址转 MAC 地址
标签:HTTP,请求,URL,加载,ACK,客户端,数据包,服务端,页面 From: https://www.cnblogs.com/coooookie/p/17431881.html