在应用程序中设置CURLOPT_HTTP_VERSION的重要性是什么


What is the importance of setting CURLOPT_HTTP_VERSION in an application?

在别人的代码中,我遇到了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 更好?

  1. 我看不出有什么好处。让卷曲来处理这个问题。

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

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

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

如果应用程序安装在支持 HTTP 2 的服务器上,curl 将选择使用该服务器,并且应用程序将中断。因此,如果不更改代码,我无法将其安装在较新的服务器上,也无法升级当前服务器。

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