javascript - AngularJs 发送 OPTION 而不是 POST 请求

标签 javascript angularjs xss

我已经在谷歌上搜索过这个问题。这似乎是一种正常行为,因为我正在尝试发出跨站点请求。我根据我在这里阅读的所有内容创建了我的 WebService:

<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Xml, UseHttpGet:=False)> _
Public Function Test() As String
    Me.Context.Response.Clear()
    Me.Context.Response.AddHeader("Access-Control-Allow-Origin", "*")
    Me.Context.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type")
    Me.Context.Response.ContentType = "text/plain"
    Return "<test>aRetStr</test>"
End Function

这是一个简单的 angularJS 脚本:

var myModule = angular.module('myModule', [])

myModule.controller('myController', function($scope, userRepository) {
    userRepository.getAllUsers().success(function(users) {
                                    alert("success");
                                    var myjson = JSON.parse(users);
                                    $scope.users = myjson})
                                .error(function(data, status, headers, config) {
                                    alert("error");
                                 });
    });

myModule.factory('userRepository', function($http) {
    return {
        getAllUsers: function() {
            $http.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
            var url = "http://localhost:2693/service.asmx/Test";
            var xml = $http.post(url, {test: 'test'});
            return xml;
        }
    };
});

X-Requested-With = XMLHttpRequestAccess-Control-Allow-Origin = *text/plain 也被认为是建议的在这里,这对我来说不起作用。 确实,Firebug 向我显示了一个 OPTIONS 请求,并且没有 XSS 错误,但以下 POST 永远不会发生。错误警报被触发,当发生这种情况时,回调中的配置如下所示:

Accept : application/json, text/plain, */*
Content-Type : application/json;charset=utf-8
X-Requested-With : XMLHttpRequest
method : POST

我能做什么,为什么没有任何反应?

最佳答案

很抱歉回复不完整,但我不太了解你的后端技术。

基本上,由于 CORS,您的 Angular 应用程序正在向您的服务器发出预检请求,这意味着它首先对该 URL 执行 HTTP.OPTIONS 请求,在服务器成功响应后,它将发出 HTTP.xxx请求(在本例中为 POST)。

因为您还没有配置您的网络服务来响应 HTTP.OPTIONS,我相信这就是导致您错误的原因。

解决方案是将您的 Web 服务配置为使用以下 header 回复 HTTP.OPTIONS 请求:

    response: 200, "ok"
    header 'Access-Control-Allow-Origin': http://yoursite.com
    header 'Access-Control-Allow-Methods': 'POST, OPTIONS'

请在此处查看有关 CORS 规范的更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests

关于javascript - AngularJs 发送 OPTION 而不是 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27173445/

相关文章:

javascript - 即时放大/缩小

javascript - jQuery - AJAX 错误 : does not re-enable submit button

javascript - 查询结果未定义

javascript - 在 AngularJS 中禁用不需要的验证(条件验证)

php - 如何防止我的网站受到 XSS 注入(inject)?

php - &lt;script&gt; 标签 - 留下/创建空间(&lt;script&gt;)会减少 XSS 的威胁吗?

javascript - 解析自定义日期并排序

angularjs - Angular js Controller 内的关键字 "this"

javascript - 在循环中向 Javascript 对象动态添加键/值对

java - 我应该使用 URL 重写来防止 XSS