CORS問題まとめ一
4694 ワード
サービス端末(SpringMVC)
フィルタのコードは以下の通りです.
ドメインをまたぐ第一歩
二股
よくある問題
要求された根拠パターンがincludeである場合、対応するAccess-Coontrol-Originヘッダの値はワイルドカード「*」ではなく、要求定義にwithCredentialsフラグを設定すると、要求にcookieなどを伝達する.サーバが任意のset-cookie応答ヘッダに戻るなら、Access-Coontrol-Chredentials:trueに戻らなければ、クライアントにcookieを作成しません.このように設定すると、Access-Control-Origin応答ヘッダを同時に指定する必要があります.Access-Coontrol-Allow-Originは適切な指定が必要で、ワイルドカード(*)ではなく、WithCredentialsはクロスドメインセキュリティポリシーの一つです.
アドバイス
ネット上の大部分にかんがみて(以下の通り)
Request Headersの中のAccess-Coontrol-Lequest-HeadersとReponse Headersの中のAccess-Coontrol-Headersが一致しないため、図のようになっています.
アドバイス
Request Headersの中のAccess-Coontrol-request-Headersはいろいろありますので、個人的には以下のように提案します.
フィルタのコードは以下の通りです.
String origin = reqs.getHeader("origin");//
String requestHeaders = reqs.getHeader("Access-Control-Request-Headers");
if (StringUtils.isEmpty(requestHeaders)) {
requestHeaders = "";
}
httpServletResponse.setHeader("Access-Control-Allow-Origin", origin);
httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
httpServletResponse.setHeader("Access-Control-Allow-Methods", "HEAD,PUT,DELETE,POST,GET");
httpServletResponse.setHeader("Access-Control-Allow-Headers", "Accept, Origin, XRequestedWith, Content-Type, LastModified," + requestHeaders);
効果ドメインをまたぐ第一歩
二股
よくある問題
Access to XMLHttpRequest at 'http://10.10.1.49:9000/liinji_mobile_web/SelfInspection/getSelfInspection' from
origin 'http://localhost:63342' has been blocked by CORS policy: Response to preflight request doesn't pass access control check:
The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*'
when the request's credentials mode is 'include'. The credentials mode of requests initiated by the
XMLHttpRequest is controlled by the withCredentials attribute.
エラーの原因要求された根拠パターンがincludeである場合、対応するAccess-Coontrol-Originヘッダの値はワイルドカード「*」ではなく、要求定義にwithCredentialsフラグを設定すると、要求にcookieなどを伝達する.サーバが任意のset-cookie応答ヘッダに戻るなら、Access-Coontrol-Chredentials:trueに戻らなければ、クライアントにcookieを作成しません.このように設定すると、Access-Control-Origin応答ヘッダを同時に指定する必要があります.Access-Coontrol-Allow-Originは適切な指定が必要で、ワイルドカード(*)ではなく、WithCredentialsはクロスドメインセキュリティポリシーの一つです.
アドバイス
ネット上の大部分にかんがみて(以下の通り)
// *
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization");
response.setHeader("Access-Control-Allow-Credentials", "true");
個人的な感覚ですが、必要なものがあればお勧めします. String origin = request.getHeader("origin");//
httpServletResponse.setHeader("Access-Control-Allow-Origin", origin);
よくある問題2Access to XMLHttpRequest at 'http://10.10.1.49:9000/liinji_mobile_web/SelfInspection/getSelfInspection' from
origin 'http://localhost:63342' has been blocked by CORS policy: Request header field Token is not allowed by
Access-Control-Allow-Headers in preflight response.
エラーの原因Request Headersの中のAccess-Coontrol-Lequest-HeadersとReponse Headersの中のAccess-Coontrol-Headersが一致しないため、図のようになっています.
アドバイス
Request Headersの中のAccess-Coontrol-request-Headersはいろいろありますので、個人的には以下のように提案します.
// request Access-Control-Request-Headers
String requestHeaders = request.getHeader("Access-Control-Request-Headers");
if (StringUtils.isEmpty(requestHeaders)) {
requestHeaders = "";
}
httpServletResponse.setHeader("Access-Control-Allow-Headers", "Accept, Origin, XRequestedWith, Content-Type, LastModified," + requestHeaders);