Я использую Facebook SDK для аутентификации пользователя и получения списка страниц facebook. SDK хорошо работает на моем сервере разработки, но вылетает на рабочем сервере. При отладке я обнаружил, что ответ заголовка отличается на dev и производственном сервере.
Ответ заголовка, приходящий на сервер dev, — это HTTP / 1.1, а на рабочем сервере это HTTP / 2, который нарушает регулярное выражение и SDK.
В SDK есть файл с именем
/vendor/facebook/graph-sdk/src/Facebook/Http/GraphRawResponse.php
и функция:
public function setHttpResponseCodeFromHeader($rawResponseHeader)
{
preg_match('|HTTP/\d\.\d\s+(\d+)\s+.*|', $rawResponseHeader, $match);
$this->httpResponseCode = (int)$match[1];
}
и в соответствии с регулярным выражением должно быть десятичное число с десятичной точкой, но на производстве это только 2, который разбивает его.
Мой вопрос: связано ли это с конфигурацией моего сервера на производстве или Facebook отправляет эти заголовки. Если facebook отправляет заголовки, то почему он ведет себя по-другому, так как у меня та же версия SDK.
Если это какая-то проблема с сервером, то как ее исправить?
Обновите SDK до текущей версии — код этого метода был изменен, предположительно для учета HTTP / 2.
public function setHttpResponseCodeFromHeader($rawResponseHeader)
{
// https://tools.ietf.org/html/rfc7230#section-3.1.2
list($version, $status, $reason) = array_pad(explode(' ', $rawResponseHeader, 3), 3, null);
$this->httpResponseCode = (int) $status;
}
Других решений пока нет …