Я использую AngularJS $ http на стороне клиента для доступа к конечной точке приложения веб-API ASP.NET на стороне сервера. Поскольку клиент размещен в другом домене, чем сервер, мне нужен CORS. Он работает для $ http.post (url, data). Но как только я аутентифицирую пользователя и отправляю запрос через $ http.get (url), я получаю сообщение
Заголовок «Access-Control-Allow-Origin» содержит несколько значений «http://127.0.0.1:9000, http://127.0.0.1:9000», но разрешено только одно. Следовательно, к источнику 'http://127.0.0.1:9000' доступ не разрешен.
Fiddler показывает мне, что в запросе на получение действительно есть две записи заголовка после успешного запроса параметров. Что и где я делаю не так?
Обновить
Когда я использую jQuery $ .get вместо $ http.get, появляется то же сообщение об ошибке. Так что с AngularJS это не проблема. Но где это не так?
asp.net-web-api
cors
angularjs-http
Папа Маффлон
источник
источник
Ответы:
я добавил
config.EnableCors(new EnableCorsAttribute(Properties.Settings.Default.Cors, "", ""))
так же как
app.UseCors(CorsOptions.AllowAll);
на сервере. Это приводит к двум записям заголовка. Просто используйте последний, и он работает.
источник
Мы столкнулись с этой проблемой, потому что мы настроили CORS в соответствии с передовой практикой (например, http://www.asp.net/web-api/overview/security/enpting-cross-origin-requests-in-web-api ) И ТАКЖЕ был настраиваемый заголовок
<add name="Access-Control-Allow-Origin" value="*"/>
в web.config.Удалите запись web.config, и все будет хорошо.
В отличие от ответа @mww, у нас все еще есть
EnableCors()
файл WebApiConfig.cs ИEnableCorsAttribute
на контроллере. Когда мы убирали одно или другое, мы сталкивались с другими проблемами.источник
Я использую Cors 5.1.0.0, после долгой головной боли я обнаружил, что проблема дублируется заголовками Access-Control-Allow-Origin и Access-Control-Allow-Header с сервера
Удалил
config.EnableCors()
из файла WebApiConfig.cs и просто установил[EnableCors("*","*","*")]
атрибут в классе ControllerПрочтите эту статью для получения более подробной информации.
источник
Добавить в регистр WebApiConfig
Или web.config
НО НЕ ОБОИХ
источник
На самом деле вы не можете установить несколько заголовков
Access-Control-Allow-Origin
(или, по крайней мере, это не будет работать во всех браузерах). Вместо этого вы можете условно установить переменную среды, а затем использовать ее вHeader
директиве:Таким образом, в этом примере заголовок ответа будет добавлен только в том случае, если заголовок запроса
Origin
соответствует RegExp:^(https?://localhost|https://[a-z]+\.my\.base\.domain)$
(это в основном означает localhost через HTTP или HTTPS и * .my.base.domain через HTTPS).Не забудьте включить
setenvif
модуль.Документы:
Кстати.
}e
В%{ORIGIN_SUB_DOMAIN}e
это не опечатка. Это то, как вы используете переменную среды вHeader
директиве.источник
У меня тоже были как OWIN, так и мой WebAPI, которые, очевидно, нуждались в отдельном включении CORS, что, в свою очередь, создавало
'Access-Control-Allow-Origin' header contains multiple values
ошибку.В итоге я удалил ВСЕ код, который включал CORS, а затем добавил следующее в
system.webServer
узел моего Web.Config:Выполнение этого удовлетворило требования CORS для OWIN (разрешение входа в систему) и для WebAPI (разрешение вызовов API), но создало новую проблему:
OPTIONS
не удалось найти метод во время предварительной проверки для моих вызовов API. Исправить это было просто - мне просто нужно было удалить следующее изhandlers
узла my Web.Config:Надеюсь, это кому-то поможет.
источник
Сервер Apache:
Я трачу столько же, но это потому, что у меня не было кавычек (") звездочка в моем файле, который предоставлял доступ к серверу, например '.htaccess.':
У вас также может быть файл '.htaccess' в папке с другим '.htaccess', например
В вашем случае вместо «*» звездочкой будет
http://127.0.0.1:9000
сервер ip ( ), которому вы даете разрешение на обслуживание данных.ASP.NET:
Убедитесь, что в вашем коде нет дубликата Access-Control-Allow-Origin.
Инструменты разработчика:
В Chrome вы можете проверить заголовки запросов. Нажмите клавишу F12 и перейдите на вкладку «Сеть», теперь запустите запрос AJAX и появится в списке, нажмите и укажите всю информацию, которая там есть.
источник
Это происходит, когда у вас есть опция Cors, настроенная в нескольких местах. В моем случае это было на уровне контроллера, а также в Startup.Auth.cs / ConfigureAuth.
Насколько я понимаю, если вы хотите, чтобы это приложение было широким, просто настройте его в Startup.Auth.cs / ConfigureAuth следующим образом ... Вам понадобится ссылка на Microsoft.Owin.Cors
Если вы предпочитаете держать его на уровне контроллера, вы можете просто вставить его на уровне контроллера.
источник
если вы находитесь в IIS, вам нужно активировать CORS в web.config, тогда вам не нужно включать метод регистрации App_Start / WebApiConfig.cs
Мое решение было прокомментировано здесь:
и напишите в web.config:
источник
Это также может произойти, конечно, если вы на самом деле настроили свой
Access-Control-Allow-Origin
заголовок на несколько значений - например, список значений, разделенных запятыми, который вроде поддерживается в RFC, но фактически не поддерживается большинством основных браузеров. Обратите внимание, что в RFC говорится о том, как разрешить использование более одного домена без использования "*".Например, вы можете получить эту ошибку в Chrome, используя такой заголовок:
Access-Control-Allow-Origin: http://test.mysite.com, http://test2.mysite.com
Это было в
Chrome Version 64.0.3282.186 (Official Build) (64-bit)
Обратите внимание: если вы рассматриваете это из-за CDN и используете Akamai, вы можете отметить, что Akamai не будет кэшировать на сервере, если вы его используете
Vary:Origin
, как многие предлагают решить эту проблему.Вероятно, вам придется изменить способ создания ключа кеша, используя поведение ответа «Изменение идентификатора кэша». Дополнительные сведения об этой проблеме см. В соответствующем вопросе StackOverflow.
источник
Access-Control-Allow-Origin: http://test.mysite.com http://test2.mysite.com
. Это было бы правильным способом, но браузеры не следуют стандарту здесь ( источник ).Так глупо и просто:
Эта проблема возникла у меня, когда у меня было два раза
Header always set Access-Control-Allow-Origin *
в моем файле конфигурации Apache. Один раз сVirtualHost
тегами и один раз внутриLimit
тега:Удаление одной записи решило проблему.
Думаю, в исходном посте это было бы два раза:
источник
просто была эта проблема с сервером nodejs.
вот как я это исправил.
Я запускаю свой сервер узла через a,
nginx proxy
и я установил nginx иnode
на оба,allow cross domain requests
и ему это не понравилось, поэтому я удалил его из nginx и оставил в узле, и все было хорошо.источник
rack-cors
драгоценному камню обрабатывать материал CORS. Бац, исправлено.Я столкнулся с той же проблемой, и вот что я сделал для ее решения:
В сервисе WebApi внутри Global.asax я написал следующий код:
Здесь этот код позволяет только предварительному запуску и запросу токена добавлять в ответ «Access-Control-Allow-Origin», в противном случае я не добавляю его.
Вот мой блог о реализации: https://ibhowmick.wordpress.com/2018/09/21/cross-domain-token-based-authentication-with-web-api2-and-jquery-angular-5-angular- 6 /
источник
для тех, кто использует IIS с php, на стороне сервера IIS обновите файл web.config в корневом каталоге (wwwroot) и добавьте это
после этого перезапустите сервер IIS, введите IISReset в RUN и введите
источник
Вот еще один пример, аналогичный приведенным выше примерам, где у вас может быть только один файл конфигурации, определяющий, где находится CORS: на сервере IIS на пути в разных каталогах было два файла web.config, и один из них был скрыт в виртуальном каталоге. Чтобы решить эту проблему, я удалил файл конфигурации корневого уровня, так как путь использовал файл конфигурации в виртуальном каталоге. Придется выбирать то или другое.
источник
Заголовок Access-Control-Allow-Origin содержит несколько значений.
когда я получил эту ошибку, я потратил массу часов на поиск решения для нее, но ничего не работает, наконец, я нашел решение этой проблемы, которое очень просто. когда заголовок '' Access-Control-Allow-Origin 'добавлял более одного раза к вашему ответу, эта ошибка возникает, проверьте свой apache.conf или httpd.conf (сервер Apache), сценарий на стороне сервера и удалите ненужный заголовок записи из этих файлов .
источник