请求不到返回体_浏览器之HTTP协议请求全过程

618496199ce0d4841fd759776f48a903.png

通过《浏览器之数据包传输》我们基本已经搞清了TCP、IP、UDP之前的关系,现在我们再来看一下HTTP协议。

计算机七层模型自下而上,IP属于传输层协议,TCP和UDP属于网络层协议,而最上层就是HTTP应用层协议,也就是说TCP是TCP/IP协议的调用者,HTTP协议是通过TCP/IP协议进行传输数据的。

7f41dd66b6c1d0ea876749cf46d16bb8.png

(数据包是由主机A的应用层HTTP协议创建,最后交由主机B应用层的HTTP协议解析)

整个HTTP请求构建过程如下:

1. 构建请求

浏览器构建请求行信息,包含了请求方法、请求 URI和 HTTP 协议版本。

GET /index.html HTTP1.1

2. 查找缓存

① DNS缓存:请求头中目标服务器HOST通常使用域名,想要获取服务器IP还需要经过一步DNS解析。DNS层层缓存可以帮助我们快速解析找到目标服务器。

② 浏览器缓存:我们常说“被浏览器缓存了,需要重刷一下页面”,指的是浏览器会将已请求过的资源文件在本地保存一份副本,当再次请求时若存在缓存文件,则不再执行下述步骤,直接返回缓存文件,这时候请求的返回状态码是304。

40892da2baad38e50c436e69e18656bb.png
浏览器缓存

3. 准备 IP 地址和端口

为TCP/IP协议请求准备IP地址(DNS解析-查找缓存阶段)与该进程端口号。

4.等待 TCP 队列

将请求事件插入至TCP队列,等待TCP队列轮训执行。浏览器同一时间最多可建立 6 个 TCP 连接,队列长度<=6时,即可建立连接。

5. 建立 TCP 连接

TCP连接进入准备阶段。与目标服务器三次握手,为后续数据传输做好准备。

6. 发送 HTTP 请求

HTTP请求包含三部分:请求行(构建请求阶段)、请求头、请求体。

52eea06a008c246026db61c7790c7d48.png
HTTP 请求

7.返回请求

服务器端接收到客户端的请求,将作出处理并返回相应数据,包含响应行、响应头、响应体。

4c867a2c69d34c2db5692d9dad691c76.png
HTTP响应数据格式

浏览器会根据响应数据作出不同的反应,例如不同的Content-Encoding(编码格式)对应使用不同的解码方式;Conent-type(数据类型)若为文件类型返回服务器文件,若为json返回XHR;状态码为200代表请求成功,404表示路径不存在等。

7.断开连接

若非长连接,TCP将断开与服务端的连接。持久连接可复用信道(keep-alive/webSocker),减少请求握手、挥手过程。

以上就是HTTP连接全过程,你可以根据下图查看、分析整个连接周期

34c9e22a9d9b1692f03bfd3b1f4c2505.png
HTTP全连接过程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebSocket协议是一种在单个TCP连接上进行全双工通信的协议。在WebSocket协议之前,浏览器与服务器之间的通信通常都是基于HTTP请求和响应的,也就是说,客户端向服务器发送请求,服务器返回响应,然后连接就被断开了。这种方式不够实时、效率也不高。 WebSocket协议通过在HTTP协议升级时使用"Upgrade"头来实现握手。握手成功后,连接就从HTTP协议升级到了WebSocket协议,从而在单个TCP连接上实现了全双工通信。 在Java中,可以使用Java API for WebSocket(JSR 356)来实现WebSocket协议。下面是基于Java实现WebSocket协议的步骤: 1. 创建自己的Endpoint类,继承javax.websocket.Endpoint类,实现onOpen、onMessage、onError和onClose方法。 2. 在onOpen方法中,创建Session对象,将它加入到某个集合中,以便在之后向客户端发送消息时使用。 3. 在onMessage方法中,处理客户端发送的消息,并向所有客户端发送消息。 4. 在onError方法中,处理异常。 5. 在onClose方法中,将Session从集合中移除。 6. 创建ServerEndpointConfig对象,并将Endpoint类和URI绑定在一起。 7. 创建WebSocket服务器,将ServerEndpointConfig对象传递给它。 8. 启动WebSocket服务器,等待客户端连接。 9. 客户端连接成功后,服务器会自动调用Endpoint的onOpen方法,表示连接已建立。 10. 客户端发送消息时,服务器会自动调用Endpoint的onMessage方法,处理消息。 11. 客户端关闭连接时,服务器会自动调用Endpoint的onClose方法,清除Session对象。 12. 服务器发生异常时,会自动调用Endpoint的onError方法,处理异常。 以上是基于Java实现WebSocket协议的大致步骤。需要注意的是,WebSocket协议中的数据是以帧的形式进行传输的,而不是HTTP协议中的请求和响应。因此,在编写WebSocket应用程序时,需要特别注意帧的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值