图解HTTP:持久连接和状态管理

持久连接节省通信量

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。每次的请求都会造成无谓的TCP连接建立和断开,增加通信量的开销。

Server: 必须要进行多次通信,好累......

为解决上述TCP连接的问题,HTTP/1.1和一部分的HTTP/1.0想出了持久连接(HTTP Persistent Connections)的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。

持久连接旨在建立1次TCP连接后进行多次请求和响应的交互。

Client: Web页面的打开速度变快了!
Server: 只要建立连接就能一次性发送请求的资源了

持久连接的好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。另外,减少开销的那部分时间,使HTTP请求和响应能够更早地结束,这样Web页面的显示速度也就相应提高了。

在HTTP/1.1中,所有的连接默认都是持久连接,但在HTTP/1,0内并未标准化。

持久连接使得多数请求以管道化(pipelining)方式发送成为可能。不需要响应,直接发送下一个请求。

Client: 不要等待就能直接发送下一个请求!

使用Cookie的状态管理

如果让服务器管理全部客户端状态则会成为负担。

Client: 让我一一记住你们,我的身体可吃不消啊

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文时加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

# 没有Cookie信息状态下的请求
Client: 保存Cookie
Server: 生成Cookie记住是向谁发送的

# 第2次以后(存有Cookie信息状态)的请求
Server: 啊,是刚才的那家伙

HTTP请求报文和响应报文的内容如下:

  • 请求报文(没有Cookie信息的状态)
GET /reader/ HTTP/1.1
Host: hackr.jp
  • 响应报文(服务器端生成Cookie信息)
HTTP/1.1 200 OK
Date: Fri, 7 Jun 2019 10:22:10 GMT
Server: Apache
<Set-Cookie: sid=134077140226724; path=/; expires=Fri, 13 Seq 2019 10:22:10 GMT>
Content-Type: text/plain; charset=UTF-
  • 请求报文(自动发送保存着的Cookie信息)
GET /image/ HTTP/1.1
Host: hackr.jp
Cookie: sid=134077140226724

(最近更新:2019年09月18日)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值