HTTP 计算机网络

无状态协议

HTTP是一个无状态协议,客户端向服务端发送请求,服务端相应客户端的请求而不存储客户端的任何信息。

非持续连接和持续连接

非持续连接和持续连接指在多次请求中使用的是不同的tcp连接还是同一个的tcp连接。HTTP既可以使用非持续连接也可以使用持续连接,默认情况下为持续连接。

建立tcp连接时需要经过三次握手,客户端先发送一个tcp报文,服务端确认并响应,最后客户端返回确认。客户端在返回确认时同时发送请求报文,服务器再返回信息,所以总的相应时间是两个RTT(Round Trip Time)加上html传输的时间。

非持续连接的缺点:

  1. 对于每个tcp连接,客户端和服务器都要分配tcp缓冲区保持tcp变量,会给服务器带来很大的负担。
  2. 每次请求响应都需要经过两个RTT,有一个RTT用于建立tcp连接,使时延增加。

报文格式

  1. HTTP请求报文
    图片替换文本图片替换文本

  2. HTTP响应报文
    在这里插入图片描述

cookie

HTTP是无状态的,但是很多功能的实现都需要记录用户的状态,如记录用户的登录状态,判断是哪一个用户,cookie就是为了解决这个问题的。

步骤如下

  • 当客户端首次向服务器发送请求时,服务器会生成一个唯一的 sessionid(会话标识符),将它存储在服务器端,并将该 sessionid 通过响应的 Cookie 设置发送回客户端。这个 sessionid 在后续的请求中将充当用户与会话的标识。
  • 客户端浏览器会将收到的 sessionid 存储在 Cookie 中。
  • 当客户端再次向服务器发送请求时,浏览器会自动在请求头中携带该 sessionid
  • 服务器接收到请求后,可以通过 request.getSession() 方法获取与该 sessionid 相关联的会话对象。这个会话对象包含了用户的会话数据,例如登录状态、购物车内容等。
  • 服务器可以使用会话对象来存储和检索与用户相关的数据,以便在多个请求之间共享和维护用户的状态。

代理服务器

代服务器即使客户也是服务器,其中存储着最近请求过对象的副本。当客户端发送请求时,先到代理服务器中查找,如有则直接返回给客户端;若没有则代理服务器向资源所在服务器发送请求,存储后再返回给客户端。

优点:

  1. 代理服务器一般离客户端更近,减少了响应时间。
  2. 向源服务器的请求减少了,总整体上看减少了整个因特网中的web流量,从而改善了所有应用的性能。

条件GET

使用代理服务器也存在问题,请求的资源在源服务器上可能已经发生了更改而代理服务器不知道,将旧的信息返回给了客户端。HTTP有一种机制叫条件GET,可以很好地解决这个问题。

条件GET请求报文要求:

  1. 请求方法为GET
  2. 首部行中包含If-Modified-Since字段

机制:
当用户请求的资源在代理服务器上没有时,代理服务器向源服务器发送请求,源服务器响应报文的首部行中包含字段Last-Modify,表示最后一次修改的时间。

当用户请求的资源在代理服务器上有时,代理服务器向源服务器发送条件GET请求报文,将If-Modified-Since字段值设置为上一次源服务器响应报文的首部行中Last-Modify字段值,若资源在这一段时间未修改,则源服务器返回304 Not Modiied信息。

虽然不管是否有资源代理服务器都会向源服务器发送请求,但是当代理服务器有资源时,源服务器只需要返回状态行和首部行,而不需要返回实体体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值