OPTIONS 405 (Method Not Allowed) независимо от того, что сервер отправляет Access-Control-Allow-Methods: OPTIONS, GET, HEAD, POST

Я пытаюсь сделать междоменный запрос, и мой сервер настроен на отправку следующих заголовков:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:x-requested-with, Authorization
Access-Control-Allow-Methods:OPTIONS, GET, HEAD, POST
Access-Control-Allow-Origin:*

Но когда делается запрос OPTION, я получаю OPTIONS 405 (Method Not Allowed) ошибку.

Любые идеи, в чем проблема и как ее исправить?


person Spadar Shut    schedule 08.11.2012    source источник
comment
Возможный дубликат Access-Control-Allow-Origin с несколькими исходными доменами?   -  person kenorb    schedule 14.11.2016


Ответы (3)


Я бы предложил 2 решения:

1) Если вы используете WebAPI, вам необходимо реализовать метод option, который по соглашению должен выглядеть так:

public class XXXController : ApiController
{
    // OPTION http-verb handler
    public string OptionsXXX()
    {
        return null; // HTTP 200 response with empty body
    }

    ...
}

2) Если вы не используете WebAPI, попытайтесь понять, какая часть вашего кода вызывает OPTIONS 405 (Method Not Allowed) ошибку для вызова OPTION. В этом случае я бы проверил, пытаюсь ли я добавить в Web.config файл эти <customHeaders/>, которые работают:

<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <!-- CORS temporary solution -->
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type, Authorization, Accept, X-Requested-With" />
        <add name="Access-Control-Allow-Methods" value="OPTIONS, TRACE, GET, HEAD, POST, PUT" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>
person Filippo Vitale    schedule 08.02.2013

Ваш веб-сервер / приложение может быть настроено для отправки указанного заголовка ответа для каждого запроса HTTP GET и POST. Но настроен ли ваш веб-сервер для обработки HTTP OPTIONS Verb?

Если вам нужна дополнительная информация, укажите используемый вами веб-сервер и технологию программирования приложений.

Немного предыстории, браузеры отправляют запрос OPTIONS, когда у вас есть междоменный запрос с некоторыми настраиваемыми заголовками запросов. Этот запрос делается до фактического запроса. Браузер сделает фактический запрос только в том случае, если этот запрос вернется с указанным вами заголовком ответа.

// Эти запросы OPTIONS называются запросами предварительной проверки - обычно инструменты разработки браузеров не отслеживают их на своей вкладке сети. F

person humblelistener    schedule 08.11.2012
comment
Спасибо за ваш комментарий. Сервер - IIS 7. Как мне настроить его для обработки ОПЦИЙ? - person Spadar Shut; 09.11.2012
comment
Похоже, хорошее направление. Не могли бы вы предоставить какую-нибудь рекомендуемую ссылку о том, как обрабатывать HTTP Options глагол? - person Blaise; 27.08.2014
comment
Кратчайшее объяснение команды @Blaise для обработки команды параметров описано в stackoverflow.com/a/13646169/570239 - для получения дополнительных сведений о том, как в веб-api ‹2 и asp.net mvc в сгенерированном виде проверьте это codeguru.com/csharp/.net/net_asp/. Для веб-API 2 проверьте asp .net / web-api / overview / security / - person humblelistener; 27.08.2014
comment
Этот последний комментарий, наконец, решил мою проблему для webapi 2: Install-Package Microsoft.AspNet.WebApi.Cors и httpEnableConfig.EnableCors () - person pauldendulk; 13.04.2015

Вам нужно будет изменить OPTIONSVerbHandler по умолчанию. Если вы используете asp classic, это будет означать добавление следующих строк в ваш файл Web.config:

    <handlers>
        <remove name="OPTIONSVerbHandler" />
        <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="IsapiModule" scriptProcessor="C:\Windows\System32\inetsrv\asp.dll" resourceType="Unspecified" requireAccess="None" />
    </handlers>
person Anatoly Alekseev    schedule 03.11.2016