Tôi không chắc vấn đề này có liên quan đến công nghệ hay hiểu biết của tôi về công nghệ hay không.Không được phép truy cập nguồn gốc Access-Control-Allow-Origin - cách bật CORS bằng cách sử dụng ngăn xếp web rất đơn giản và guice
Tôi có một ứng dụng html5 được viết bằng javascript và html được lưu trữ trên máy chủ apache 2.2.
Tôi có một ứng dụng java được viết bằng java sử dụng cầu cảng, guice, jackson, jersey lưu trữ một dịch vụ REST đơn giản.
Cả hai ứng dụng chạy trên cùng một hộp, một trên cổng 80 (ứng dụng thuần túy html5 lưu trữ trên apache), người kia trên 8080 (ứng dụng java tinh khiết được lưu trữ trên cầu cảng/Guice)
Tôi tin rằng câu trả lời là trong tiêu đề im gửi lại. Tiêu đề CORS cho trình duyệt biết bạn cho phép các ứng dụng bên ngoài truy cập api của bạn. Tôi không thể tìm ra cách để cấu hình Jetty của tôi, máy chủ Guice để trả về các tiêu đề CORS đúng.
Tôi đang sử dụng máy chủ Jetty được nhúng nên tôi không có tệp web.xml để thêm tiêu đề.
Nó cũng có thể liên quan đến cách máy chủ ứng dụng HTML5 (trong trường hợp này là apache 2.2) đang phục vụ ứng dụng.
Các tập tin httpd.conf apache có mục:
LoadModule headers_module modules/mod_headers.so
<IFModule mod_headers>
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE, HEAD
Header add Access-Control-Allow-Headers: X-PINGOTHER
Header add Access-Control-Max-Age: 1728000
</IfModule>
trong cấu hình Guice servlet của tôi, tôi có như sau:
public class RestModule extends ServletModule{
@Override
protected void configureServlets() {
bind(QuestbookService.class);
// hook Jersey into Guice Servlet
bind(GuiceContainer.class);
// hook Jackson into Jersey as the POJO <-> JSON mapper
bind(JacksonJsonProvider.class).in(Scopes.SINGLETON);
Map<String, String> guiceContainerConfig = new HashMap<String, String>();
guiceContainerConfig.put(ResourceConfig.PROPERTY_RESOURCE_FILTER_FACTORIES,
HttpStatusCodeMetricResourceFilterFactory.class.getCanonicalName());
serve("/*").with(GuiceContainer.class, guiceContainerConfig);
}
}
Tôi nghĩ rằng vấn đề là ở cấu hình Guice của tôi kể từ khi tôi don không có nơi để đặt tiêu đề phản hồi.
Tôi đang sử dụng máy chủ cầu nối được nhúng và do đó tôi đã tìm chế độ dev sẽ bỏ qua toàn bộ kiểm tra, nhưng tôi có thể sai.
Cảm ơn bạn đã được tư vấn.
thể trùng lặp của [Tại sao tôi lại thấy một "nguồn gốc không được phép bởi Access-Control-Allow-Origin" lỗi ở đây?] (http://stackoverflow.com/questions/9310112/why-am-i-seeing-an-origin-is-not-allowed-by-access-control-allow-origin-error) – Barmar
Câu hỏi của tôi là phía máy chủ, ví dụ giao dịch với phía máy khách. Thư viện phía khách hàng đã chăm sóc những sự không nhất quán này. Đây là một vấn đề dựa trên máy chủ. – AnthonyJClink
Được thêm vào, kể từ khi sử dụng một máy chủ jetty nhúng với guice. Tôi không chắc chắn làm thế nào để cấu hình mà không có web.xml ... Tôi biết nó thiếu một sự hiểu biết về các công nghệ. nhưng tôi cảm thấy rằng công nghệ ngăn xếp trong câu hỏi này là đủ khác nhau từ các bản sao có thể có mà nó đảm bảo sự chú ý của riêng mình vì nó liên quan đến một chồng công nghệ rất khác nhau. – AnthonyJClink