RESTful проблема с доступом к данным при использовании метода HTTP DELETE - PullRequest
2 голосов
/ 02 мая 2010

У меня проблема с доступом к необработанной информации запроса из PHP при доступе к скрипту с использованием директивы HTTP DELETE. Я использую интерфейс JS, который обращается к сценарию с помощью Ajax. Этот скрипт на самом деле является частью RESTful API, который я разрабатываю.

Конечная точка в этом примере:

http://api.site.com/session

Эта конечная точка используется для создания токена аутентификации, который можно использовать для последующих запросов API. Использование метода GET для этого URL вместе с измененной версией базовой аутентификации HTTP предоставит клиенту токен доступа. Этот токен должен быть включен во все другие взаимодействия со службой до истечения срока его действия.

Как только токен сгенерирован, он передается обратно клиенту в формате, указанном в заголовке «Accept», который клиент отправляет сервису; в этом случае 'application / json'. В случае успеха он отвечает кодом состояния HTTP 200 Ok. В случае сбоя выдается исключение с использованием кода HTTP 401 Authorization Required.

Теперь, когда вы хотите удалить сеанс или выйти из системы, вы попадаете на тот же URL-адрес, но с директивой HTTP DELETE. Чтобы проверить доступ к этой конечной точке, клиент должен доказать, что он был ранее аутентифицирован, предоставив токен, который он хочет завершить.

Если они «вошли в систему», токен и сеанс завершаются, и служба должна ответить кодом состояния HTTP 204 «Нет содержимого», в противном случае их снова приветствует исключение 401.

Теперь у меня проблема с удалением сеансов. С помощью директивы DELETE, использующей Ajax, я не могу получить доступ к каким-либо параметрам, которые я установил, когда запрос попадает в сервис. В этом случае я ищу параметр под названием «токен».

Я смотрю на необработанные заголовки запросов, используя Firebug, и замечаю, что заголовок «Content-Length» меняется в зависимости от размера отправляемого токена. Это говорит мне о том, что эти данные действительно отправляются на сервер.

Вопрос, используя PHP, как, черт возьми, получить доступ к информации о параметрах? Это не запрос POST или GET, поэтому я не могу получить к нему доступ, как обычно в PHP. Параметры находятся в содержательной части запроса.

Я пробовал искать в $ _SERVER, но это показывает мне ограниченное количество заголовков. Я попробовал apache_request_headers (), который дает мне более подробную информацию, но все же, только для заголовков. Я даже пытался 'file_get_contents (' php: // stdin ');' и я ничего не получаю.

Как я могу получить доступ к части содержимого необработанного HTTP-запроса?

Извините за длинный пост, но я подумал, что слишком много информации лучше, чем слишком мало. :)

Ответы [ 2 ]

9 голосов
/ 02 мая 2010

Я думаю, вы неправильно используете HTTP DELETE. Обычно его следует использовать в качестве запроса на удаление ресурса на сервере: ресурса, на который указывает URI запроса. Вы можете закодировать свой токен доступа в качестве параметра запроса, но это не то, как следует использовать DELETE. например, запрос:

DELETE /somescript.php?token=XYZ123

СЛЕДУЕТ рассматривать как запрос на удаление файла 'somescript.php' с сервера.

Вам следует переписать вашу систему, чтобы использовать POST-запрос, который является обычным способом выполнения таких действий. Сценарий обработчика POST может удалить сеанс и ответить с соответствующими заголовками, чтобы удалить все файлы cookie, которые вы могли создать.

3 голосов
/ 02 мая 2010

Чтобы получить доступ к параметрам, передаваемым с помощью PUT и DELETE, вы должны проанализировать поток ввода php, например:

parse_str(file_get_contents('php://input'), $arguments);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...