javascript - 使用 ShareJS 的访问控制允许来源

标签 javascript apache node.js share.js

我的网站在一个域/服务器上:www.mysite.com,我在另一台服务器上运行 ShareJS:www.my-other-server.com:8000。

www.mysite.com/index.html

<script src="http://www.my-other-server.com:8000/bcsocket.js"></script>
<script src="http://www.my-other-server.com:8000/share.js"></script>
<script src="http://www.my-other-server.com:8000/textarea.js"></script>

...

<textarea id='sharetext' ></textarea>

<script>
    // get the textarea element
    var elem = document.getElementById("sharetext");

    // connect to the server
    var options = {
        origin: "www.my-other-server.com:8000",
        browserChannel:{cors:"*"}
    }

    var connection = sharejs.open('test', 'text', options, function(error, doc) {
      doc.attach_textarea(elem);
  });

</script>

我在 JS 控制台中收到以下错误:

XMLHttpRequest cannot load http://www.my-other-server.com:8000/test?VER=8&MODE=init&zx=v44znr3caqea&t=1. Origin http://www.mysite.com is not allowed by Access-Control-Allow-Origin. 

This ShareJS GitHub Issue ( https://github.com/share/ShareJS/issues/77 ) 建议将 browserChannel:{cors:"*"} 添加到 share 选项,就像我在上面所做的那样,但确实如此好像没有什么效果。。。

我在这里做什么?重要的是,我的 sharejs 流量位于与我的静态/动态 Web 服务器不同的服务器上。

最佳答案

在 node.js 的服务器端,如果您使用的是 express.js,则需要添加额外的 header ,这将允许来自服务器端的跨域流量:

app.configure(function() {
  app.use(function(req, res, next) {
    res.header('Access-Control-Allow-Credentials', true);
    res.header('Access-Control-Allow-Origin', req.headers.origin);
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
    next();
  });
  app.set('jsonp callback', true);
});

在客户端,你仍然可能会遇到安全问题,所以使用 JSONP 会更好,所以从服务器端响应是这样的:

res.jsonp({ hello: 'world' });

在客户端 AJAX 是这样的:

$.ajax({
  url: "www.my-other-server.com:8000",
  type: 'GET',
  dataType: 'jsonp',
  success: function(data) {
    console.log(data)
  },
  error: function(xhr, status, error) {
    console.log('error[' + status + '] jsonp');
  }
});

关于javascript - 使用 ShareJS 的访问控制允许来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17398410/

相关文章:

javascript - 如何更改 JavaScript 中的全局变量?

javascript - 为什么 JavaScript 传递未经验证的信息

javascript - 在apache上使用nodeJS发送文件

javascript - 如何运行从 github fork 的 Node.JS 应用程序?

javascript - ES6 : How to call a class function from a callback function

javascript - 数据表响应 : Remove row when columns are hidden

ruby-on-rails - 如何在同一域上运行\处理多个 Ruby on Rails 应用程序?

apache - 在 tomcat 部署时自动启动 Web 应用程序

angularjs - Node Express 不是重定向,而是返回一个字符串

node.js - 如何在 react 中自动刷新数据?