在不使用CORS

时间:2017-07-06 14:28:46

标签: javascript node.js http express cors

我正在教自己web开发人员,我刚刚从面向客户端的页面向Express.js API后端发送XMLHttpRequests。在这种特殊情况下,我使用它来传输表单数据并将其保存到Mongo数据库。

我遇到的具体问题是:我将其编码为application/json,由于Express.js API在http://127.0.0.1:3000上运行,因此会引发跨域错误。我理解对同一域但是不同端口的请求会导致此错误。

我已经能够通过npm install cors然后在我的Express.js源代码中使用var cors = require('cors');app.use(cors());来绕过它,但据我所知,它会打开API可以来自任何地方的请求。如果我真的希望它只能在我自己的域上访问,该怎么办?我的意思是假设它是一个生产网站mysite.com,表单位于mysite.com/form,后端位于mysite.com:3000。我认为我能够正确地提出这些例子,但我不熟悉这一点,我不确定。

如何让它们在同一个域上运行,以便不进行跨源请求?有没有标准的方法来做到这一点?到目前为止,我觉得要获得后端并且在同一个端口上运行的表单需要从Express.js后端本身提供表单页面,但如果我不想将Express作为我的服务器怎么办?如果我想以某种其他方式从Apache或其他方式提供页面,并且只是将此数据发送到Express以进行处理,该怎么办?或者,如果我想让一个Angular应用程序将POST数据运行到Express后端,再次进行处理?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您想坚持使用CORS,可以将其配置为坚持某个来源:http://community.jaspersoft.com/questions/513429/bolditalic-unicode-ms 但请记住,这并不能阻止其他人通过简单的curl命令访问您的API。 CORS用于保护浏览器,而不是API。

更好的方法(您自己提到)将使两个部分在同一个域和端口上运行。这可以通过代理请求来实现。在Express中,您只需将您的前端代码作为静态资产https://www.npmjs.com/package/cors#configuring-cors传递即可。在Apache中你也可以添加一些代理,虽然我无法帮助你,因为我并不熟悉Apache模块和设置。

保护您的API免受第三方访问是另一个主题。您需要某种形式的身份验证和授权。做正确的事情可能很难。也许你应该看一下express.static()的成熟标准。