跨域请求中的withCredentials、Access-Control-Allow-Origin

Access to XMLHttpRequest at 'https://34cd046f.ngrok.io/node/vcode/123456543' from origin 'null' has been blocked by CORS policy: 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.
意思是:使用xhr对象访问”https:xxxx“时,请求头中的origin: null,所以被cors策略阻止了。
当请求的凭据模式为include时,回馈头的Access-Control-Allow-Origin一定不能为'*'
在请求被初始化时使用xhr对象的withCredentials属性控制凭证模式。

withCredentials

withCredentials是xhr对象的一个属性。它的值是boolean。若为true,则执行跨域请求时在请求头中挟带凭据信息。否则不挟带。凭据信息包括cookie、http认证、客户端ssl……。常用cookie为凭据。
axios是基于(但不限于)xhr+promise做出来的。axios也有withCredentials属性。

resolution

在回馈头中设置Access-Control-Allow-Origin为请求者的域名。

extension

上面的报错问题中提出的”凭据模式为include“。感觉还会有别的模式。都有什么模式,我也不知道。
为什么设置withCredentials: true,就可以让凭据模式变为include呢?
回馈头中的Access-Control-Allow-Credentials(其值为boolean)表示是否把回馈暴露给前端。
跨域问题是前端、后端沟通交流时出现的问题。不是中有前端或后端能解决的,需要前、后端协同解决。


2020/05/16 by stone

你可能感兴趣的:(cors)