2013-09-25 3 views
2

В чужом коде я наткнулся на эту установку для Curl опции:Какова важность установки CURLOPT_HTTP_VERSION в приложении?

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 

РНР документация говорит, что по умолчанию этот параметр установлен в CURL_HTTP_VERSION_NONE, который позволяет Curl решить, какая версия HTTP для использования. В противном случае вы можете заставить HTTP 1.0 или HTTP 1.1. Когда-нибудь будет возможность, чтобы заставить HTTP 2.0 (см эту тему на локонов список рассылки: http://curl.haxx.se/mail/lib-2013-09/0020.html)

Я все еще пытаюсь понять различия между HTTP 1.0 против 1.1 из вопроса HTTP 1.0 vs 1.1 и теперь мне интересно, что для будущего с HTTP 2.0 нужны соображения.

Мои вопросы:

  • Является ли установка CURLOPT_HTTP_VERSION в приложении хорошая идея, если я не всегда могу быть уверен, что версия HTTP сервер способен? Или я должен определить версию с помощью $ _SERVER ['SERVER_PROTOCOL'] и изменить на ней CURLOPT_HTTP_VERSION?

  • Если я действительно знаю, что сервер способен HTTP 1.1 (или когда-нибудь HTTP 2.0), есть ли основания полагать, что cURL не сможет это понять?

  • Есть ли случай, когда лучше использовать HTTP 1.0, а не HTTP 1.1?

+0

cURL умный, пусть это выяснит. В основном он будет использовать самую последнюю версию, а затем не вернуться к предыдущей, если не поддерживается. Различия между HTTP 1.0 и 1.1 довольно эзотеричны и редко имеют значение в контексте PHP-приложения, поскольку apache/nginx/iis/etc обрабатывает большинство всего, прежде чем запрос когда-либо попадает на PHP. – Sammitch

ответ

2
  1. Я не вижу никакой пользы. Поговорите с этим.

  2. Curl сделает это за вас. И я уверен, что будущий HTTP 2.0 не нарушит совместимость.

  3. Как указано в HTTP 1.0 vs 1.1, единственной допустимой причиной предпочтения HTTP 1.0 является то, что вы не можете отправить заголовок узла на сервер. Но, честно говоря, я не могу представить реальную ситуацию в мире.

+1

Я просто натолкнулся на сценарий реального мира. Прокси Squid (версия 3.2) не смог корректно обрабатывать ответы HTTP 1.1 100-continue с сервера, и, следовательно, клиент, который отправлял HTTP 1.1 PUT (с заголовком HTTP 1.1 'Excpect: 100-continue'), получил' 417 Expectation Failed' из прокси. Принуждение завитка к использованию HTTP 1.0 вместо этого работало над этой проблемой прокси. – Sascha

+0

Была такая же проблема, как @Sascha +1 – GTodorov

Смежные вопросы