我正在学习angularJS并尝试在我的应用程序中实现它。
我在本地主机IIS上托管了RESTful WCF服务。它具有定义为获取文档列表的GET方法:http:// localhost:70 /
DocumentRESTService.svc / GetDocuments
/
现在,我试图在我的角度应用程序中使用此服务并显示数据。以下是代码:HTML:
<html>
<script src="../../dist/js/angular/angular.min.js"></script>
<script src="../../assets/js/one.js"></script>
<body ng-app="myoneapp" ng-controller="oneAppCtrl">
{{"Hello" + "AngularJS"}}
<hr>
<h1> Response from my REST Service </h1>
{{hashValue}}
<hr>
<h1> Response from w3school REST Service </h1>
{{names}}
</body>
</html>
JS:
angular.module('myoneapp', [])
.controller('oneAppCtrl', function($scope,$http){
$scope.documentValue = {};
$http({method: 'GET',
url: 'http://localhost:70/DocumentRESTService.svc/GetDocuments/',
headers:
{
// 'Access-Control-Allow-Origin': 'http://localhost'
}
})
.success(function(data){ alert('Success!'); $scope.documentValue=data;})
.error(function(data){ alert('Error!'); $scope.documentValue=data; alert('Error!' + $scope.documentValue);})
.catch(function(data){ alert('Catch!'); $scope.documentValue= data;});
$http.get("http://www.w3schools.com/angular/customers.php")
.success(function(response) {$scope.names = response.records;});
});
奇怪的行为是,此代码在IE11中可以很好地工作,而不能在Chrome / Firefox中运行。
以下是chrome中的响应:(对于我的REST服务),而来自w3schools的REST服务运行正常。
{“数据”:null,“状态”:0,“配置”:{“方法”:“ GET”,“ transformRequest”:[null],“
transformResponse”:[null],“ url”:“ http:/
/localhost:70/DocumentRESTService.svc/GetDocuments/
“,”标题“:{” Accept“:”应用程序/ json,文本/纯文本, / “}},” statusText“:”“}
控制台显示以下错误消息。
XMLHttpRequest无法加载http:// localhost:70 / DocumentRESTService.svc /
GetDocuments
/。所请求的资源上没有“
Access-Control-Allow-Origin”标头。因此,不允许访问源“ file://”。
XMLHttpRequest无法加载http:// localhost:70 / DocumentRESTService.svc /
GetDocuments
/。所请求的资源上没有“
Access-Control-Allow-Origin”标头。因此,不允许访问来源’
http://127.0.0.1:55969 ‘。
跨域请求被阻止:同源策略禁止读取位于http:// localhost:70 / DocumentRESTService.svc /
GetDocuments
/的远程资源。可以通过将资源移到同一域或启用CORS来解决此问题。
这里的问题很少:
任何帮助或指导都会有所帮助。
PS:
我可以解决这个问题。这样做的几种方法-我记下了我尝试过的所有内容及其参考。
回答问题1。
'Why is localhost or my machineName considered to be a cross-domain request?'
正如@charlietfl提到的,我在这里进行了研究:浏览器也将不同的端口或子域视为跨域。
回答Ques2。
'Are there any changes required to do at my service end to enable this behavior?'
是!服务器端本身需要进行更改。服务器应使用以下命令响应请求
访问控制允许来源:*
标头。在这里*可以替换为请求标头本身或根据您的应用程序要求。如果您使用的是WCF
REST服务,则此处的优秀博客介绍了解决方法。您需要在每个服务方法中添加以下行(标题),以在服务方法中启用CORS。
WebOperationContext.Current.OutgoingResponse.Headers.Add(
“ Access-Control-Allow-Origin”,“ *”);
WebOperationContext.Current.OutgoingResponse.Headers.Add(
“ Access-Control-Allow-Methods”,“ POST”);
WebOperationContext.Current.OutgoingResponse.Headers.Add(
“ Access-Control-Allow-Headers”,“ Content-Type,Accept”);
此处的规范对于在服务器/客户端上启用CORS非常有帮助。
回答问题3。
JSONP通常适用于GET请求,不是最可取的用法,最建议启用CORS。(我没有对此领域进行过很多探讨,但此处的Wiki和stackoverflow文章具有很强的描述性)。
除此之外,出于测试目的,此处提供了不错的chrome
扩展名可能会有所帮助。它可以用来确保应用程序存在CORS问题。
我一直试图将我托管在Digital Ocean droplet上的API调用为Node.js Express服务器。我遇到的问题是科斯。下面是我的客户端调用和错误。 服务器端只是一个简单的express服务器,没有实现到代码中的核心。我试过使用app.use(cors())但没有成功,所以我现在重新开始。前端是react js和Axios。 我得到的错误是 我需要在这里做什么?在客户端和服务器端。
我还一直得到“自动填充$HTTP_RAW_POST_DATA是deprecated”,并且我已经在.ini中将always_populate_raw_post_data更改为-1,我一直得到这些。
我正在使用Vue创建一个简单的应用程序,并使用axios调用endpoint 我得到了错误 源于http://localhost:8080'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:它没有HTTP ok状态。 问题不在服务器级别,我已经从Postman或直接使用CURL进行了测试,它不会生成错误。 感谢Shrinivas Bendkhale的评论。我设法解决了这个问题。 起初它不
在asp.net核心中,我可以使用中间件在某些方法上启用CORS,如下所述 我想知道是否可以为任何方案和上的任何端口启用CORS(仅用于测试目的)。我尝试了通配符,它不起作用
我正在windows 8.1的笔记本电脑上使用Xampp localhost并试图通过我的手机访问它,我打开CMD并键入ipconfig和IPV4地址是192.168.1.3 我通过笔记本电脑打开它,它正常显示xampp文件夹,但当我将ip放入移动浏览器时,它什么也不给我(此网页不可用-ERR_CONNECTION_TIMED_OUT) 那么我怎样才能从我的android设备访问Xampp呢? 我
我一直在遵循这个例子 使用jQuery创建和使用WCF Restful服务 我收到以下错误: XMLHttp请求无法加载http://localhost:48839/EmployeeService.svc/GetEmployeeDetails/.对预检请求的响应未通过权限改造检查:请求的资源上不存在“访问控制允许起源”标头。因此不允许访问起源“http://localhost:57402”。响应具