Не могу установить код ответа 200 в PHP - PullRequest
2 голосов
/ 02 августа 2011

Я пытаюсь установить код ответа в PHP-скрипте на 200. Позже я установил заголовок Location, который устанавливает его на 302. Согласно документации:

Он не только отправляет этот заголовок обратно в браузер, но также возвращает код состояния REDIRECT (302) в браузер, если 201 или код состояния 3xx уже установлен.

Нет ли способа установить заголовок на 200 и не иметь заголовка location, переопределяющего его? Я попытался установить заголовок кода ответа после заголовка местоположения, но это не работает (возможно, потому что заголовок местоположения уже был отправлен вместе с телом, включая HTML-бит «Найдено»).

Я мог бы использовать 201 в качестве кода ответа, поскольку приложение, принимающее скрипт, проверяет только любой код 2xx. Однако согласно спецификации HTTP 1.1:

Сервер происхождения ДОЛЖЕН создать ресурс перед возвратом кода состояния 201.

Но я ничего не создаю. Это проблема, или я могу сойти с рук?

Ответы [ 3 ]

2 голосов
/ 02 августа 2011

Согласно RFC 2616 , код состояния 200 с перенаправлением недействителен (см. 10.3 Перенаправление 3xx ).При перенаправлении допустим только код 3xx.

Вы можете продолжать посылать произвольный код 2xx, если он выполняет свою работу, но это будет вне стандарта и теоретически ненадежно для всех пользовательских агентов.

0 голосов
/ 02 августа 2011

Аргумент "Location:" в header() предназначен для перенаправления. Перенаправление - это инструкция для запрашивающей стороны HTTP (то есть агента пользователя) отправить новый запрос на сервер с информацией, указанной в «Location».

Установка кода состояния с 200 в любое время является ошибкой и должна игнорироваться; по умолчанию 302.

Если вы не хотите перенаправлять, просто не устанавливайте местоположение!

0 голосов
/ 02 августа 2011

Ну, я нашел ответ на свою конкретную проблему. Моя первоначальная проблема заключалась в том, что в одном месте требовался заголовок redirect, а в другом - заголовок HTTP/1.1 200 OK, поэтому я мог использовать одно или другое в зависимости от источника.

Однако, после попытки выбора 201, это тоже не сработало (все еще 302), так что я не знаю, является ли это ошибкой, или я ошибался или что.

...