Tôi là một tân binh về phát triển web và sau rất nhiều khó khăn thông qua web, tôi đã đi đến một giải pháp. Tôi đang chia sẻ nó vì tôi cảm thấy nó không được tài liệu thực sự tốt và có thể được người khác sử dụng và vì tôi cần một số phản hồi.Làm thế nào để thiết lập chính sách tên miền chéo thực sự với mùa xuân và jquery
Tôi muốn cấp quyền truy cập tên miền cụ thể cho API.
Trước hết, tôi đã cố gắng đặt tiêu đề của yêu cầu nhưng nó không hoạt động chút nào vì hai lý do.
Lý do đầu tiên là tôi đã không cho phép nó trong crossdomain.xml:
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
<allow-http-request-headers-from domain="domain1WithoutSlashAtTheEnd" headers="*"/>
<allow-http-request-headers-from domain="domain2WithoutSlashAtTheEnd" headers="*"/>
</cross-domain-policy>
Lý do thứ hai là tôi đã cố gắng để thiết lập các "access-control-phép-gốc" tiêu đề khi nó vô dụng. Bất kỳ tiêu đề tùy chỉnh nào như thế này đều bị bỏ qua. Trên thực tế, máy chủ không cần bất cứ điều gì thuộc loại đó và hành vi mặc định của ông cho phép tôi để có được nguồn gốc (tên miền) của cuộc gọi mà tôi đã có thể xử lý nó trong một bộ lọc như sau:
String origin = hsRequest.getHeader("Origin");
if (allowedDomainList.contains(origin)) {
hsResponse.setHeader("Access-Control-Allow-Origin", origin);
} else {
throw new SomeException("domain not allowed");
}
nơi " allowedDomainList "là danh sách Chuỗi trong đó tôi cung cấp tất cả các miền mà tôi cho phép truy cập vào API của mình. Dường như hoạt động tốt. Bạn nghĩ gì về nó? Bạn có thể cụ thể hơn về:
headers="*"
Có thể chỉ nói "Access-Control-Allow-Origin". Sau đó, tôi đã thấy rằng có một thuộc tính "an toàn" và tôi không biết phải làm gì với nó.
Tôi cũng có một vấn đề với mã mà tôi đã có:
<!DOCTYPE cross-domain-policy
SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
Và tôi tự hỏi làm thế nào nó có thể interfer với hành vi của chính sách của tôi. Dường như nó không có tác động nhưng crossdomain.xml không rõ ràng với tôi.
Điểm cuối cùng là về jQuery (http://api.jquery.com/jQuery.ajax/). Tại sao jQuery có một điều để thiết lập các tiêu đề nếu chúng ta không thể có được chúng ở phía máy chủ? Thêm vào đó, nó có hai cách "đưa ra" các tiêu đề: sử dụng "beforeSend" và "headers". 2 điểm này không có ý nghĩa với tôi và như bạn có thể thấy ở trên, nó làm tôi mất rất nhiều thời gian cho không có gì cuối cùng!
Cảm ơn bạn đã trả lời!
Nếu bạn đang liên lạc giữa iFrames và không quan tâm đến IE6 & 7, bạn có thể sử dụng 'postMessage()' mới. https://developer.mozilla.org/en-US/docs/DOM/window.postMessage –
String origin = hsRequest.getHeader ("Nguồn gốc"); \t \t \t if (allowedDomainList.contains (gốc)) { \t \t \t \t hsResponse.setHeader ("Access-Control-Allow-Origin", nguồn gốc); \t \t \t} người khác { \t \t \t \t trở về; \t \t \t} – user1835565
Ở trên, hiệu chỉnh của riêng tôi. Vẫn đang thử nghiệm. Tôi không muốn sử dụng iframe, tôi muốn miền bên ngoài chịu trách nhiệm 100% đối với mã của anh ấy. Tôi chỉ cung cấp các chức năng của máy chủ. – user1835565