HTTP/1.0仍在使用吗?

34

如果要编写一个HTTP服务器/客户端,支持HTTP/1.0协议有多重要?现在它还在使用吗?

编辑:我更关心的不是HTTP/1.0的有用性/重要性,而是现实世界中实际使用它进行非内部(例如单元测试属于内部使用)目的的软件数量(如浏览器、机器人、智能手机/傻瓜手机等)。


JWZ编写了一个简单的1.0客户端到1.1服务器代理,可能会对您有所帮助:http://www.jwz.org/hacks/http10proxy.pl - Ken
7个回答

23

到了2016年,你可能认为自1999年引入1.1以来它的显著性会进一步下降,所以已经过去了大约17年。

我检查了7,727,198行日志,看看我得到了多少百分比的HTTP/1.0HTTP/1.1

 Protocol    Counts      Percent
--------------------------------
HTTP/0.9            0     0.00%
HTTP/1.0    1,636,187    21.17%   (all)
HTTP/1.0       15,415     0.20%   (without the obvious robots)
HTTP/1.1    6,091,011    78.83%
HTTP/2              0     0.00%

据我所见,大多数HTTP/1.0请求都来自机器人。因此,我试图删除明显来自这些机器人的条目(即包含单词robot、bot、slurp等的代理)。

因此,今天还卡在HTTP/1.0上的终端用户数量非常有限(0.2%)。然而,如果您希望让机器人浏览您的网站,则可能需要/想要保持HTTP/1.0的运行。虽然它们将其连接标记为HTTP/1.0协议,但大多数仍将包括Host: ...头。

此外,从实现的角度来看,HTTP/1.0HTTP/1.1之间的差异非常模糊。大多数人都愉快地混合使用两者。我不会太担心仍然接受/处理HTTP/1.0请求。

在另一台服务器上,我开始看到像这样的HTTP/2.0请求(共2427个,而我看到34,161,268个HTTP/1.0HTTP/1.1请求,因此占0.007%):

PRI * HTTP/2.0

符合RFC标准的HTTP/2客户端不会盲目地发送该请求。浏览器和curl默认仅在服务器通过TLS广告h2 alpn时使用HTTP/2,而curl --http2没有TLS则使用RFC中指定的升级方法。那0.007%可能是nghttp客户端。 - Tronic
2
2019年,快速的日志grep显示出一些nginx代理(忘记了proxy_http_version配置),Mail.RU_Bot/2.0,Nimbostratus-Bot/v1.3.2以及一次使用HTTP/1.0的黑客攻击。所有相关的机器人都已经转向HTTP/1.1甚至是HTTP/2.0。换句话说,现在看来完全可以放弃对HTTP/1.0的支持了。 - Tronic

13

wget使用HTTP/1.0协议,尽管它支持一些HTTP/1.1的特性,比如Host:头部字段,这是访问任何虚拟主机必需的,但它仍然相对流行。


4
顺便提一下,curl 默认使用 HTTP 1.1。请参阅 http://curl.haxx.se/docs/manpage.html。 - mikemaccana
3
我正在使用GNU Wget 1.19.2,它似乎默认使用HTTP 1.1。维基百科上说HTTP 1.1是在1.13版本中添加的。 - Franklin Yu

10

相当一部分服务器会故意返回HTTP/1.0响应,因为一些(较老的)浏览器会为HTTP/1.0服务器提供比HTTP/1.1持久连接强制实施的2个连接限制更高的连接限制。

但是通常来说,大多数“HTTP/1.0”实现其实只是轻微受限的HTTP/1.1实现版本,而许多HTTP/1.1实现并不真正支持该版本的某些功能(尤其是流水线传输)。


7

每当我使用telnet连接服务器以验证连接或找出其不工作的原因时,我经常使用它:

$ telnet 192.168.1.1 80
GET / HTTP/1.0\r\n
\r\n

... 

因为进行1.0请求不需要我提供任何额外的头部信息。

14
请注意,这种方法不适用于任何虚拟主机;而做一个HTTP 1.1连接并不难,只需添加一个 Host: 头即可完成。 - Brian Campbell

7

HTTP/1.0在编写非常基本的客户端时非常重要,这些客户端不需要所有1.1的东西,例如流水线和其他1.1所需的复杂事物。发送请求、接收响应和断开连接非常容易编码。这可能对编写测试用例非常有用,以测试应用程序功能而不是HTTP协议实现。

许多移动浏览器和应用程序使用1.0,因为它们没有更复杂的1.1实现所需的空间或需求,并且非智能手机上的非3G连接的延迟问题完全抵消了1.1功能的任何好处。

还有很多代理将所有内容降级为1.0,无论客户端要求什么,还有IE的问题。

因此,简短的答案是,对于通用的HTTP服务器,1.0非常相关。


5
很多移动浏览器和应用程序,很多代理服务器,具体是哪些?它们的重要性是什么(用户数量)? - Pacerier

7

我为其他目的自己研究了这个问题:

“代理、某些移动客户端和配置为使用代理的IE使用HTTP/1.0。因此,1.0似乎仍然占据着网络流量的相当大一部分。 ... 是的,仍然有很多1.0客户端存在。”

来源(2009年7月):http://groups.google.com/group/erlang-programming/msg/08f6b72d5156ef74

:-(

更新(2011年3月):

如果你要构建一个客户端/服务器应用程序,请让客户端使用HTTP/1.1,并让服务器接受1.1和1.0两种协议。 在进行Web开发时,如果客户端尝试加载没有Host头信息的页面,这将会非常麻烦,因为我无法知道应该加载哪个站点 :-S 所以最好不要构建这样的客户端;-)


-2

在我看来,自从很久以前(包括模糊的棒棒糖移动设备)就没有真正的HTTP/1.0请求了。

我说真正的请求是因为MSIE仍然默认(假装)降级到HTTP/1.0(除非您在配置中签名),当您通过代理连接时(所有出站请求都被标记为HTTP/1.0)- 但它仍然包括HTTP/1.1特定的请求头,并尊重所有HTTP/1.1响应。

有趣的是,IIS则完全相反,忽略HTTP版本(虽然我还没有进行过太多实验,以查看是否适用于MSIE用户代理)。

因此,巧合的是,MSIE和IIS与代理一起使用比符合标准的工具更好。

C.


4
这并不完全正确-首先,IE7于2006年更改了默认设置;其次,WinINET发出的HTTP/1.0请求不会发送Accept-Encoding头部,如果你仍然返回压缩响应,WinINET将拒绝解压它。 - EricLaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接