То, что я пытаюсь сделать
Сообщение с локального веб-сайта html / javascript в онлайн-файл PHP.
проблема
Когда я пытаюсь использовать мой код ниже, я продолжаю получать приведенную ниже ошибку.
Задний план:
Этот веб-сайт предназначен для работы на местном уровне. Поскольку каждый пользователь выбирает, какой браузер он использует, я ищу, чтобы найти подход, который мог бы решить вышеизложенное, не изменяя модификацию политики браузера для каждого пользователя.
Возможно ли это, если да, то как?
Код Javascript:
$.ajax({ type: 'POST', url: 'http://example.com/test.php', crossDomain: true, data: "my_request_is=foo", dataType: 'json', success: function(responseData, textStatus, jqXHR) { console.log(responseData); }, error: function (responseData, textStatus, errorThrown) { console.warn(responseData, textStatus, errorThrown); alert('CORS failed - ' + textStatus); } });
Код Php (test.php):
<?php header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); header('Access-Control-Max-Age: 1000'); header('Access-Control-Allow-Headers: Content-Type'); echo json_encode(array("your_request_was" => $_POST['my_request_is'])); ?>
Ошибка:
По умолчанию запросы перекрестного происхождения не разрешены в chrome, chromium from file:
protocol. Вы можете закрыть открытые экземпляры chrome, chromium и launch с --disable-web-security
google-chrome --disabled-web-security
или запуск с существующими экземплярами открыт, установив другой user-data-dir
google-chrome --disable-web-security --user-data-dir="~/.config/google-chrome-temp"
есть ли подход, который мог бы выполнить то, что мне нужно сделать, не требуя от меня изменения политик локальных веб-браузеров?
Не на хром, хром без изменения настроек по умолчанию; или создание расширения хрома или приложения для выполнения сетевых запросов – там, где также необходимо установить правильные permissions
.
Это ограничение существует для определенной цели. Одна из нескольких проблем безопасности заключается в том, что пользователь на локальном компьютере может, возможно, неосознанно, загрузить список всех файлов в одном или нескольких каталогах на своем компьютере, и, возможно, сами каталоги, не обязательно осознавая этот факт, см.
Как работает FileReader.readAsText в API файлов HTML5?
который; примечание, также может происходить без установки флажков. Или запрошенный скрипт мог выполнять действия для чтения или записи в локальную файловую систему, не зная, что их локальная файловая система обращается к внешнему скрипту.
Хотя с ограничениями на месте пользователь должен выполнить утвердительные действия, чтобы отключить настройки по умолчанию, ограничивающие доступ к локальной файловой системе из file:
протокол и ограничение локальной файловой системы для извлечения ресурсов из null
origin
в другое происхождение.
Как отметил @StefanoBalzarotti
извините, если я суетливый, но это ограничение не связано с протоколом «file:», даже с «data:», «about:» и т. д. … вы не можете сделать запрос на перекрестный поиск. Требование сделать запрос на перекрестный поиск состоит в том, чтобы иметь хост для происхождения
которые следует учитывать в отношении причин, по которым разработчики браузеров будут применять такое ограничение по умолчанию для запроса на перекрестный поиск.
Используются экономно и с осознанием значимости флагов, флаги --disable-web-security
и --allow-file-access-from-files
, см.
Как сделать флаг Google Chrome «-allow-file-access-from-files» постоянным?
Список переключателей командной строки Chromium
предназначены для локальной веб-разработки, а не как обходное решение для локального приложения, которое требует ресурсов из веб-приложения.
--disable-web-security
Не применяйте политику одинакового происхождения. (Используется людьми, проверяющими их сайты.)
--allow-file-access-from-files
По умолчанию файлы: // URI не могут читать другие файлы: // URI. Это переопределение для разработчиков, которым требуется старое поведение для тестирования.
Термин «тестирование» в описании флагов должен обеспечивать акцент на использовании флагов. Флаги не предназначены для использования в производстве.
Альтернативы,
Создайте расширение хрома для выполнения сетевых задач;
Создайте приложение Chrome для выполнения сетевых задач
где либо требуются правильные настройки permissions
в manifest.json
.
Из-за настроек безопасности chrome для создания XMLHttpRequest вам необходимо иметь действительное происхождение и действительное место назначения.
Место назначения является допустимым доменом, и поскольку у вас включен доступ к Access-Control-Allow-Origin, вы можете сделать запрос из разных источников.
Но источник не является допустимым доменом, потому что вы делаете запрос с локальной страницы.
Происхождение должно быть допустимым хостом / идентификатором (домен для веб-сайта, идентификатор расширения браузера, идентификатор приложения для веб-просмотра, встроенного в приложение).
У вас есть возможность решить проблему:
отключить настройки безопасности браузера: образец для хром:
chromium-browser –disable-web-security –user-data-dir
проверьте этот ответ, как использовать: https://stackoverflow.com/a/3177718/5081328
встройте свою страницу в приложение и используйте веб-просмотр
Создайте расширение браузера, чтобы загрузить свою страницу.