有关浏览器跨域以及CORS

1 简介

禁止跨域访问是浏览器的一种安全策略。

跨域对源域基本上没有危害,想象一下,我从自己的域访问其他域能有什么危害呢?对要访问的域才会有数据安全方面的威胁。

目前的web应用很多都做成前后端分离的形式,不可避免的需要请求其他域的资源,那么就需要允许跨部分域。

浏览器采用跨域资源共享机制(Cross-Origin Resource Sharing, CORS)允许应用跨域访问。但是需要注意的是浏览器不会禁止发送跨域请求,而是会对它的响应是否携带Access-Control-Allow-Origin等信息及其Access-Control-Allow-Origin的值是否包含自己的域来决定接受此响应数据还是拒绝此响应数据

浏览器在发送跨域请求之前,会发送一个预检请求。通过预检请求,浏览器可以获知服务器是否允许某些类型的跨域请求,并获取相应的权限信息,以安全地执行跨域操作。

与跨域相关的响应头字段主要包括以下几个:

Access-Control-Allow-Origin
作用:表示允许访问资源的域名。
设置方式:服务器通过在响应头中添加该字段来授权特定域名访问资源。字段的值可以是具体的域名,也可以是通配符“”,表示允许来自任何域名的请求。但出于安全考虑,通常不建议将值设置为“”。
Access-Control-Allow-Methods:
作用:表示允许的HTTP方法。
设置方式:服务器通过在响应头中添加该字段来指定允许的请求方法,如GET、POST、PUT、DELETE等。这有助于确保只有特定的HTTP方法被允许用于跨域请求。
Access-Control-Allow-Headers:
作用:表示允许的请求头。
设置方式:服务器通过在响应头中添加该字段来指定允许的请求头字段,如Content-Type、Authorization等。这有助于防止恶意请求通过添加不被允许的头部字段来绕过安全限制。
Access-Control-Expose-Headers:
作用:表示允许暴露的响应头字段。
设置方式:服务器通过在响应头中添加该字段来指定允许被前端代码访问的响应头字段。默认情况下,浏览器只会暴露一些简单的响应头字段,如Cache-Control、Content-Language、Content-Type、Expires、Last-Modified和Pragma。如果需要暴露其他自定义的响应头字段,就需要使用此字段进行指定。
Access-Control-Allow-Credentials:
作用:表示是否允许发送凭据(Cookie、HTTP认证等)。
设置方式:服务器通过在响应头中添加该字段并设置为“true”来授权发送凭据。需要注意的是,当此字段被设置为“true”时,Access-Control-Allow-Origin字段的值不能是通配符“*”,而必须是具体的域名。
这些响应头字段共同构成了CORS(跨域资源共享)机制的核心部分,允许服务器精细控制哪些跨域请求是被允许的,以及允许哪些HTTP方法、请求头和响应头被用于跨域通信。正确配置这些字段对于确保Web应用的安全性和数据的正确访问至关重要。

posted @ 2025-01-24 17:08  zhenjingcool  阅读(36)  评论(0)    收藏  举报