#javascript #cors
#javascript #корс
Вопрос:
Я хочу написать скрипт на javascript. Затем запустите его с помощью моего браузера на моем локальном компьютере, чтобы загрузить текстовые файлы с другого веб-сайта, а затем обработать эти данные с помощью js.
Я пробовал это:
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
console.log("readyState: " this.readyState ", status: " this.status);
if (this.readyState == 4 amp;amp; this.status == 200) {
document.getElementById("data").innerHTML = this.responseText;
}
};
xhttp.open("GET", "http://website.com", true);
xhttp.send();
Но я всегда получаю эту ошибку:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://website.com. (Reason: CORS request did not succeed)
Я использую Firefox. Неужели это невозможно сделать? Могу ли я не загружать данные с других веб-сайтов, используя js в моем браузере?
Комментарии:
1. Некоторые веб-сайты блокируют возможность использования AJAX для доступа к своим данным, вы можете использовать CURL.
2. @NirTzezana — Больше того, они не разблокируют это. По умолчанию используется блокировка.
3. @T.J.Crowder верно, по умолчанию он заблокирован.
Ответ №1:
Могу ли я не загружать данные с других веб-сайтов, используя js в моем браузере?
Только если они позволят вам, поддерживая CORS и разрешая ваш origin или предоставляя API JSONP (а не ajax).
Однако, поскольку вы делаете это локально, если вы хотите использовать JavaScript для этого, вы можете сделать это с Node.js а не в браузере. Та же политика Origin применяется, в частности, к браузерам (это для вашей защиты, а не для защиты веб-сайта). Это не относится к приложениям без браузера, таким как Node.js .
Или, если вы использовали JavaScript только потому, что считали это необходимым, вы можете использовать любое количество других инструментов (таких curl
как в * nix).
Комментарии:
1. Хорошо, спасибо, я не знал, что сервер заблокировал это, я думал, что это мой браузер, я хотел использовать javascript в своем браузере, но если это не сработает так, я использую что-то другое.
2. @Alexanus — На самом деле блокировку выполняет ваш браузер. Когда вы делаете запрос из разных источников, если сервер не включает в ответ определенные HTTP-заголовки, браузер отказывается передавать ответ в код JavaScript. Таким образом, по умолчанию запросы из разных источников заблокированы, но сервер может разрешить выполнение запроса путем предоставления HTTP-заголовков, сообщающих браузеру, что можно передать ответ в код JavaScript. По сути, речь идет о том, чтобы не разрешать веб-сайту A видеть информацию с веб-сайта B, если веб-сайт B специально не разрешает доступ к этой информации с A.
3. Представьте A как
malicious.example.com
и B какyourbank.com
. 🙂 Проблема в том, что если у вас активный сеанс просмотра с вашим банком, переход кmalicious.example.com
не должен приводить к утечке информации о ваших финансах изyourbank.com
вmalicious.example.com
(или, что еще хуже, случайно разрешитьmalicious.example.com
перевод с вашей учетной записи …).