以下MDN文章讨论了CORS头:跨源资源共享(CORS) 我的问题很基础:对于一个简单请求(非预检请求),如果我们无论如何都会通过HTTP响应发送所请求的资源,那么在服务器端添加CORS头的意义是什么呢?我原以为CORS头的作用是为了让UA只有在服务器允许时才能接收到请求的资源。是否根据请求方直接发送或不发送资源会更容易呢?
对于同源请求(不需要CORS),我同意添加CORS头部没有太大的意义,但同样也不会有任何伤害。对于跨域请求,头部告诉浏览器页面是否被允许访问资源。需要注意的是,这是由浏览器控制的,因为CORS是一种特定于浏览器的技术。CORS限制不适用于非浏览器HTTP客户端。服务器不直接拒绝访问,只是添加标头,指示浏览器在给定场景下应该如何处理响应——即是否应该覆盖浏览器实现的正常“同源”策略,并允许访问资源。此外,您询问是否服务器拒绝根据请求的客户端类型访问资源更容易。 HTTP的设计方式意味着客户端是谁或什么并不重要,只要它符合标准。猜测客户端的性质的唯一方法是读取User-Agent字符串,但这很容易欺骗,因此您永远无法在服务器上使用它来实现任何与安全相关的内容。标准中也没有任何强制要求允许您知道请求是否由AJAX发出(因为只有AJAX请求受到CORS的影响,在任何情况下仅知道客户端是浏览器是不足以满足要求的)。
For security reasons, browsers restrict cross-origin HTTP requests initiated from within scripts.
- mplungjan<img>
标签和它所涉及到的HTTP请求。浏览器知道这与向同一URL发出XHR的区别,但服务器不知道。 - Pointy<img>
,并且浏览器知道它是否具有适当的CORS标头。例如,如果您将该图像绘制到画布上,则它将起作用,但您将无法以编程方式读取该画布。 - Brad