8

在别人的代码中,我遇到了 cURL 的这个选项设置:

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);

PHP 文档说,默认情况下,此选项设置为 CURL_HTTP_VERSION_NONE,让 cURL 决定使用哪个 HTTP 版本。否则,您可以强制使用 HTTP 1.0 或 HTTP 1.1。有一天会有强制使用 HTTP 2.0 的选项(请参阅 cURL 邮件列表中的此线程:http: //curl.haxx.se/mail/lib-2013-09/0020.html

我仍在尝试从 HTTP 1.0 与 1.1 的问题中了解 HTTP 1.0 与 1.1 之间的区别现在我想知道 HTTP 2.0 的未来需要什么样的考虑因素。

我的问题是:

  • 如果我不能总是确定服务器能够使用什么 HTTP 版本,那么在应用程序中设置 CURLOPT_HTTP_VERSION 是一个好主意吗?或者我应该使用 $_SERVER['SERVER_PROTOCOL'] 检测版本并基于此更改 CURLOPT_HTTP_VERSION 吗?

  • 如果我确实知道服务器能够支持 HTTP 1.1(或有一天 HTTP 2.0),是否有理由认为 cURL 无法解决这个问题?

  • 是否存在使用 HTTP 1.0 而不是 HTTP 1.1 更好的情况?

4

2 回答 2

7
  1. 我没有看到任何好处。让 curl 处理这个问题。

  2. 卷曲会为你做到这一点。而且我很确定未来的 HTTP 2.0 不会破坏向后兼容性。

  3. HTTP 1.0 vs 1.1中所述,首选 HTTP 1.0 的唯一正当理由是您无法将 Host 标头发送到服务器。但老实说,我无法想象现实世界的情况。

于 2013-09-25T22:57:11.067 回答
2

我有一个旧的 PHP 应用程序,它在服务器上运行的 PHP/libcurl 版本不支持 HTTP 2。它向外部 API 发出请求并检查响应标头以确定下一步该做什么。但是这个旧代码仅设计用于处理 HTTP 1.0 和 HTTP 1.1 标头。

如果应用程序安装在支持 HTTP 2 的服务器上,curl 将选择使用它,应用程序将中断。所以我不能在更新的服务器上安装它,或者升级当前的服务器,而不进行代码更改。

在这种情况下,将应用程序更改为使用 HTTP 1.1(已知可以工作)比更改代码的许多部分以检查新的各种可能的响应标头要简单得多。

于 2020-01-30T00:15:16.317 回答