【问题标题】:Getting CORS node-http-proxy to respond 200 to OPTIONS让 CORS node-http-proxy 响应 200 到 OPTIONS
【发布时间】:2015-08-29 01:42:32
【问题描述】:

我试图让一个在 :9000 上运行的网页向在 :8080 上的节点中运行的反向代理发出请求,以接受请求,就好像它在同一个域上一样。我了解到不同的端口 == 不同的域,因此发送了 OPTIONS 请求。我的服务器返回 401 未经授权,并且 Angular 的 http 客户端收到没有数据的响应,没有控制台错误的代码“无效的 http 状态代码 401 未授权”。

我只想让反向代理像在同一个域上一样工作,并对这些选项请求说“OK”。

【问题讨论】:

    标签: angularjs node.js proxy node-http-proxy


    【解决方案1】:

    反向代理有责任使用预期的 CORS 标头响应 OPTIONS 请求。您能否提供有关节点反向代理的更多详细信息。是快递吗?

    这些是您需要响应的标头(您的用例可能会有所不同,但这是我在最近的项目中需要的):

    res.setHeader('Access-Control-Allow-Origin', 'whatever.com:9000');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
    res.setHeader('Access-Control-Allow-Credentials', true); // you probably dont want this one unless there is auth/cookies involved
    res.setHeader('Access-Control-Allow-Methods', 'GET,PATCH,POST,PUT,DELETE');
    

    【讨论】:

    • 注意角度方面,如果你想在向反向代理发送请求时使用相同的cookie,你可能需要调查withCredentials: true标志的使用,否则你的cookie不会被添加到请求中。
    • 它不是基于 express 的——它只是一个运行 node-http-proxy 的小型 javascript 文件,它位于 spring 服务器的前面。
    • 在这种情况下,您的 http 代理可能正在将 HTTP OPTIONS 请求转发到 spring 服务器,并且 spring 服务器负责回答 OPTIONS 请求。您可以检查 node-http-proxy(为仅将详细信息写入 console.log 的所有请求的事件处理程序)和 spring 服务器的日志,以验证 CORS 请求是否正在转发到 spring 服务器。跨度>
    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 2014-01-18
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多