有关于chrome跨域访问的问题(CORS)
最近在解决一个跨域访问的问题时。浏览器总是报错,错误信息如下:
Access to XMLHttpRequest at ‘网址B’ from origin ‘网址A’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
这里有一些很不错的文章是关于解释CORS如何工作的
https://www.html5rocks.com/en/tutorials/cors/
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
1.该错误信息来源
network中cors中会做访问检查,这里的错误信息是缺少allow_origin_header导致的。
base::Optional<CorsErrorStatus> CheckAccessInternal(
const GURL& response_url,
const int response_status_code,
const base::Optional<std::string>& allow_origin_header,
const base::Optional<std::string>& allow_credentials_header,
mojom::CredentialsMode credentials_mode,
const url::Origin& origin) {
...
else if (!allow_origin_header) {
return CorsErrorStatus(mojom::CorsError::kMissingAllowOriginHeader);
}
...
}
2.尝试解决方法
1.https://peter.sh/experiments/chromium-command-line-switches/
在该网址中有一个**–disable-web-security**的开关,官方意思Don’t enforce the same-origin policy. (Used by people testing their sites.)
在启动浏览器时加入该参数,未能解决问题,怀疑是此开关未起作用。
2.在chromium源码web_preferences.h中定义了一些首选项
其中包含web_security_enabled; 看名字感觉与disable-web-security有关系
经测试将web_security_enabled置为false,即可跨域访问
3.调查web_security_enabled这个首选项是如何起作用的
在Browser进程的RenderViewHostImpl中
持有成员
std::unique_ptr<WebPreferences> web_preferences_;
在Ren