Назад | Перейти на главную страницу

IIS прерывает запросы CORS REST API со статусом 500… только для одного URI

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


Я использую AJAX для выполнения запросов CORS к api, но вижу действительно странное поведение: мое отслеживание кликов (предварительный запрос OPTIONS) всегда прерывается IIS и возвращает 500, прежде чем запрос будет передан приложению.

Для сравнения, вот рядом сбойный запрос (слева) и успешный запрос (справа), как видно в инспекторе запросов Firefox (щелкните, чтобы увидеть полный размер) ...

пример плохого (слева) и хорошего (справа) запроса CORS запросов предполетных опций http://note.io/14XuOkq

Обратите внимание, что оба этих запроса являются автоматически сгенерированными предполетными запросами, созданными jQuery (1.8.3), обращающимися к одному и тому же серверу с той же страницы, с интервалом всего в несколько секунд. Множество других запросов работают нормально и продолжают нормально работать после неудачного запроса OPTIONS для /click. Но каждый запрос на /click не работает точно так же.

Предполетная подготовка к /click не удается из-за отсутствия ACCESS-CONTROL-ALLOW-HEADERS заголовок ответа; но если бы IIS разрешил приложению отвечать на запрос, оно было бы включено и ответило бы статусом 200 (точно так же, как тот, что справа) ...

Я не могу понять, зачем IIS это делает.

Я должен отметить, что API не всегда включает ACCESS-CONTROL-ALLOW-HEADERS заголовок ответа. Я только недавно добавил это, так что возможно, мы смотрим на результат того, что что-то застряло где-то в кеше. Тем не менее, я пробовал и в Firefox, и в Chrome, и сделал «удалить все, что сохранил все до начала времени» в обоих, так что теоретически это не должно кэшироваться, верно?

Я также пробовал изменить URI на /click2 в целях тестирования, после исправление проблемы с заголовками, поэтому теоретически это не должно быть проблемой кеширования для этого URI, если это для другого. Однако проблема сохраняется и с этим новым URI.

Можно ли включить дополнительные журналы в IIS, чтобы выяснить, в чем проблема? Настройки я должен проверить? Какая-то известная проблема? Я в полной растерянности, здесь ...

Я вижу, что отказавший запрос - это запрос POST.

Настройте ACCESS-CONTROL-ALLOW-METHODS, чтобы включить POST.

Это должно решить вашу проблему