Почему в логах nginx HTTP/1.0?

D
На сайте с 28.06.2008
Offline
1114
814

Есть код

if (($this->error->getCode()) == '404'){

header('HTTP/1.1 410 Gone');
echo file_get_contents(JURI::root().'index.php?option=com_content&view=article&id=404');
exit;
}

Но в логах nginx это обращение к несуществующей странице выглядит так

108.201.47.45 - - [20/Dec/2016:22:34:34 +0300] "GET /index.php?option=com_content&view=article&id=404 HTTP/1.0" 200 10079 "-" "-"

Какой бы протокол я не выставил в хедере - в логе всегда HTTP/1.0 почему?

S
На сайте с 30.09.2016
Offline
469
#1

Заголовок, который отдаётся в ответе этого скрипта, получает запрашивающий браузер, вроде как. А file_get_contents() делает новый запрос на сервер, который, собственно, и получает энджинкс. И заголовок, который формирует file_get_contents() - он как бы уже свой, а не тот, который отправляете браузеру. И задаётся этот заголовок вроде как функцией stream_context_create(), насколько я понимаю. И у этой функции куча опций. А если версия протокола HTTP не указана, то по умолчанию это 1.0. Вот как-то так, в моём видении ситуации.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#2

А не пофигу не? Скрипт сам к себе обращается без сжатия. Вот людям реально заняться нечем :)

---------- Добавлено 20.12.2016 в 23:58 ----------

Кстати, а что за бред? Нафига тянуть каждый раз file_get_contents? Может лучше в кэш запихать и обновлять раз в месяц.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
Евгений Русаченко
На сайте с 17.04.2013
Offline
157
#3

У Вас скрипт делает запрос к сайту, используя HTTP/1.0, именно по этой причине в журнале 1.0 и стоит. А header() отправляет заголовок в браузер, а не использует его в запросе.

Как писали выше, доработайте код. Должно быть примерно вот так:

if ($this -> error -> getCode() == '404')

{
header("HTTP/1.1 404 Not Found");
$context = stream_context_create(array('http' => array('protocol_version' => '1.1')));
echo file_get_contents(JURI::root().'index.php?option=com_content&view=article&id=404', false, $context);
exit;
}
Почта для домена ( https://lite.host/pochta/dlya-domena ) с безлимитными пользователями и доменами / Хостинг ( https://lite.host/hosting/dlya-blogov ) от 99 рублей / поддержка Let's Encrypt / PHP от 5.2 до 8.3 / SSH / бесплатный перенос,
D
На сайте с 28.06.2008
Offline
1114
#4

То, что нужно, спасибо, Евгений Русаченко,

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий