Отладка Access-Control-Allow-Origin с помощью Chrome / WebKit - PullRequest
7 голосов
/ 21 января 2011

Я пытаюсь использовать Обмен ресурсами между источниками с Access-Control-Allow-Origin и связанными заголовками. У меня он работает на Firefox, но Chrome выдаёт мне ошибки разрешения, которые выглядят так:

XMLHttpRequest cannot load <remote>. Origin <local> is not allowed by Access-Control-Allow-Origin.

Сетевой инспектор показывает запрос, но не отвечает (и не включает предварительный запрос и ответ OPTIONS). Я проверил вывод запроса, используя curl и воспроизведя все заголовки, и то, что я вижу, соответствует тому, что подразумевает спецификация (и снова, что принимает Firefox). Я в недоумении, как отладить это дальше - есть ли уловки для наблюдения за сетевой активностью на более низком уровне, чем обычно обеспечивает Chrome? Информация о том, как Chrome интерпретирует запросы CORS иначе, чем Firefox?

1 Ответ

5 голосов
/ 25 января 2011

Я подозреваю, что вы видите предварительную проверку, за которой следует сбой запроса Chrome из-за ошибки. Это объясняет, почему все работает в Firefox, а не в Chrome.

Вы отправляете произвольные заголовки в вашем запросе? В WebKit есть ошибка, из-за которой запросы GET с пользовательскими заголовками не выполняются (ошибка здесь: http://code.google.com/p/chromium/issues/detail?id=57836).. Я также заметил, что Chrome иногда ожидает заголовок Content-Type в списке Access-Control-Allow-Headers, хотя Content -Тип простой заголовок.

Кроме того, вы упомянули, что сетевой инспектор не включает предварительную проверку OPTIONS? Какой сетевой инспектор вы используете? Я бы порекомендовал использовать Wireshark, так как он дает вам подробную информацию о фактическом сетевом трафике, который не обеспечивает инспектор Chrome (например, Wireshark будет регистрировать предварительные запросы).

Некоторые другие советы по отладке:

Попробуйте запрос в Safari. Это поможет сузить проблему до ошибки Chrome или WebKit.

Когда я видел ошибку, которую вы видите (Wireshark показывает запрос, но не ответ), это происходит потому, что мой сервер не включает заголовок Access-Control-Allow-Origin, который не включен, потому что Chrome не отправляет заголовок Origin (см. Ошибку выше). В трассировке вашей сети вы видите заголовок Origin в запросе? Имеете ли вы контроль над сервером и получает ли он заголовок Origin?

Трудно отладить актуальную проблему без дополнительных подробностей. Если у вас все еще есть проблемы, вы можете опубликовать заголовки запроса / ответа здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...