WCF 上的 CORS - 为啥在请求来自客户端机器时指定 Web 服务器?
Posted
技术标签:
【中文标题】WCF 上的 CORS - 为啥在请求来自客户端机器时指定 Web 服务器?【英文标题】:CORS on WCF - Why specify web server when request is from client machine?WCF 上的 CORS - 为什么在请求来自客户端机器时指定 Web 服务器? 【发布时间】:2016-07-10 17:48:42 【问题描述】:为了允许对 WCF 服务的 HTTP GET 请求,我必须通过在 WCF 方法中执行此操作来允许 Web 服务器访问:
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", webServer);
为什么会这样?请求来自客户端浏览器,而不是 Web 服务器。
加载页面 客户端 -- HTTP --> WebServer
提出 WCF 请求 客户端 -- HTTP --> WCF 服务
我使用 Wireshark 检查 WCF 服务器上的流量。它确实来自用户打开网页的客户端计算机。它不是来自网络服务器。那么,当流量不是来自 Web 服务器时,为什么在 Access-Control-Allow-Origin
中指定 Web 服务器会起作用?
如果有帮助,这就是 javascript 中的调用:
var config =
url: 'http://WcfServerName:8000/MmaWebApiService/CreateCassette',
method: 'POST',
contentType: 'application/json; charset=utf-8',
data: 'moduleSerialNumbers': [$scope.state.subId1, $scope.state.subId2, $scope.state.subId3]
;
$http(config)
.then(function (response)
addCassetteToStack(response.data.d);
$rootScope.setUserMessage('Cassette ' + response.data.d.SerialNumber + ' created.');
, function (response)
console.log('err: ', response);
);
【问题讨论】:
我不确定提供的代码中 webServer 的类型或属性是什么,所以我做了一些假设。通常,WCF 服务器是您的受保护资源,您应该在该级别允许或拒绝来自不同源域(例如您的 Web 服务器或 javascript 代码)的访问。即使您的 javascript 调用是在客户端进行的,请求标头也应该包含用于访问控制的源域。 啊,就是这样!我的请求标头将 Web 服务器显示为主机。谢谢!如果您想将其发布为答案,我会接受。 【参考方案1】:我不确定提供的代码中 webServer 的类型或属性是什么,所以我做了一些假设。通常,WCF 服务器是您的受保护资源,您应该在该级别允许或拒绝来自不同源域(例如您的 Web 服务器或 javascript 代码)的访问。即使您的 javascript 调用是在客户端进行的,请求标头也应该包含用于访问控制的源域。
【讨论】:
以上是关于WCF 上的 CORS - 为啥在请求来自客户端机器时指定 Web 服务器?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 CORS 配置没有导致服务器过滤传入的请求?如何让服务器只接受来自特定来源的请求?
为啥我的 CORS 配置没有导致服务器过滤传入的请求?如何让服务器只接受来自特定来源的请求?
在 WCF/WIF 中,如何合并来自两个不同客户端的自定义 sts 令牌的声明