根据“HTTP:权威指南”,使用
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?
一个必然的问题是:截至 2011 年,是否仍有(客户端、服务器、代理等)仍然只使用 HTTP/1.0 及其变体,或者大多数此类实体在 HTTP/1.1 上?
以下是我的工作假设:
1) HTTP/1.0 不再使用,b/c 那是“很多年前”
2)鉴于(1),不应该再使用keep-alive,但这纯粹是出于退化的原因(也就是说,某些技术没有费心将其删除,或者将其保留为巫毒代码等)
如果 (1) 不正确,并且 HTTP/1.0 仍在使用中,那么尽管有关于 HTTP 1.0-1.1 互操作的后续问题,但继续使用 keep-alive 似乎是合理的。
提前感谢您分享的任何见解!