2016-11-09 48 views
2

我正在使用Dropwizard v1.0.0並實施CORS,但要求它在Safari,IE和Edge中失敗。不過,它正在Firefox和Chrome中運行。CORS請求基於DropWizard的API在IE,Edge和Safari中失敗,但在Chrome和Firefox中工作

FilterRegistration.Dynamic cors = environment.servlets() 
      .addFilter("CORSFilter", CrossOriginFilter.class); 

cors.setInitParameter(ALLOWED_ORIGINS_PARAM, "*"); 
cors.setInitParameter(ALLOWED_HEADERS_PARAM, "Content-Type,Access-Control-Allow-Origin,Authorization"); 
cors.setInitParameter(ALLOWED_METHODS_PARAM, "OPTIONS,HEAD,DELETE,GET,PUT,POST,PATCH,HEAD"); 
cors.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*"); 

此代碼應用於XYZApplication.java。

我在控制檯我得到

錯誤消息:

無法加載資源:產地https://xyz.in沒有被允許訪問控制允許來源

這裏是OPTIONS請求頭從邊:

Accept: */* 
Accept-Encoding: gzip, deflate 
Access-Control-Request-Headers: access-control-allow-origin,authorization, accept 
Access-Control-Request-Method: GET 
Cache-Control: no-cache 
Connection: Keep-Alive 
Content-Length: 0 
Host: xyz-api.in 
Origin: https://xyz.in 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393 

這裏是OPTIONS請求頭從鉻:

Host: xyz-api.in 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 
Access-Control-Request-Method: GET 
Origin: https://xyz.in 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.35 Safari/537.36 
Access-Control-Request-Headers: access-control-allow-origin, authorization 
Accept: */* 
Referer: https://xyz.in/ 
Accept-Encoding: gzip, deflate, sdch, br 
Accept-Language: en-US,en;q=0.8 

請讓我知道我錯過了什麼或需要其他任何細節。

+0

「它失敗」是沒有問題的一個很好的說明。它如何失敗?開發人員工具控制檯中報告了哪些錯誤消息?網絡標籤說什麼?瀏覽器工作和失敗的請求和響應組合有什麼不同? – Quentin

+0

@Quentin在Chrome和Edge上添加了更多詳細信息,包括控制檯中的錯誤消息和請求標頭。請讓我知道是否需要更多細節。 「 – gagangupt16

+0

」原產地https://xyz.in不允許「...」原產地:https://xyz.zapr.in「...」原產地:https://adimprints.zapr.in「 - **這些原產地沒有一個匹配**,看起來您有三個不同的頁面,並且請求是其中兩個觸發器,並且錯誤消息來自第三個請求。 – Quentin

回答

0

試試這個:

import static javax.ws.rs.core.HttpHeaders.*; 

FilterRegistration.Dynamic cors = environment.servlets() 
    .addFilter("CORSFilter", CrossOriginFilter.class); 

cors.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, environment.getApplicationContext().getContextPath() + "*"); 
cors.setInitParameter(ALLOWED_METHODS_PARAM, "GET,PUT,POST,DELETE,HEAD,OPTIONS"); 
cors.setInitParameter(ALLOWED_ORIGINS_PARAM, "*"); 
cors.setInitParameter(ALLOWED_HEADERS_PARAM, "*"); 
cors.setInitParameter(EXPOSED_HEADERS_PARAM, "Link"); 
cors.setInitParameter(ALLOW_CREDENTIALS_PARAM, "true"); 
相關問題