没有响应头 Access-Control-Allow-Origin 时允许 CORS

Posted

技术标签:

【中文标题】没有响应头 Access-Control-Allow-Origin 时允许 CORS【英文标题】:CORS allowed when no response header Access-Control-Allow-Origin 【发布时间】:2019-04-12 22:46:45 【问题描述】:

即使响应标头不包含“Access-Control-Allow-Origin”,我也可以将 post/put/delete 发送到我的本地主机,我使用的是 chrome,所以我的问题:

1- 如果没有返回“Access-Control-Allow-Origin”,是否允许来自不同站点的请求?

2-为什么请求在我的本地主机上有效,浏览器在请求中发送了以下标头:

来源:http://localhost:8080

或者浏览器在同源时忽略响应头“Access-Control-Allow-Origin”?

【问题讨论】:

【参考方案1】:

如果没有返回“Access-Control-Allow-Origin”,是否允许来自不同站点的请求?

其他条件相同的 POST 请求将被允许,但同源策略将阻止 JS 读取响应。

PUT 和 DELETE 请求需要 Preflight 请求才能首先从 CORS 获得许可,因此这些请求将被阻止。

为什么请求在我的本地主机上有效

当请求来自同一个来源时,同源策略不会阻止访问。

【讨论】:

所以即使浏览器发送了 Origin 标头,也永远不需要在同一来源上使用“Access-Control-Allow-Origin”吗?

以上是关于没有响应头 Access-Control-Allow-Origin 时允许 CORS的主要内容,如果未能解决你的问题,请参考以下文章

HTTP请求头和响应头含义

HTTP首部(请求头,响应头)

HTTP请求头和响应头都有哪些内容

nginx 定义:响应头和请求头

HTTP协议学习

java EE : http 协议之请求报文响应报文