Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Заголовки ответа  (Прочитано 15109 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« : 08-10-2014 10:29 » new

Что-то я или туплю, или одно из двух


Есть некая система

Система буферизует заголовки ответа
Про информационные пока вопросов нет, мало интересуют.

Речь идет о статусных ответах

например

Нет контента - положили 404 ответ, но еще буфер контента не выдали
Затем, некто, перехватил обработчик 404 буфера, и подложил туда свой контент и отдал 200

Два заголовка отправятся или один?

Если два, то как принимающая сторона отреагирует
Если один, то существует ли приоритет,
или
Заголовок ответа может быть только один, т.е последний.


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 08-10-2014 11:01 » 

Сложное у тебя описание  Здесь была моя ладья...

В заголовке HTTP ответ может быть только один.
Исключение - коды 1xx при keep alive, но тут просто два заголовка.

Слав, объясни, что это? Сервер? 404 уже ушло на момент вызова перехватчика?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 08-10-2014 13:32 » 

AddHeader('404')
заголовок (статус) положили в массив
AddHeader('200')
заголовок (статус) положили в массив
Код:
foreach $headers as $header header($header);

echo $content;



header($header); //- это еще, не значит что заголовок отправлен
echo $content; // вот теперь будет отправлен заголовок.

Заголовок статуса может быть один, но существуют и другие заголовки. Это не обсуждаем.


Ну, пока тут объясняешь кому-то сам понимаешь о чем спрашиваешь


AddHeader('200')
AddHeader('404')
В результате будет - 404 ответ

AddHeader('404')
AddHeader('200')
В результате будет - 200 ответ



Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 08-10-2014 13:43 » 

Ясно - PHP Улыбаюсь

http://php.net/manual/ru/function.header.php
Цитата
void header(string $string [, bool $replace = true [, int $http_response_code ]])

Заголовок перезаписывается, если второй параметр не false.

Цитата
   Замечание:

    Строка заголовка задающая состояние HTTP всегда будет отсылаться клиенту первой, вне зависимости от того был соответствующий вызов функции header() первым или нет. Это состояние можно перезаписать, вызывая header() с новой строкой состояния в любое время, когда можно отправлять HTTP заголовки.

Ну и вывода тела ответа не должно быть, т.к. при этом будет отослан ранее сформированный заголовок. Для предотвращения используй буферизацию (см. ob_start).

И еще прикольчик из доки:

Цитата
    Замечание:

    ID сессии не будет передаваться вместе с заголовком Location, даже если включена настройка session.use_trans_sid. Его нужно передавать вручную, используя константу SID.
« Последнее редактирование: 08-10-2014 13:50 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines