Laravel angularJS CORS с использованием barryvdh / laravel-cors не работает на IIS

У меня проблема с междоменным запросом к API, размещенному в IIS.

Я использую приложение angularjs для извлечения данных из API, которое разработано с помощью laravel 5 с использованием пакетов tymondesigns / jwt-auth и barryvdh / laravel-cors для JWT и CORS.

Когда API размещен на apache angularjs, приложение извлекает данные, но при размещении на IIS выдает следующую ошибку:

XMLHttpRequest cannot load http://example.com/api/authenticate. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.

Заголовок ответа на предполетный запрос:

Request URL:http://example.com/api/authenticate
Request Method:OPTIONS
Status Code:200 OK
Allow:OPTIONS, TRACE, GET, HEAD, POST
Content-Length:0
Public:OPTIONS, TRACE, GET, HEAD, POST
Server:Microsoft-IIS/8.5
X-Powered-By:ASP.NET

Мой первый вопрос: почему "Access-Control-Allow-Origin" не установлен при размещении на IIS. Есть ли какие-либо специальные настройки для включения CORS в IIS.

Затем я добавил следующие строки в файл web.config:

<httpProtocol>
    <customHeaders>
        <remove name="Access-Control-Allow-Origin" />   
        <add name="Access-Control-Allow-Origin" value="*" />
        <remove name="Access-Control-Allow-Headers" />
       <add name="Access-Control-Allow-Headers" value="Origin, Content-Type, Authorization, Accept, X-Request-With" />
   </customHeaders>
</httpProtocol>

Теперь это дает следующую ошибку:

XMLHttpRequest cannot load http://example.com/api/authenticate. The 'Access-Control-Allow-Origin' header contains multiple values 'http://localhost, *', but only one is allowed. Origin 'http://localhost' is therefore not allowed access.

Заголовок ответа на предполетный запрос:

Request Method:OPTIONS
Status Code:200 OK
Access-Control-Allow-Headers:Origin, Content-Type, Authorization, Accept, X-Request-With
Access-Control-Allow-Origin:*
Allow:OPTIONS, TRACE, GET, HEAD, POST
Public:OPTIONS, TRACE, GET, HEAD, POST
Server:Microsoft-IIS/8.5
X-Powered-By:ASP.NET

Фактический заголовок ответа на запрос:

Request Method:POST
Status Code:200 OK
Access-Control-Allow-Headers:Origin, Content-Type, Authorization, Accept, X-Request-With
Access-Control-Allow-Origin:http://localhost
Access-Control-Allow-Origin:*
Content-Type:application/json
Server:Microsoft-IIS/8.5
Set-Cookie:XSRF-TOKEN=eyJpdiI6IkpwNnU2mTnc9PSIsInam9jTFpxb0ptak1IMmFsQ3ZZhbMTM5ZTMzMjgyZWIyNCJ9; expires=Thu, 27-Aug-2015 12:52:55 GMT; Max-Age=7200; path=/; httponly
Vary:Origin
X-Powered-By:ASP.NET
X-Powered-By:PHP/5.6.0

Итак, почему "Access-Control-Allow-Origin" повторяется "в фактическом заголовке ответа на запрос.

Безопасно ли добавлять "Access-Control-Allow-Origin" в файл web.config.


person leoel    schedule 27.08.2015    source источник


Ответы (1)


Правильное решение этой проблемы:

  • Установите модуль CORS в IIS и
  • Настройте CORS в файле web.config

Справочник по настройке модуля IIS CORS

person leoel    schedule 21.03.2018