【问题标题】:Problems with nodeS CORSnodeS CORS 的问题
【发布时间】:2017-08-25 03:48:15
【问题描述】:

我正在尝试使用 NODEJS 显示 dicom,但浏览器向我抛出了这个问题

XMLHttpRequest 无法加载 http://localhost:8080/wado? RequestType = WADO & studyUID = 1.2.840.113704.1.111.5 ... 26513.429 & contentType = application% 2Fdicom & transferSyntax = 1.2.840.10008.1.2。在 'Access-Control-Allow-Origin' 中,请求的资源上存在标头。来源 'http://localhost:3000' 是 因此不允许访问。

然后安装 npm 包 cors

在这里,我将我的代码部分留在我的代码 app.js 中

Var express = require ('express');
Var cors = require ('cors')
App.use (cors ())


App.listen (3000, function () {
  Console.log ('listening on 3000')
})

也可以尝试在 app.js 中添加它

App.use (function (req, res, next) {
  Res.header ("Access-Control-Allow-Origin", "*");
  Res.header ("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  Next ();
});

但是浏览器还是显示错误:

XMLHttpRequest 无法加载 http://localhost:8080/wado? RequestType = WADO & studyUID = 1.2.840.113704.1.111.5 ... 26513.429 & contentType = application% 2Fdicom & transferSyntax = 1.2.840.10008.1.2。在 'Access-Control-Allow-Origin' 中,请求的资源上存在标头。来源 'http://localhost:3000' 是 因此不允许访问。

我有疑问,因为我也使用了我留在这里的路由 index.js

var express = require('express');
var router = express.Router();
var cors = require('cors')
/*var express = require('express');
var router = express.Router();*/
var mysql = require('mysql');
router.use(cors({origin: 'http://localhost:3000'}));
/* GET home page. */
router.get('/', function(req, res, next) {
 res.render('index', { title: 'Express' });
});

module.exports = router;

对不起我的英语

【问题讨论】:

  • 如果你的服务器正在监听 3000 端口,什么在监听 8080?
  • 问题中引用的错误消息表明端口 8080 服务器(无论它是什么......)是您需要配置以返回 Access-Control-Allow-Origin 等响应标头的服务器。无论您在端口 3000 服务器上执行何种 CORS 配置,就修复该错误而言都不会产生任何影响。因为那个 3000 端口的服务器是发送跨域请求的服务器,对吧? CORS 配置需要在接收跨域请求的服务器上设置。
  • 我的 NODEJS 应用程序在端口 3000 上运行,dcm4chee 使用 WADO 服务来让 DICOM 在端口 8080 上运行;也尝试像这样使用指向 8080 的 cors:app.use (cors ({origin: 'http: // localhost: 8080'})) 但浏览器仍然响应同样的问题
  • 你能给我一些如何配置 cors 的例子吗?拜托,dcm4chee 是在端口 8080 上运行的那个,是提供 dicom 的那个,而我在 NODEJS 中的应用程序在端口 3000 上运行的是接收 dicom 的那个。
  • @M.Node 详细信息在我添加的答案中。基本上除非您知道如何配置 Dcm4chee 服务器以发送 Access-Control-Allow-Origin 响应标头,否则您需要在两者之间放置一个代理并使用它。

标签: node.js http browser cors


【解决方案1】:

出于安全目的,浏览器在正常情况下不允许跨源请求。

您的页面是从localhost:3000 加载的,它定义了来源,因为它是第一个请求。您的代码正在尝试从在端口 8080 上运行的另一个服务加载数据,该服务与源不同。所以基本上你需要在端口 8080 上运行的服务上启用 cors,因为它是外部源。

【讨论】:

  • 我不是很明白,我知道我应该启用8080端口的cors,但是我不明白怎么做,我的意思是我必须在应用程序的NODEJS中做。 js 指向 8080 端口。或者在 dcm4chee 中做一些外部配置,即你的 dicom 提供者?
  • 我的问题来自端口 8080,因为我将 Access-Control-Allow-Origin 添加到端口 8080,这是 dcm4chee 服务工作的地方,它为我提供了 DICOM 文件,我的应用程序在端口 3000 上工作并且已经在端口 3000 中启用 cors,但是当我在端口 8080 中启用 CORS 时,提供 DICOM 图像的服务工作,这是我的问题。
  • @M.Node 您必须在 DICOM 服务端口而不是 3000 上启用 CORS,因为在端口 3000 上运行的节点服务是您的来源。您可以毫无问题地使用您的来源传输数据。但是当您的浏览器尝试向端口 8080 发出请求时,那不是您的源应用程序。因此,在端口 8080 上运行的服务必须告诉浏览器它已准备好与不同来源共享资源。如果 8080 端口没有说明,那么您的浏览器会认为您正在尝试从其他域窃取一些数据并对其进行限制。
猜你喜欢
  • 2021-10-27
  • 1970-01-01
  • 2018-04-04
  • 2015-06-29
  • 2021-11-16
  • 2017-04-22
  • 2017-04-13
  • 2019-10-14
相关资源
最近更新 更多