Отправка пользовательских заголовков HTTP через Apache & PHP в спокойной веб-службе - PullRequest
1 голос
/ 30 апреля 2011

Я пишу веб-сервис RESTful, который возвращает пользовательские / существующие заголовки HTTP при успешных / неудачных операциях.

Например, если аутентификация не удалась, будет отправлен заголовок 401 HTTP и т. Д.

Я отправил заголовки через функцию заголовка PHP (), но, конечно, это не отправляется обратно вызывающей стороне.Что мне действительно нужно сделать, это отправить заголовки через Apache, а не PHP, обратно в вызывающий скрипт.Я выполняю определенные проверки данных, которые я получаю в своем веб-сервисе, а затем отправляю заголовки.Как бы я вместо этого протолкнул эти заголовки через Apache?

Спасибо!

Ответы [ 3 ]

1 голос
/ 30 апреля 2011

Я отправил заголовки через функцию заголовка PHP (), но, конечно, она не отправляется обратно вызывающей стороне.

Что вас так в этом убедило?Я склонен думать, что ты где-то делаешь что-то не так ...

1 голос
/ 30 апреля 2011

Я бы, наверное, сделал это с PHP, а не с Apache, но это только мои собственные предпочтения. Если вызов header() не работает, скорее всего, потому что у вас есть пробелы вне тегов PHP где-то перед вызовом header(). Обратите внимание на это в руководстве по PHP :

Помните, что header () должен быть вызван перед отправкой любого фактического вывода, либо обычными тегами HTML, пустым строки в файле или из PHP. Это очень распространенная ошибка при чтении кода include () или require (), функции или другая функция доступа к файлу, и есть пробелы или пустые строки, которые выводятся перед заголовком () вызывается. Такой же проблема существует при использовании одного Файл PHP / HTML.

Если вы должны сделать это с Apache, mod_headers не подходит. mod_headers может устанавливать заголовки только в зависимости от того, является ли запрос успешным (2xx) или для любого запроса. См. Директива заголовка .

Вместо этого, я думаю, это можно сделать с помощью комбинации mod_rewrite и mod_asis . У меня нет конкретного «рецепта» для этого, но идея состоит в том, чтобы проверить, авторизован ли запрос с помощью mod_rewrite, и, если он не авторизован, переписать / перенаправить URI запроса в документ .asis, содержащий Информация заголовка, которую вы хотите отправить обратно.

0 голосов
/ 01 мая 2011

разобрался с решением.Передайте 'true' в качестве второго аргумента для header () и фактический код состояния в качестве третьего аргумента.Например, заголовок («HTTP 1.1 / 400 Bad Request», true, 400).Это заставит код состояния 400 звонящему.Я проверил это по крайней мере в LiveHTTPHeaders, чтобы он мог работать.Мне просто нужно позвонить через curl, чтобы быть полностью уверенным.

...