【问题标题】:incorrect http protocol shown by chrome developer tools?chrome开发者工具显示的http协议不正确?
【发布时间】:2017-02-12 23:58:46
【问题描述】:

我正在检查此站点使用的 http 协议 http://www.dlf.in/ Chrome 开发者工具显示它为 http/1.1,如下图所示。

但是,python 中的命令行工具is-http2 或 alpn 似乎表明 http/1.1 不可用。并且只有 http1 可用。这是怎么回事?

我在 python 中进行 ALPN 协商如下(openssl 版本:OpenSSL 1.0.2h 和 python 版本 3.5.1)

import ssl
import socket

port = 443
domain = 'www.dlf.in'

ctx = ssl.create_default_context()
ctx.set_alpn_protocols(['h2', 'spdy/3.1', 'spdy/3', 'spdy/2', 'http/1.1'])


conn = ctx.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM),
        server_hostname=domain)

conn.connect((domain, port))
print(conn.selected_alpn_protocol())

【问题讨论】:

    标签: python google-chrome http2 http-1.1 alpn


    【解决方案1】:

    此站点不支持 SSL(我尝试使用 curl https://www.dlf.in 并得到 HTTP 504 响应)

    Curl 是一个命令行浏览器,它也以明文方式(非 SSL)实现 HTTP/2,它具有upgrade 机制(使用--http2 标志)。使用该标志,我看到该网站不支持明确的 HTTP/2。 (有一个选项可以使用--http2-prior-knowledge 直接与HTTP/2 明文连接,无需升级机制,但它也不起作用。

    【讨论】:

      【解决方案2】:

      使用 telnetHTTPie 发送 HTTP 请求(1.0 和 1.1),Web 服务器响应:

      HTTP/1.1 200 正常

      我用 2.0 试了一下,结果:

      HTTP/1.1 505 HTTP 版本不支持

      【讨论】:

      • 您使用的确切命令是什么?我也不明白,为什么会这样,这就是我要问的问题
      • 使用 HTTPie:http www.dlf.in --print Hh 将打印您的请求和响应标头。
      • 使用 Telnet:telnet www.dlf.in 80,然后在您的 HTTP 请求和标头中输入或粘贴会得到响应。
      • 服务器响应http/1.1 响应,不知道为什么其他工具说http/1.1 不可用..
      • 是不是表示虽然header是http/1.1但实际的ALPN协商却无法协商http/1.1。
      【解决方案3】:

      该网站上没有 HTTPS。浏览器仅支持通过 HTTPS 的 HTTP/2,尽管理论上允许通过 HTTP。

      【讨论】:

      • 我想知道为什么chrome说它支持http/1.1
      • 我以为你在问为什么不是 HTTP2。上面的代码是针对 HTTPS (443) 的,所以不是这个站点上的代码(它只使用 HTTP - 端口 80)。它还说它由 IIS 而不是 Python 提供支持。而且 IIS 绝对支持 HTTP/1.1——就像现在所有的 Web 服务器一样。至于为什么你的工具没有说我不知道​​,因为你在这里给出的细节很少。目前真的非常不清楚你在问什么,似乎你根本不知道你的系统是如何设置的!
      猜你喜欢
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      相关资源
      最近更新 更多