为什么Connection仍然在http标头中指定了keep-alive(是不是已弃用)?

时间:2011-08-11 21:30:28

标签: http keep-alive http-1.1 http-1.0

根据“HTTP:The Definitive Guide”,使用

Connection: keep-alive
在HTTP / 1.1中不推荐使用

指定持久连接,因为HTTP / 1.1指定默认情况下连接是持久的,必须通过发送手动关闭

Connection: close


因此,我的简单假设是“连接:保持活着”不应该再被使用了。然而,它仍然看起来还活着。例如,在以下查询中返回keep-alive:

curl -I https://foursquare.com

HTTP/1.1 200 OK
Server: nginx/0.8.52
Date: Thu, 11 Aug 2011 21:15:45 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Expires: Thu, 11 Aug 2011 21:15:45 UTC
Set-Cookie: XSESSIONID=w19~kqtn4bpqmfq51p8qolstpk6ti;Path=/;Secure;HttpOnly
Set-Cookie: LOCATION=49.25::-123.13330078125::Hockeytown::CA;Path=/;Secure
Set-Cookie: bbhive=OQ32XATE0OQAEVCY0IVSWUDPQ1A2GT
Content-Length: 38815
Cache-Control: no-cache, private, no-store
Pragma: no-cache

我的问题是:为什么在HTTP标头中仍然指定了Connection:keep-alive?

一个必然的问题是:是否还有(客户端,服务器,代理等)仍然只会说HTTP / 1.0及其变体,或者截至2011年是HTTP / 1.1上的大多数此类实体?

以下是我的工作假设:

1)HTTP / 1.0不再使用,b / c是“很多年前”

2)给定(1),keep-alive 不应该再次使用,但 纯粹是出于遗传原因(也就是说,某些技术没有受到打扰)删除它,或保持它作为伏都教代码等。)

如果(1)不正确,并且HTTP / 1.0仍在使用中,那么尽管HTTP 1.0-1.1互操作上有后续问题,但确保使用keep-alive似乎是合理的。

提前感谢您分享的任何见解!

1 个答案:

答案 0 :(得分:14)

HTTP / 1.0没有像Connection那样的标题,但HTTP / 1.0和HTTP / 1.1有很多不同的实现。

所以Connection: keep-alive使用'以防万一'