http的无状态无连接到底是什么含义

本文探讨了HTTP协议的无状态特性和连接机制的发展历程,包括早期无连接设计的原因及Keep-Alive机制如何提高效率。此外,还介绍了Cookie和Session这两种保持HTTP状态的技术。
转自:http://blog.youkuaiyun.com/bingjing12345/article/details/9819731

无连接:服务器处理完客户的请求,并收到客户的应答后,即断开连接。

早期这么做的原因是

 

HTTP协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,但每个客户端(即浏览器)与服务器之间交换数据的间歇性较大(即传输具有突发性、瞬时性),并且网页浏览的联想性、发散性导致两次传送的数据关联性很低,如果按照上面的方式则需要在服务器端开的进程和句柄数目都是不可接受的,象paranoid945所说的,大部分通道实际上会很空闲、无端占用资源。因此HTTP的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。

随着时间的推移,html页面变得复杂了,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次tcp连接就显得低效了。因此Keep-Alive被提出用来解决效率低的问题。

这样一来,客户端和服务器之间的HTTP连接就会被保持,不会断开(超过Keep-Alive规定的时间,意外断电等情况除外),当客户端发送另外一个请求时,就使用这条已经建立的连接。

 

 

无状态是指服务器不知道客户端是什么状态。

HTTP是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive没能改变这个结果。

然而,随着时间的推移,人们发现静态的HTML着实无聊而乏味,增加动态生成的内容才会令Web应用程序变得更加有用。于是乎,HTML的语法在不断膨胀,其中最重要的是增加了表单(Form);客户端也增加了诸如脚本处理、DOM处理等功能;对于服务器,则相应的出现了CGI(Common Gateway Interface)以处理包含表单提交在内的动态请求。

在这种客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些交互式应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP状态的技术就应运而生了,一个是Cookie,而另一个则是Session。

 下面是关于cookie和session的一篇文章,少年已经总结的相当好了,直接拿来~

 

http://www.blogjava.net/cheneyfree/archive/2007/05/26/120168.html
 
Cookie是客户端的存储空间,由浏览器来维持。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择,比如说重写URL和隐藏表单域。

转载于:https://www.cnblogs.com/byron0918/p/7747945.html

### HTTP协议中的“无连接”特性 HTTP协议的“无连接”特性指的是每次连接只处理一个请求。服务器处理完客户端的一个请求,并收到客户端的响应后,即断开连接。这种方式有利于节省传输时间。在早期的HTTP/1.0版本中,每个请求都需要建立一个新的TCP连接,这导致了在高并发场景下,服务器需要频繁地建立和断开连接,从而增加了网络延迟[^3]。 为了克服这一问题,HTTP/1.0引入了持久连接的概念。客户端可以在请求头中携带`Connection: Keep-Alive`字段,向服务器请求保持连接。如果服务器支持持久连接,它会在响应头中返回相同的字段,这样就可以在同一个TCP连接上发送多个请求和响应。这种方式减少了建立和断开连接的次数,提高了传输效率[^3]。 在HTTP/1.1版本中,持久连接成为了默认的连接方式。然而,持久连接也带来了新的问题,即所有的请求都是串行的,可能导致请求阻塞(Head-of-Line Blocking, HOLB)。为了解决这个问题,提出了pipelining技术,允许客户端在一个请求尚未完成的情况下发起另一个请求,服务端按顺序返回结果。 进一步的发展中,SPDY和HTTP/2引入了多路复用技术(multiplexing),允许多个请求和响应的传输完全混杂在一起进行,通过stream ID来区分不同的请求和响应。这种技术显著提升了性能,尤其是在高延迟的网络环境中[^3]。 尽管HTTP协议本身是无连接的,但可以通过底层的TCP协议来实现持久连接。HTTP协议借助于底层的TCP虚拟连接,HTTP协议本身无需维护连接状态。可以类比为两个人打电话,他们通过底层的电话线路交换信息,但通话结束后线路会被释放,下次通话时需要重新建立连接[^3]。 ### 示例代码 以下是一个简单的示例,展示了如何使用Python的`requests`库来发送带有`Connection: Keep-Alive`头的HTTP请求: ```python import requests url = 'http://example.com' headers = {'Connection': 'Keep-Alive'} response = requests.get(url, headers=headers) print(response.status_code) print(response.text) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值