跨域知识点

跨域的定义
浏览器请求的目标URL和所在网页的URL的协议、域名、端口有一个不同就算是跨域。

不过有一种特殊情况不能使用跨域的方法解决:对于chrome等浏览器来说,如果所在网页是http的,然后想跨域访问https的网页,这个是直接被浏览器禁止了,即使配置了跨域也无法解决。

跨域使用的场景
网站资源需要共享给其他网站时(跨域传递数据),才会设置access-control-allow-origin HTTP头。比如cdn,oss等存放的静态资源都会设置允许跨域访问

跨域实现的原理
浏览器发起请求的时候,请求头会携带所在网页的host,比如 origin:xxx.com
服务端需要进行配置允许跨域
有以下可设置的字段

参数含义
allowedOrigins配置允许访问的源,如:https://xxx.com,*表示允许全部的域名
allowCredentials配置是否允许发送Cookie,用于凭证请求, 默认不发送cookie,举个例子,默认情况下,标准的跨域请求是不会发送cookie等用户认证凭据的。所以当你进行跨域请求时,cookie是不会被带上的,如果该请求是需要你登录才能访问的话,那么服务器就会认为你还没有登录。
allowedHeaders配置允许的自定义请求头,用于预检请求
allowedMethods配置跨域请求支持的方式,如:GET、POST、HEAD,且一次性返回全部支持的方式
exposedHeaders配置响应的头信息, 在其中可以设置其他的头信息,不进行配置时, 默认可以获取到Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma字段
maxAge配置预检请求的有效时间, 单位是秒,表示:在多长时间内,不需要发出第二次预检请求
preflightContinue一个布尔值,指示插件将OPTIONS预检请求代理到上游服务。

查看一个请求头会发现有以下字段

{
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "cross-site",
    "sec-fetch-dest": "empty",
}

关于Sec-Fetch-* 开头的字段,参考这个文章
https://w3c.github.io/webappsec-fetch-metadata/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值