RSS

Проблема простой реализации javascript AJAX междоменного удаленного доступа POST

Дата выпуска:2022/11/12 11:06

На самом деле проблема очень проста, вы можете отправить запрос, и сервер также вернет ответ, это механизм безопасности современных браузеров, который не позволяет локальному javascript обрабатывать ответ. Консоль отладки показывает:

Доступ к XMLHttpRequest по адресу «https://ip.taotu.org/» из источника «null» заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».

Проблема в том, что если вы публикуете локальную страницу, браузер автоматически добавит заголовок Origin: null, а если сервер не добавит заголовок ответа Access-Control-Allow-Origin: * при возврате ответа, или заголовок значение, возвращаемое сервером, совпадает с вашим. Если Origin в отправленном заголовке не совпадает, клиент браузера не передаст данные ответа в javascript для обработки, что приведет к ошибке.

Решение: На самом деле все очень просто, код бэкенда сервера, нам нужно только проверить, содержат ли данные поста указанную информацию (эквивалентную нашему собственному паролю), если да, добавляем Access-Control-Allow-Origin: *, так что клиент может быть обработан правильно.

Подводя итог, можно сказать, что междоменные запросы AJAX не разрешены по умолчанию, и браузер запретит их.Сервер оценивает, требует ли этого ситуация, и возвращает заголовок ответа Access-Control-Allow-Origin:*, и все в порядке.

Код javascript страницы запроса:

var xhttp = новый XMLHttpRequest();

xhttp.onreadystatechange = функция () {

if (this.readyState == 4 && this.status == 200) {

document.getElementById("queryipinfo").innerHTML =

это.responseText;

}

};

xhttp.open("POST", "https://ip.taotu.org", true);

xhttp.send('XX получено из удаленного запроса XX'+ipdomain); //Предыдущая строка, добавленная кодом ключа, эквивалентна нашему собственному паролю

Код обработки на стороне сервера:

Stream oPostData = Request.InputStream;

byte[] bPostByte=новый байт[oPostData.Length];

oPostData.Read(bPostByte, 0, (int)oPostData.Length);

строка sPostIPDomain=Encoding.UTF8.GetString(bPostByte);

логический bFromRemote;

if (sPostIPDomain.StartsWith("XX исходит из удаленного запроса XX")) //код ключа

{

bFromRemote=истина;

sPostIPDomain = Regex.Replace(sPostIPDomain,"XX исходит из удаленного запроса XX(.*)", "$1");

*********Код опущен********

if (bFromRemote) // Код ключа, чтобы определить, следует ли возвращать заголовок

Response.AddHeader("Access-Control-Allow-Origin", "*");//код ключа

Кстати, нормальное решение — установить Access-Control-Allow-Origin: * в заголовке ответа сервера, чтобы разрешить все междоменные запросы, или Access-Control-Allow-Origin: https://taotu.org, чтобы разрешить Запрос, отправленный указанным доменом, используется при нормальном развитии сети, но если требование состоит в том, чтобы домен запроса, отправленный локально дома, был IP-адресом, а не фиксированным IP, это не может быть решено в течение длительного времени, поэтому Я использовал это простое решение.

Моя цель - установить статический файл .html в браузере локального компьютера дома и установить его в качестве домашней страницы по умолчанию.Каждый раз, когда я открываю браузер, я отправляю почтовый запрос на удаленный сервер через java и возвращаю мой внешний сетевой IP-адрес и отображать его. На статической странице также есть некоторые из моих часто используемых ссылок на веб-сайты, а также поисковая система «три в одном».

Это небольшая веб-страница, которую я создал, приглашаю посетить или установить ее в качестве домашней страницы: https://ip.taotu.org

Проблема простой реализации javascript AJAX междоменного удаленного доступа POST

Отзывы пользователей

Добавьте новый комментарий

Проверка

188bet - лучшая спортивная платформа в Азии