You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
XMLHttpRequest without credentials fails with CORS error on redirections
https://bugs.webkit.org/show_bug.cgi?id=276364
Reviewed by NOBODY (OOPS!).
XMLHTTPRequest without credentials to the same-origin, which redirects to a cross-origin and
then back to the same-origin with Access-Control-Allow-Origin=*, fails with error CORS policy:
"Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true."
This change fixes the problem. It allows to make a cross-origin XMLHTTPRequest without credentials to
different origin with response Access-Control-Allow-Origin=*. The specification:
https://fetch.spec.whatwg.org/#cors-protocol-and-credentials says that only if credentials mode is "include",
then `Access-Control-Allow-Origin` cannot be `*`.
Added test case which tests this case.
* LayoutTests/http/tests/xmlhttprequest/access-control-and-redirects-expected.txt:
* LayoutTests/http/tests/xmlhttprequest/access-control-and-redirects.html:
* LayoutTests/platform/mac-wk1/http/tests/xmlhttprequest/access-control-and-redirects-expected.txt:
* Source/WebCore/loader/CrossOriginAccessControl.cpp:
(WebCore::passesAccessControlCheck):
(WebCore::validatePreflightResponse):
* Source/WebCore/loader/CrossOriginAccessControl.h:
* Source/WebCore/loader/CrossOriginPreflightChecker.cpp:
(WebCore::CrossOriginPreflightChecker::validatePreflightResponse):
* Source/WebCore/loader/DocumentThreadableLoader.cpp:
(WebCore::DocumentThreadableLoader::loadRequest):
* Source/WebCore/loader/SubresourceLoader.cpp:
(WebCore::SubresourceLoader::checkResponseCrossOriginAccessControl):
(WebCore::SubresourceLoader::checkRedirectionCrossOriginAccessControl):
* Source/WebCore/loader/cache/CachedResource.cpp:
if (accessControlOriginString.find(',') != notFound)
259
259
returnmakeUnexpected("Access-Control-Allow-Origin cannot contain more than one origin."_s);
260
+
260
261
returnmakeUnexpected(makeString("Origin ", securityOriginString, " is not allowed by Access-Control-Allow-Origin.", " Status code: ", response.httpStatusCode()));
261
262
}
262
263
263
-
if (storedCredentialsPolicy == StoredCredentialsPolicy::Use) {
264
+
if (fetchOptionsCredentials == FetchOptions::Credentials::Include) {
auto result = WebCore::validatePreflightResponse(page->sessionID(), request, response, loader.options().storedCredentialsPolicy, loader.securityOrigin(), &CrossOriginAccessControlCheckDisabler::singleton());
75
+
auto result = WebCore::validatePreflightResponse(page->sessionID(), request, response, loader.options().credentials, loader.options().storedCredentialsPolicy, loader.securityOrigin(), &CrossOriginAccessControlCheckDisabler::singleton());
auto result = validatePreflightResponse(m_parameters.sessionID, m_parameters.originalRequest, m_response, m_parameters.storedCredentialsPolicy, m_parameters.sourceOrigin, m_networkResourceLoader.get());
145
+
auto result = validatePreflightResponse(m_parameters.sessionID, m_parameters.originalRequest, m_response, m_parameters.fetchOptionsCredentials, m_parameters.storedCredentialsPolicy, m_parameters.sourceOrigin, m_networkResourceLoader.get());
0 commit comments