Я сталкивался с проблемами CORS несколько раз и обычно могу это исправить, но я хочу по-настоящему понять, увидев это из парадигмы стека MEAN.
Раньше я просто добавлял промежуточное программное обеспечение в свой экспресс-сервер для перехвата этих вещей, но похоже, что есть какая-то предварительная ловушка, которая выдает мои запросы.
Поле заголовка запроса Access-Control-Allow-Headers не разрешено Access-Control-Allow-Headers в ответе перед полетом
Я предположил, что я мог сделать это:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Headers","*")
})
или эквивалент, но это, кажется, не исправить это. Я тоже конечно пробовал
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Headers","Access-Control-Allow-Headers")
})
Все еще не повезло.
Access-Control-Request-Headers
header("Access-Control-Allow-Headers: Content-Type")
Это то, что вам нужно добавить, чтобы это работало.
Браузер отправляет предварительный запрос (с методом OPTIONS), чтобы проверить, разрешен ли доступ к службе, размещенной на сервере, из браузера в другом домене. В ответ на запрос предварительной проверки, если вы введете вышеуказанные заголовки, браузер понимает, что можно делать дополнительные вызовы, и я получу действительный ответ на мой фактический вызов GET / POST. Вы можете ограничить домен, к которому предоставляется доступ, используя Access-Control-Allow-Origin "," localhost, xvz.com "вместо *. (* предоставит доступ ко всем доменам)
источник
*
для...-Origin
иtrue
для...-Credentials
. Он не будет работать для запросов без полномочий, но также не будет работать для запросов с полномочиями. Смотрите ссылку, которую я разместил в моем ответе.response.setHeader("Access-Control-Allow-Headers", "*")
? Как это влияет на безопасность?Эта проблема решена с
Особенно в моем проекте (express.js / nodejs)
Обновить:
Каждый раз, когда ошибка:
Access-Control-Allow-Headers is not allowed by itself in preflight response
ошибка, вы можете увидеть, что не так с Chrome Developer Tool :выше ошибка отсутствует,
Content-Type
поэтому добавьте строкуContent-Type
вAccess-Control-Allow-Headers
источник
Принятый ответ в порядке, но мне было трудно его понять. Итак, вот простой пример, чтобы прояснить это.
В моем запросе ajax у меня был стандартный заголовок авторизации.
Этот код выдает ошибку в вопросе. На моем сервере nodejs мне нужно было добавить авторизацию в разрешенные заголовки:
источник
Чтобы добавить к другим ответам. У меня была та же проблема, и это код, который я использовал на моем экспресс-сервере для разрешения вызовов REST:
В основном этот код перехватывает все запросы и добавляет заголовки CORS, а затем продолжает мои обычные маршруты. Когда есть запрос OPTIONS, он отвечает только заголовками CORS.
РЕДАКТИРОВАТЬ: я использовал это исправление для двух отдельных экспресс-серверов nodejs на одном компьютере. В конце концов я исправил проблему с простым прокси-сервером.
источник
Я сам столкнулся с этой проблемой, в контексте ASP.NET убедитесь, что ваш Web.config выглядит так:
Обратите внимание на значение Авторизации для
Access-Control-Allow-Headers
ключа. Мне не хватало значения авторизации, этот конфиг решает мою проблему.источник
Очень хорошо, я использовал это в проекте Silex
источник
В Chrome:
Для меня эта ошибка была вызвана завершающим пробелом в URL этого вызова.
источник
Просто добавьте, что вы можете поместить эти заголовки также в файл конфигурации Webpack. Я нуждался в них, как в моем случае, когда я работал на сервере webpack dev.
источник
res.setHeader ('Access-Control-Allow-Headers', '*');
источник
Я получил ошибку, указанную в OP с использованием Django, React и django-cors-headers lib. Чтобы исправить это с этим стеком, сделайте следующее:
В settings.py добавьте ниже в соответствии с официальной документацией .
источник
эта проблема возникает, когда мы создаем пользовательский заголовок для запроса. Этот запрос использует
HTTP OPTIONS
и включает несколько заголовков.Требуемый заголовок для этого запроса
Access-Control-Request-Headers
, который должен быть частью заголовка ответа и должен разрешать запрос от всего источника. Иногда это нужноContent-Type
и в заголовке ответа. Таким образом, ваш заголовок ответа должен быть таким -источник
При вызове Post API мы отправляем данные в теле запроса. Так что, если мы отправим данные, добавив дополнительный заголовок к вызову API. Затем произойдет первый вызов API OPTIONS, а затем будет выполнен пост-вызов. Следовательно, вы должны сначала обработать вызов OPTION API.
Вы можете решить эту проблему, написав фильтр, внутри которого вы должны проверить API-вызов вызова опции и вернуть статус 200 OK. Ниже приведен пример кода:
источник
Если вы пытаетесь добавить пользовательский заголовок в заголовки запроса, вы должны сообщить серверу, что конкретный заголовок разрешен. Место для этого находится в классе, который фильтрует запросы. В примере, показанном ниже, пользовательский заголовок имеет имя «тип»:
источник
Потратив почти день, я только что узнал, что добавление двух приведенных ниже кодов решило мою проблему.
Добавьте это в Global.asax
и в веб-конфигурации добавьте ниже
источник
Я также столкнулся с той же проблемой в Angular 6. Я решил проблему с помощью приведенного ниже кода. Добавьте код в файл component.ts.
источник
Та самая проблема, с которой я столкнулся.
Я сделал простое изменение.
источник
Сообщение ясно, что «Авторизация» не допускается в API. Установить
Access-Control-Allow-Headers: «Content-Type, Authorization»
источник
Добавление cors в функцию get Это то, что у меня сработало
источник