【问题标题】:NodeJS cors don't filter anythingNodeJS cors 不过滤任何东西
【发布时间】:2021-04-08 10:51:12
【问题描述】:

我尝试按照我找到的教程进行操作 here 和 here。但似乎无论如何都接受了路线:

const config = require('config')
const express = require('express')
const cors = require('cors')
const bodyParser = require('body-parser')
const app = express()

var corsOptions = {
  origin: 'https://example.com',
  optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}

app.get('/test', function (req, res) {
  console.log(req.get('host')+' - '+req.get('origin'))
  res.send('OK')
})

app.get('/test2', cors(corsOptions), function (req, res) {
  console.log(req.get('host')+' - '+req.get('origin'))
  res.send('OK2')
})

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())

app.get('/', function (req, res) {
  res.send('Hello World')
})

app.listen(config.get('app.port'))

当我在浏览器中输入 URL 或在控制台中获取 URL 时,控制台中有相同的行:myAPIwebsite.com - undefined(myAPIwebsite.com 是访问节点 API 的位置)。

我想要的是 /test 可以在任何地方工作,但 /test2 仅适用于来自 example.com 的请求。

有人可以帮帮我吗?在此先感谢:)

【问题讨论】:

    标签: node.js cors


    【解决方案1】:

    默认情况下,来自一个域但转到另一个域的许多/大多数请求被阻止。 CORS 标头允许您有选择地解除这些限制。

    在浏览器地址栏中直接打开网址从未被阻止,因此 CORS 无法帮助您“取消阻止”最初未被阻止的内容。

    CORS 中的 S 代表共享。标头只是为了放松限制。

    【讨论】:

    • 好的,所以这些教程确实具有误导性,我的印象是您可以阻止来自您不允许的 URL 的请求......这不正是 cors 包建议做的吗?
    • 不,再次强调,CORS 是为了降低安全性,而不是提高安全性。
    • 我在这里写了一些关于它的东西:evertpot.com/no-cors
    • 感谢您的回复。我认为每篇“CORS”文章都可以开始解释如何增加安全性(即限制访问)。在我的示例中,我认为我必须检查来源并发送代码 500。
    • 这方面的文章太多了,而且大部分都是不好的。最好的办法是去像 MDN 这样有信誉的来源,了解这些东西的实际作用,而不是阅读更多的 blogspam =)
    猜你喜欢
    • 2022-01-23
    • 2020-01-02
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多