2016-02-09 10 views
5

Tôi đang tạo một API JSON rất đơn giản trong Java. Nó thực sự là một mod Project Zomboid phục vụ tọa độ đối tượng. Đây là cách xử lý HTTP của tôi trông giống như:Tiêu đề CORS 'Access-Control-Allow-Origin' không khớp ... nhưng nó‼

public class JSONZomboid implements HttpHandler 
{ 
    @Override 
    public void handle(HttpExchange t) throws IOException { 
     // HEADERS 
     Headers headers = t.getResponseHeaders(); 
     headers.set("Content-Type", "text/json"); 
     headers.set("Access-Control-Allow-Origin", "pzmap.crash-override.net");     
     t.sendResponseHeaders(200,0); 
     //BODY 
     OutputStream os = t.getResponseBody(); 
     os.write("{\n".getBytes()); 
      // generate JSON here 
     os.write("}".getBytes()); 
     os.close(); 
    } 
} 

Tôi muốn tải này vào dự án bản đồ dự án Zomboid sử dụng UserScript có nghĩa là tôi cần phải kích hoạt CORS để kết nối. Này được thực hiện thông qua mã đơn giản:

PlayerRenderer.prototype.fetchInfo = function() { 
    $.get("http://127.0.0.1:8000/test", {}, this.displayPoints.bind(this)); 
} 

Nhưng tôi nhận được lỗi này:

warning http://images.michaelsync.net/images/2007/09/warningicon.png Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://127.0.0.1:8000/test . (Reason: CORS header 'Access-Control-Allow-Origin' does not match 'pzmap.crash-override.net').

Ngay cả trong giao diện điều khiển tôi có thể thấy rõ lỗi là sai lầm:

image description

Nếu Tôi đã không ghét CORS, tôi bắt đầu ghét nó ngay bây giờ. Bạn có thể vui lòng cho tôi biết chuỗi thực sự thuộc về tiêu đề gốc cho phép không?

+2

Tiêu đề phải có tên máy chủ của trang web được phép truy cập nội dung. Nếu bạn đang tải các trang của bạn từ một trang web được lưu trữ tại 'pzmap.crash-override.net' thì nó sẽ hoạt động. Lỗi này cho bạn biết tiêu đề chứa gì, không phải tên miền nguồn là gì. – Pointy

+1

Bạn có thể xem trang web nào tôi đang tải từ các tiêu đề yêu cầu ('Origin' và' Referer'). –

+0

Thật ra rất khó để xem chi tiết trong những hình ảnh đó trên một màn hình nhỏ:/ – Pointy

Trả lời

1

Chú thích # 1 ở trên là chính xác: CORS cần tiêu đề Access-Control-Allow-Origin để khớp với yêu cầu ban đầu của ứng dụng (cho trải nghiệm SSL đầu cuối). Vì vậy, trong trường hợp này, hãy chắc chắn bạn đặt pzmap.crash-override.net trong các tiêu đề Access-Control-Allow-Origin của bạn.

Hai lưu ý:

1- Mặc dù những gì bạn có thể đọc trực tuyến, nginx hiện đòi hỏi nhiều mục được liệt kê như là dòng riêng biệt, a la: add_header Access-Control-Allow-Origin "https://developers.google.com"; add_header Access-Control-Allow-Origin "https://imasdk.googleapis.com";

2 - Cũng bất chấp những gì bạn có thể đọc trực tuyến, việc sử dụng ký tự đại diện không được chấp nhận. Không phải tất cả khách hàng (nghĩa là trình duyệt) đều cho phép.

Các vấn đề liên quan