@
mitu9527 本意是想让您自己再看一遍的,回答了那些问题我觉得就可以回答您的问题了。
我帮您整理好您看一下。
以下引用自您发出来的文章,
1. “如果 Origin 指定的源,不在许可范围内,服务器会返回一个正常的 HTTP 回应。浏览器发现,这个回应的头信息没有包含 Access-Control-Allow-Origin 字段(详见下文),就知道出错了,从而抛出一个错误”,“如果服务器否定了"预检"请求,会返回一个正常的 HTTP 回应,但是没有任何 CORS 相关的头信息字段。这时,浏览器就会认定,服务器不同意预检请求,因此触发一个错误”;
所以无论是简单请求还是非简单请求,跨域检测失败的响应头里都不会包含 CORS 相关的头信息字段,所以让客户端拒绝服务端,不需要特别返回响应头。
2. “非简单请求的 CORS 请求,会在正式通信之前,增加一次 HTTP 查询请求,称为"预检"请求( preflight )。
浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些 HTTP 动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的 XMLHttpRequest 请求,否则就报错。”,预检的响应头会包含你最开始列出的一些 Access-Control-*头(如果后端允许请求的话);
这个请求是 options 请求,预检请求,并不会执行具体的逻辑,只有后端预检通过后,客户端才会发出正式的 XMLHttpRequest 请求。不存在"所有的逻辑都执行完了,然后你再加几个头部去告诉客户端把自己拒绝掉 "的问题、