Проблема простой реализации 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
Отзывы пользователей
Добавьте новый комментарий