Как ответить на запрос параметров HTTP?
HTTP OPTIONS
метод предположительно используется для определения того, какие другие методы сервер поддерживает на данном ресурсе. Учитывая это, у меня есть два вопроса:
как выглядит этот ответ? Я видел примеры со списками CSV в
Public
,Allow
, и дажеAccess-Control-Allow-Methods
заголовки. Они все нужны? Какая разница? RFC 2616 не похоже, чтобы быть очень полезным здесь.было бы целесообразно использовать это список действий, которые ресурс поддерживает в среде, отличной от REST-API? Например, если мой
ConversionController
поддерживает действияconvert
, будет ли такой ответ иметь смысл:
запрос:
OPTIONS /conversion HTTP/1.1
ответ:
HTTP/1.1 200 OK
...
Allow: CONVERT
...
2 ответа:
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/).
в ответ на заголовок: "Как ответить на запрос HTTP OPTIONS?- Чтобы ответить на этот вопрос, я хотел бы знать, почему вы хотите ответить на запрос вариантов? Кто / что отправляет вам запрос на опционы и почему? многие общедоступные серверы отвечают с некоторой формой "ошибка " или"не разрешено" (500, 501, 405). Таким образом, если вы не находитесь в конкретной ситуации, когда ваши клиенты будут разумно отправлять запросы опций и ожидать полезной / значимой информации (например, WebDAV, CORS), вы, вероятно, хотите ответить: "не делайте этого."
Что касается вашего вопроса о запросе "OPTIONS /conversion HTTP/1.1": если вы не знаете, что есть какой-то клиент вашего сервера, клиент, который отправил бы запрос OPTIONS в "/conversion" и ожидал ответа с "Allow: CONVERT", ответ Нет: это не имело бы смысла отвечать так. Я думаю, что большинство реализаций, что do варианты поддержки и отвечают С "позволяют," отвечают с стандартом Методы HTTP.
вот отличная статья на эту тему.
резюме: параметры сразу же проблематично, потому что он не поддерживает кэширование. Альтернативы: метаданные на уровне сервера: try известный Ури. Специфичный для ресурса: попробуйте использовать ссылка заголовок на его ответы, или ссылку в формате представления для данного ресурса.
наконец, если то, что вам нужно, - это описание службы, посмотрите WADL или RSDL.
EDIT:
dotnetguy делает хороший момент в комментарии ниже: опции, несомненно, ценны в определенных контекстах (например, CORS); я, конечно, не хотел предлагать иначе.