2016-07-27 21 views
5

nó có vẻ giống như một vấn đề được biết và nhiều câu hỏi tồn tại về chủ đề, tuy nhiên, tình hình của tôi là rất lạ. Tôi có một ứng dụng web đơn giản được triển khai trên tomcat 8.0.36. Tôi đã cấu hình CORS đúng cách: yêu cầuyêu cầu xuất xứ chéo bị chặn trong tomcat 8

<filter> 
<filter-name>CorsFilter</filter-name> 
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>CorsFilter</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 

Các chéo gốc bị chặn bởi các trình duyệt:

Không 'Access-Control-Allow-Origin' tiêu đề là hiện tại trên tài nguyên được yêu cầu. Do đó, nguồn gốc 'https://www.mytestpage.com' không được phép truy cập. Câu trả lời có mã trạng thái HTTP 403.

Trong tệp nhật ký tomcat tôi cũng thấy mã phản hồi 403. Điều thú vị là mã của ứng dụng của tôi không bao giờ được thực thi trong trường hợp có yêu cầu gốc. Các yêu cầu bị chặn trước khi đến ứng dụng của tôi và 403 được gửi ngay lập tức. Tôi không có apache ở phía trước của tomcat, đó là tomcat đồng bằng. Tôi đã thử nhiều thứ, bao gồm cả danh sách trắng nguồn gốc và chỉ định tiêu đề được cho phép - không có gì hữu ích. Tôi cũng đã cố gắng thiết lập các tiêu đề lập trình cho đến khi tôi thấy rằng mã trong trường hợp yêu cầu xuất xứ chéo không bao giờ được thực hiện.

UPD: Điểm cuối chấp nhận yêu cầu POST. Các yêu cầu POST được gửi dưới dạng XmlHttpRequests từ đoạn mã JS.

Mọi ý tưởng có thể là gì?

p.s Tôi có thể thực hiện các yêu cầu xuất xứ giống nhau thành công.

+0

Xin chào, bạn sử dụng các giá trị mặc định trong cấu hình 'CorsFilter' của bạn, do đó sự cố có thể xảy ra với mọi thứ. Ví dụ: Giá trị mặc định 'cors.allowed.methods' là' GET, POST, HEAD, OPTIONS' và có thể yêu cầu 'DELETE' đang thử. Bạn có thể đăng thêm chi tiết không? – snieguu

+0

Tôi đã cập nhật câu hỏi. Tôi đang gửi yêu cầu POST. – bekon

+0

Yêu cầu bị từ chối bởi 'org.apache.catalina.filters.CorsFilter'. Hãy thử gỡ lỗi nó hoặc đặt bạn logger để gỡ lỗi cấp trên lớp này. – snieguu

Trả lời

0

Tôi đã tìm thấy vấn đề là gì - tôi phải đặt tiêu đề Kiểu nội dung trong yêu cầu, nếu không yêu cầu sẽ bị chặn. - Tomcat CORS filter

1

Bạn thực sự phải đặt cả hai Access-Control-Allow-OriginAccess-Control-Allow-Methods. Dưới đây là ví dụ:

Access-Control-Allow-Origin: http://www.myhost.com 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE 

Bạn cũng phải chấp nhận phương thức "OPTIONS" trả về cả hai dòng tiêu đề Access-Control-Allow-*. Một số trình duyệt có thể đưa ra loại yêu cầu này trước yêu cầu thực tế của bạn (ví dụ: "PUT" yêu cầu) để nhận thông tin truy cập của dịch vụ.

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