跨域设置整理

什么是跨域

不同域名之间相互请求资源,就是跨域。常说的跨域问题,指的是浏览器不允许跨域请求。这是由于浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。
其中同源指的是,域名、协议、端口号都相同。例如对于 http://abc.123.com:8080/index/asddf 这样一个网址来说,http/https是协议,abc.123.com是域名,8080是端口号。而第一个单独的反斜杠'/'后的内容,并不影响是否是同源判断。
浏览器之所以要限制跨域访问,是因为这种方式存在巨大的安全隐患。会造成CSRF(Cross-site request forgery)攻击,也就是跨站请求伪造。攻击者可以盗用你的身份,发送恶意请求,威胁隐私和财产安全。

跨域方案解决

1.反向代理

因为这是浏览器对于js的限制。所以在获取其他域名下的内容时,在自己的域名下架设一个Web服务器(ASP、PHP、JAVA等)来获取其他域名下的内容,再将内容返回前端。这样通过js请求的内容在同一域名下,就不会出现跨域的问题。这也是跨网站请求数据常用的一种方法。

2.JSONP(只支持get)

JSONP是最初用来解决跨域问题的方式。它的原理是跨域的“资源嵌入”是被浏览器允许的,用<script>标签没有跨域限制的“漏洞”来达到与第三方通讯的目的。这是一种非正式传输协议,通过一个script标签来指向一个来自其他服务器的API,并提供一个回调函数来接收数据。被请求的服务器将需要返回的json数据,放在回调函数位置返回。JSONP的缺点是它只能支持GET操作,没法支持POST等操作。

3.CORS (Access-Control-Allow-Origin只能配置 一个域名或者* || 根据头来动态判断更改)

CORS的原理是基于服务方授权的模式,也就是说提供服务的程序要主动通过CORS回应头来声明自己信任哪些源(协议+域名+端口)。 由于得到了服务方的授权,浏览器就可以放行来自这些域的请求了。
浏览器在发送请求时,会在 Header 中加上一个 origin(protocal + host + path + port) 字段,来标明这个请求是来自哪里。在服务端拿到这个请求之后,会对 origin 进行判断,如果是在允许范围内的请求,将会在 respones 返回的 Header 中加上:

Access-Control-Allow-Origin: origin
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: something

(1)Access-Control-Allow-Origin
该字段是必须的。它的值要么是请求时Origin字段的值,要么是一个,表示接受任意域名的请求。
(2)Access-Control-Allow-Credentials
该字段可选。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送Cookie,删除该字段即可。
(3)Access-Control-Expose-Headers
该字段可选。CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。上面的例子指定,getResponseHeader('FooBar')可以返回FooBar字段的值。
所以,在服务端可以通过设置“Access-Control-Allow-Origin”来指定允许跨域访问的域名。这里有一个问题就是设置Access-Control-Allow-Origin只能配置 一个域名或者
。那么有多个域名允许访问但并不是允许所有访问怎么办呢。这个时候可以在获取到请求时,判断其域名是否允许访问,如果允许访问,动态的将Access-Control-Allow-Origin允许的域名设置为网络请求的域名。

4.浏览器配置跨域 (针对某一浏览器,禁止其跨域的检查)

前面说到,跨域问题实际上是浏览器对js的限制,那么我们只要把这个功能关掉就可以了。但是这种方法适用性比较小,首先这种设置只针对某一浏览器,不同的浏览器设置是不同的;其次这个设置是跟浏览器绑定的,A电脑的浏览器关闭了功能,可以跨域访问,但是其他电脑没有设置过的浏览器还是不可以跨域访问;最后这种设置是不安全的。所以这种方式一般只会在项目开发时使用,特别是前后端分离开发但是线上代码在同一域名下时。这里提供chrome浏览器的设置方式

5.Vue-cli proxyTable 开发环境跨域问题

这里针对于Vue开发项目前后端分离开发,实际线上代码在同一域名下,即仅需要在开发环境时设置跨域的情况。这里用到的是vue-cli中config文件的proxyTable设置
这个参数主要是一个地址映射表,你可以通过设置将复杂的url简化,例如我们要请求的地址是abc.sample.com/user/list,可以按照如下设置:

proxyTable: {
 '/user': {
  target: 'http://abc.sample.com',
  changeOrigin: true,//解决跨域设置,本地会虚拟一个服务端接收你的请求并代你发送该请求
  pathRewrite: {
    '^/user': '/user'
  }
 }
}

这样之后,这样我们在写url的时候,只用写成/user/list就可以代表abc.sample.com/user/list。我们还可以这样写,将需要跨域的请求写成/api/***,以上面为例就是/api/list/user,然后设置如下

proxyTable: {
 '/api': {
  target: 'http://abc.sample.com',
  changeOrigin: true,//解决跨域设置,本地会虚拟一个服务端接收你的请求并代你发送该请求
  pathRewrite: {
    '^/api': '/' //实际请求是没有api的,为了方便区分和匹配才加的,所以这里将请求的/api重写为/
  }
 }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容