2016-10-19 1 views
1

Я пишу небольшой скрипт для доступа к внешнему API для работы. Я изначально сделал это на Python, и все сработало нормально.Ошибка CORS с Javascript, но не с Python/PHP

Меня попросили попробовать и сделать это в Javascript. Теперь я не программист, но я знаю (или верю), что Javascript в основном для клиентской стороны, тогда как PHP или Python действительно предназначены для серверных операций. Когда я писал сценарий в Python У меня не было никаких проблем, но в JavaScript, я получаю

Response to preflight request doesn't pass access control check: No 
'Access-Control-Allow-Origin' header is present on the requested 
resource. 

ошибку. Из того, что я читал о CORS here и подобных вопросах в Stack, это имеет смысл, но я не совсем понимаю, почему я не получаю подобную ошибку в Python или PHP ...

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

+0

Проверка CORS выполняется только на веб-браузерах на стороне клиента, поэтому вы запускаете ее в любое время, когда сценарий в веб-документе в определенном происхождении делает запрос с кросс-началом (использует XHR или Fetch для извлечения некоторого ресурса из другой изначальный). На стороне сервера ваш код может извлекать ресурсы из любого источника, который вы хотите, без проверки CORS. – sideshowbarker

+0

Значит, вы не можете просто сказать браузеру не проверять CORS или что-то заблокированное в браузере? – Morgan

+0

Подобный вопрос: [Почему создание python запрашивает работу запроса и JQuery ajax Get не?] (Http://stackoverflow.com/questions/22261017/why-does-making-a-python-requests-request-work- и-JQuery-Ajax-получить делает-не) – user2314737

ответ

1

От Mozilla's documentation:

По соображениям безопасности, браузеры ограничивают кросс-происхождения HTTP запросы инициируемые в скриптах. Например, XMLHttpRequest и Fetch следуют политике одного и того же происхождения. Таким образом, веб-приложение, использующее XMLHttpRequest или Fetch, могло только делать HTTP-запросы в своем собственном домене.

Так как JavaScript в браузере использует XMLHttpRequest и fetch делать HTTP запросы, они подлежат исполнению политики CORS.

Более подробную информацию о the reasons for CORS:

CORS предназначен, чтобы позволить хозяевам ресурсов (любую услугу, которая делает его данные доступны через HTTP), чтобы ограничить, какие веб-сайты могут получить доступ к этим данным.

Пример: У вас размещен веб-сайт, на котором отображаются данные о трафике, и вы используете запросы AJAX на своем веб-сайте. Если SOP и CORS не были там, любой другой веб-сайт мог бы показывать ваши данные трафика просто AJAXing до ваших конечных точек; любой может легко «украсть» ваши данные и, следовательно, ваши пользователи и ваши деньги.

Внешний API, который вы используете, предположительно реализовал политику CORS намеренно. Например, если для API требуется секретный ключ на уровне приложения для проверки подлинности, политика CORS будет препятствовать использованию этого ключа в общедоступной среде (а именно в браузере). В качестве альтернативы API может иметь список допустимых доменных имен для CORS, который не включает домен, который вы используете в настоящее время.

Это всего лишь несколько примеров; может существовать множество причин, по которым API должен использовать заголовки CORS.

Смежные вопросы