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

时间:2013-09-25 22:35:22

标签: php http curl

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

2 个答案:

答案 0 :(得分:4)

  1. 我认为没有任何好处。让卷曲处理。

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

  3. HTTP 1.0 vs 1.1中所述,偏好HTTP 1.0的唯一正当理由是您无法向服务器发送主机头。但老实说,我无法想象真实世界的情况。

答案 1 :(得分:2)

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

如果应用程序安装在具有HTTP 2支持的服务器上,curl将选择使用它,并且该应用程序将损坏。因此,如果不更改代码,就无法在更新的服务器上安装它或升级当前服务器。

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