Подтвердить что ты не робот

Значение по умолчанию для Access-Control-Request-Methods

Я только что узнал о заголовке Access-Control-Request-Methods, например.

Access-Control-Request-Methods: OPTIONS, HEAD, GET

Я никогда не использовал этот заголовок (просто Access-Control-Request-Origin), но я получил CORS для работы в прошлом.

Разрешено ли по умолчанию использование всех методов или мне повезло с поведением undefined?

4b9b3361

Ответ 1

Чтобы уточнить, Access-Control-Request-Method - это заголовок запроса, заданный браузером в запросах предварительной проверки CORS, и он может иметь только одно значение. Заголовок Access-Control-Allow-Methods - это заголовок ответа CORS, и он может иметь несколько значений. Я предполагаю, что вы спрашиваете о Access-Control-Allow-Methods, потому что это значение, которое указывает сервер.

Заголовок Access-Control-Allow-Methods указывает, какие HTTP-методы разрешены для конкретной конечной точки для запросов с кросс-началом. Если вы разрешите все HTTP-методы, тогда его можно установить значение примерно как Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD. Однако, если вы хотите ограничить конечную точку только несколькими методами, вы должны включать только эти методы.

Что касается того, почему вы не видели этого раньше, этот заголовок используется только для запросов предварительной проверки CORS. Возможно, ваше приложение не использовало предварительный просмотр CORS, а затем что-то изменилось для запуска предполета. Используете ли вы приложение какие-либо HTTP-методы, отличные от GET/POST, или любые пользовательские заголовки HTTP?

Подробнее о запросах предварительной проверки CORS вы можете узнать здесь: http://www.html5rocks.com/en/tutorials/cors/

Ответ 2

По умолчанию Access-Control-Allow-Methods разрешается использование всех простых методов, даже при запросах предполетной защиты. Поскольку поток https://www.w3.org/TR/cors/#preflight-request говорит (шаг 7 успешного предполетного запроса):

Если метод запроса не учитывает регистр для любого метода в методах и не является простым методом, примените шаги кэширования и сетевой ошибки.

И определение простого метода:

Метод называется простым методом, если он учитывает регистр для одного из следующих: GET HEAD POST

Итак, если у вас есть запрошенный POST-запрос (из-за пользовательского HTTP-заголовка, скажем), и не отправляйте заголовок ответа Access-Control-Allow-Methods, запрос все равно будет выполнен.