RSS

Vấn đề triển khai đơn giản javascript AJAX tên miền chéo POST truy cập từ xa

ngày phát hành:2022/11/12 11:06

Trên thực tế, vấn đề rất đơn giản, bạn có thể POST yêu cầu và máy chủ cũng trả về phản hồi, đó là cơ chế bảo mật của các trình duyệt hiện đại ngăn không cho javascript cục bộ xử lý phản hồi. Bảng điều khiển gỡ lỗi hiển thị:

Quyền truy cập vào XMLHttpRequest tại 'https://ip.taotu.org/' từ nguồn gốc 'null' đã bị chính sách CORS chặn: Không có tiêu đề 'Kiểm soát truy cập-Cho phép-Xuất xứ' trên tài nguyên được yêu cầu.

Vấn đề là nếu bạn đăng một trang cục bộ, trình duyệt sẽ tự động thêm tiêu đề Origin: null và nếu máy chủ không thêm tiêu đề phản hồi Access-Control-Allow-Origin: * khi trả về phản hồi hoặc tiêu đề giá trị do máy chủ trả về giống với giá trị của bạn Nếu Nguồn gốc trong tiêu đề đã gửi không khớp, ứng dụng khách trình duyệt sẽ không chuyển dữ liệu phản hồi cho javascript để xử lý, dẫn đến lỗi.

Giải pháp: Thật ra rất đơn giản, code back-end của server, chúng ta chỉ cần kiểm tra xem dữ liệu post có chứa thông tin quy định hay không (tương đương với mật khẩu của chính chúng ta), nếu có thì thêm Access-Control-Allow-Origin: *, để khách hàng có thể được xử lý chính xác.

Tóm tắt là các yêu cầu tên miền chéo AJAX không được phép theo mặc định và trình duyệt sẽ cấm chúng. Máy chủ đánh giá xem tình huống có cần thiết hay không và trả về tiêu đề phản hồi Access-Control-Allow-Origin:* và điều đó là OK.

Yêu cầu trang mã javascript:

var xhttp = new XMLHttpRequest();

xhttp.onreadystatechange = function () {

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

document.getElementById("queryipinfo").innerHTML =

cái này.responseText;

}

};

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

xhttp.send('XX đến từ yêu cầu từ xa XX'+ipdomain); // Chuỗi trước đó được thêm bởi mã khóa tương đương với mật khẩu của chính chúng ta

Mã xử lý phía máy chủ:

Luồng oPostData = Request.InputStream;

byte[] bPostByte=byte mới[oPostData.Length];

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

chuỗi sPostIPDomain=Encoding.UTF8.GetString(bPostByte);

bool bFromRemote;

if (sPostIPDomain.StartsWith("XX đến từ yêu cầu từ xa XX")) //mã khóa

{

bFromRemote=true;

sPostIPDomain = Regex.Replace(sPostIPDomain,"XX đến từ yêu cầu từ xa XX(.*)", "$1");

*********Mã bị bỏ qua********

if (bFromRemote) // Mã khóa để đánh giá xem có trả lại tiêu đề hay không

Response.AddHeader("Kiểm soát truy cập-Cho phép-Xuất xứ", "*");//mã khóa

Nhân tiện, giải pháp thông thường là đặt Access-Control-Allow-Origin: * trong tiêu đề phản hồi của máy chủ để cho phép tất cả các yêu cầu tên miền chéo hoặc Access-Control-Allow-Origin: https://taotu.org để cho phép Yêu cầu được gửi bởi miền được chỉ định được sử dụng để phát triển mạng bình thường, nhưng nếu yêu cầu là miền yêu cầu được gửi cục bộ tại nhà là một địa chỉ IP và đó không phải là IP cố định, điều này không thể giải quyết được trong một thời gian dài, vì vậy Tôi đã sử dụng giải pháp Đơn giản này.

Mục đích của tôi là đặt một tệp .html tĩnh trong trình duyệt của máy tính cục bộ ở nhà và đặt nó làm trang chủ mặc định. Mỗi khi tôi mở trình duyệt, tôi gửi yêu cầu đăng bài đến máy chủ từ xa thông qua java và trả về của tôi IP mạng bên ngoài và hiển thị nó. Ngoài ra còn có một số liên kết trang web thường được sử dụng của tôi trên trang tĩnh, cũng như công cụ tìm kiếm ba trong một.

Đây là trang web nhỏ do mình lập, mời các bạn ghé thăm hoặc đặt làm trang chủ: https://ip.taotu.org

Vấn đề triển khai đơn giản javascript AJAX tên miền chéo POST truy cập từ xa

bình luận của người dùng

Thêm bình luận mới

mã xác nhận

188BET - Nền tảng cá cược thể thao tốt nhất Châu Á