美文网首页
服务端跨域

服务端跨域

作者: 马里奥Joseph | 来源:发表于2017-09-24 18:49 被阅读30次

一、反向代理服务器

基础思想很简单,将你的服务器配置成 需要跨域获取的资源的 反向代理服务器。
也就是说,将其他域名的资源映射到你自己的域名之下,这样浏览器就认为他们是同源的。
用大家钟爱的 Apache2 来举个例子:
首先启用两个模块 proxy 和 proxy_http 来开启代理功能:

sudo a2enmod proxysudo a2enmod proxy_http

然后在配置文件里面写入:

ProxyPass "/foo" "http://foo.example.com/bar"ProxyPassReverse "/foo" "http://foo.example.com/bar"

ProxyPass: 远程服务器在本地服务器的映射。(上面的例子将 http://foo.example.com/bar映射为 /foo)

ProxyPassReverse: 配置 Apache2 在 HTTP 跳转时调整 Location, Content-Location 和 URI headers的值,防止反向代理被绕开。

重启 Apache2:

sudo service apache2 restart

大功告成,这样我们请求 /foo就会得到 http://foo.example.com/bar的内容了。
这种方法其实不太常用,机智的读者就会发现,每一个资源都要到自己的服务器配置,每次配置都还要重启。

二、CORS

Cross-Origin Resource Sharing 是 W3C 推出的一种跨站资源获取的机制。

首先我们来看一下浏览器的支持情况:
Chrome Firefox (Gecko) Internet Explorer Opera Safari
4 3.5 8 & 9(XDomainRequest), 10 12 4

移动端的浏览器对这种方法的支持比较完善。现在我们看到了,如果不需要兼容 IE6、7的话,就可以使用这种方法。
这种跨域方案主要的思想是:服务器 在响应头中设置相应的选项,浏览器如果支持这种方法的话就会将这种跨站资源请求视为合法,进而获取资源。
可以设置的响应头信息:

Access-Control-Allow-Origin
Access-Control-Allow-Origin: <origin> | *

origin: 被允许跨域访问这个资源的网站,*代表全部网站。浏览器会检测这个参数,如果符合要求,才会去获取资源。
举个例子,允许 http://qiaohongshen.github.io/foo来跨域访问这个资源:

Access-Control-Allow-Origin: http://jasonkid.github.io/fezone
Access-Control-Allow-Credentials
Access-Control-Allow-Credentials: true | false

表示是否允许浏览器携带 Cookie 来访问这个资源。这个属性要和 XMLHttpRequest 的 withCredentials属性来配合使用。

var xhr = new XMLHttpRequest();
var url = 'http://foo.other/resources/credentialed-content/';
if(xhr) {
  xhr.open('GET', url, true);
  xhr.withCredentials = true; // 设置带有 Cookie 的资源请求
  xhr.onreadystatechange = handler;
  xhr.send(); 
}

能够成功使用带有 Cookie 的资源请求需要满足以下几个条件:

  1. XMLHttpRequest
  2. 对象中指定了 withCredentials = true
  3. 服务器响应头中 Access-Control-Allow-Credentials: true
  4. 服务器响应头中 Access-Control-Allow-Origin不能为 *

以下选项主要是安全性配置的问题,主要是服务器的配置问题了,就不展开介绍了:

  • Access-Control-Expose-Headers
  • Access-Control-Allow-Methods
  • Access-Control-Allow-Headers

相关文章

  • ajax

    ajax 跨域 跨域:http 协议 域名 端口 三者只要有一个不同,就是跨域 服务端解决跨域: res.setH...

  • 前端跨域

    CORS跨域 1.CORS跨域-服务端设置,前端直接调用说明:后台允许前端某个站点进行访问 2.JSONP跨域-前...

  • 基本跨域方式(jsonp,服务端反向代理)

    跨域(cross origin resource sharing) 为什么要跨域? 客户端请求服务端的时候,为了保...

  • 常见跨域

    1.跨域资源共享(CORS)普通跨域请求:只服务端设置Access-Control-Allow-Origin即可,...

  • 理解跨域异步请求的 JSON-P

    在开篇之前,我们也许知道跨域问题的存在,知道通过服务端开放跨域请求来使API实现跨域访问,甚至也知道JSON-P这...

  • Spring Boot+AngularJS跨域及sessionI

    java后台跨域配置 增加一个跨域配置类,如下 存在的问题 服务端id request.getSession()....

  • 前后端分离,多域名,CORS跨域解决方案

    前后端分离,多域名,CORS跨域解决方案 后台代码: //多域名-CORS跨域方案-服务端 $allowOrigi...

  • 跨域

    讲跨域之前,首先要了解,为什么要跨域 跨域是因为同源策略使用过 Ajax 的同学都知道其便利性,可以在不向服务端提...

  • 配置Nginx后上传文件出现跨域问题

    问题详情:服务端已开启跨域,在配置Nginx反向代理后,使用ELMENT UI 反而出现跨域问题 Nginx监听9...

  • kindeditor 跨域上传图片配置 富文本编辑

    本文用于解决kindeditor跨域上传配置,服务端上传接口使用java。kindeditor 调用服务端上传接口...

网友评论

      本文标题:服务端跨域

      本文链接:https://www.haomeiwen.com/subject/djflextx.html