在别人的代码中,我遇到了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更好的情况?
答案 0 :(得分:4)
我认为没有任何好处。让卷曲处理。
Curl会为你做这件事。而且我很确定未来的HTTP 2.0不会破坏向后兼容性。
如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(已知有效)比更改代码的许多部分以检查各种可能的响应标头要简单得多。