OPTIONS
Предположительно, метод HTTP используется для определения того, какие другие методы сервер поддерживает на данном ресурсе. Учитывая это, у меня есть два вопроса:
Как выглядит этот ответ? Я видел примеры со списками CSV в
Public
,Allow
и дажеAccess-Control-Allow-Methods
заголовки. Все ли они нужны? Какая разница? RFC 2616 , похоже, здесь не очень полезен.Будет ли уместно использовать это для перечисления действий, которые ресурс поддерживает в среде, отличной от REST-API? Например, если my
ConversionController
поддерживает действиеconvert
, будет ли иметь смысл такой ответ:
Запрос:
OPTIONS /conversion HTTP/1.1
Отклик:
HTTP/1.1 200 OK
...
Allow: CONVERT
...
Allow: CONVERT
??Ответы:
RFC 2616 определяет «Разрешить» ( http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.14.7 ). "Public" больше не используется. "Access-Control-Allow-Methods" определен в спецификации CORS (см. Http://www.w3.org/TR/cors/ ).
источник
Allow
иAccess-Control-Allow-Methods
быть отправлены, или только последний?OPTIONS
может быть контент. Из RFC 2616: «Если запрос OPTIONS включает тело объекта (на что указывает наличие Content-Length или Transfer-Encoding), то тип носителя ДОЛЖЕН указываться полем Content-Type. Хотя эта спецификация не определяет при любом использовании такого тела будущие расширения HTTP могут использовать тело OPTIONS для выполнения более подробных запросов на сервере. Сервер, который не поддерживает такое расширение, МОЖЕТ отклонить тело запроса ».Allow
иAccess-Control-Allow-Methods
. Первый указывает, какие методы поддерживаются в целом, а второй указывает, какие методы разрешены для запросов из разных источников. Например, можно разрешитьGET
,POST
,PUT
иDELETE
для своего собственного происхождения , но только позволяетGET
иPOST
для перекрестного происхождения.В ответ на заголовок: «Как ответить на запрос HTTP OPTIONS?» Чтобы ответить на этот вопрос, я хотел бы знать, почему вы хотите ответить на запрос OPTIONS? Кто / что отправляет вам запрос OPTIONS и почему? Многие общедоступные серверы отвечают той или иной формой «ошибка» или «не разрешено» (500, 501, 405). Итак, если вы не находитесь в конкретной ситуации, когда ваши клиенты будут разумно отправлять запросы OPTIONS и ожидать обратно полезной / значимой информации (например, WebDAV, CORS), вы, вероятно, захотите ответить: «Не делайте этого».
Что касается вашего вопроса о запросе «OPTIONS / convert HTTP / 1.1»: если вы не знаете, что есть какой-то клиент вашего сервера, клиент, который отправит запрос OPTIONS на «/ conversion» и ожидает ответа с «Allow: CONVERT , "ответ - нет: не имело бы смысла так отвечать. Я думаю, что большинство реализаций, которые действительно поддерживают ОПЦИИ и отвечают «Разрешить», отвечают стандартными методами HTTP.
Вот отличная статья по этой теме .
Резюме: OPTIONS сразу вызывает проблемы, потому что он не поддерживает кеширование. Альтернативы: общесерверные метаданные: попробуйте известные URI . Для конкретного ресурса: попробуйте использовать заголовок Link в ответах или ссылку в формате представления для этого ресурса.
Наконец, если вам нужно описание услуги, взгляните на WADL или RSDL .
РЕДАКТИРОВАТЬ:
dotnetguy делает хорошую точку в комментариях ниже: OPTIONS, несомненно, ценный в определенных контекстах (например, CORS); Я, конечно, не хотел утверждать обратное.
источник
Что такое запрос HTTP OPTIONS?
Это запрос от клиента, чтобы узнать, какие HTTP-методы разрешит сервер, например
GET
,POST
и т. Д.Запрос
Запрос может выглядеть так, когда спрашивают о параметрах для конкретного ресурса:
или вот так, когда спрашивают о сервере в целом:
отклик
Ответ будет содержать
Allow
заголовок с разрешенными методами:Почему сервер получает запрос HTTP OPTIONS?
Как ответить на запрос HTTP OPTIONS?
Allowed
заголовком и даже задокументировать свой API в теле.Access-Control-Request-*
заголовками, определенными CORS .405 Method Not Allowed
или501 Not Implemented
.Как перестать получать запросы HTTP OPTIONS?
PUT
илиDELETE
, илиPOST
с помощьюapplication/json
). Выполняйте только простые запросы .Смотрите также
источник