简而言之,我正在使用类似于DICOM文件的查看器API,称为Cornerstone。为此,我连接到dc4chee的WADO服务获取DICOM文件,dcm4chee运行在8080端口上,我的Node应用程序使用3000端口,因此我正在尝试显示浏览器的DICOM文件。
https://www.npmjs.com/package/cornerstone-wado-image-loader
这是浏览器显示的错误。
XMLHttpRequest can not load 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. In 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http: // localhost: 3000' is therefore not allowed access.
在文档中指定:
请注意,网页服务器必须支持跨源资源共享,否则图像将无法加载。如果您无法在加载DICOM P10实例的Web服务器上启用CORS,则可以使用反向代理。这是一个基于http-proxy的简单Node.js示例代码,可添加CORS标头,您可能会发现它很有用。
并展示了这个例子的代码,但我正在使用express,这段代码不起作用。
Var http = require ('http'),
HttpProxy = require ('http-proxy');
Var proxy = httpProxy.createProxyServer ({target: 'http: // localhost: 8042'}) .listen (8000);
Proxy.on ('proxyRes', function (proxyReq, req, res, options) {
// add the CORS header to the response
Res.setHeader ('Access-Control-Allow-Origin', '*');
});
Proxy.on ('error', function (e) {
// suppress errors
});
这里也要使用npm的cors代码
Var express = require ('express')
Var cors = require ('cors')
Var app = express ()
App.get ('/ products /: id', cors (), function (req, res, next) {
Res.json ({msg: 'This is CORS-enabled for a Single Route'))
})
App.listen (80, function () {
Console.log ('CORS-enabled web server listening on port 80')
})
但是这样我只能在端口3000上启用CORS,而不是8080。我需要以模式激活或添加“Access-Control-Allow-Origin”到响应标头而不是请求标头中。
我该如何在运行NODEjs的dcm4chee上添加端口8080的CORS呢?
更新!
服务器以以下方式响应:
RESPONDE HEADER
Content-Type:application/dicom
Date:Sat, 01 Apr 2017 01:15:38 GMT
Expires:0
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
X-Powered-By:Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA
date=200807181439)/JBossWeb-2.0
请求头
Accept:*/*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:es-ES,es;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Host:localhost:8080
Origin:http: //localhost:3000
Referer:http: //localhost:3000/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/55.0.2883.87 Safari/537.36
如何在响应头中启用跨源资源共享(CORS)?
Var
不能大写,而且你正在大写变量名(变量名区分大小写),比如使用App
,但你却定义它为app
。 - AJ FunkApp.get('/products/:id', cors(), function(req, res, next) { res.json({msg: 'This is CORS-enabled for a Single Route')) })
-Res
和res
不是同一个变量。 - John