首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >xmlHttp.getResponseHeader +不适用于CORS

xmlHttp.getResponseHeader +不适用于CORS
EN

Stack Overflow用户
提问于 2013-02-04 20:25:39
回答 1查看 20K关注 0票数 23

我在.NET 4上有一个asp.NET WCF。这个服务是用来验证用户身份的。我们正在提交用户名和密码,然后应返回包含身份验证cookie的HTTP标头。使用本地托管的测试页面,这可以正常工作。我现在正在尝试跨域访问标头信息。我已经在另一台机器上安装了我的测试页面,并配置为调用WCF。调用正在工作,并且调用中的“data”回复正确。但是,我无法使用以下任一项访问标头信息:

代码语言:javascript
复制
alert(xmlHttp.getAllResponseHeaders());

代码语言:javascript
复制
alert(xmlHttp.getResponseHeader("Set-Cookie"));

使用IE中的调试器和Firefox的'Live HTTP Header‘插件,我可以看到标题信息正在返回。

在我的全局ajax页面中,我设置了处理CORS的响应。

代码语言:javascript
复制
private void EnableCrossDomainAjaxCall()
{
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");


    if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
    {

        HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");

        HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
        HttpContext.Current.Response.End();
    }

}

这是我用来调用服务的AJAX:

代码语言:javascript
复制
$("#btnLogin").click(function(e) {
    var geturl;
    geturl = $.ajax({
        // type: "POST",
        type: "GET",
        contentType: "application/json; charset=utf-8",
        url: 'http://10.0.4.66/AuthenticationService.svc/Login?Name=test&password=pwsd',
        // url: '../SecurityServer/AuthenticationService.svc/Login?Name=test&password=pwsd',
        dataType: "jsonp",
        error: function(request, status, error) {
            alert('Error Occured');
        },
        crossdomain: true,
        success: function(data, textStatus, xmlHttp) {
            // alert(xmlHttp.getResponseHeader("Content-Type"));
            document.write(xmlHttp.getResponseHeader("Content-Type") + "<br/>");
            alert(xmlHttp.getAllResponseHeaders());
            alert(xmlHttp.getResponseHeader("Set-Cookie"));
            var headers = '';
            var headerPair = xmlHttp.getAllResponseHeaders('wcfCookie').split("\r\n");
            var output = '';
            $.each(headerPair, function(key, line) {
                var parts = line.split(':');

                if (parts[0] == 'wcfCookie') {
                  ChocChip = parts[1]
                  return false
                }

            });
        }
    });

下面是我从“Live HTTP headers”中抓取的邮件头信息

代码语言:javascript
复制
Date: Mon, 04 Feb 2013 12:12:40 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Access-Control-Allow-Origin: *
Set-Cookie: wcfCookie=8D38D5D6A0F138FEB595DD016F7694EDDF3E6757C82ED3D419F5047A5294974C1885487465CEC0A0BCC2B3802C7B03FF9F5370A05D4CCBDDDABCB1558C3816044BF4F78209BF38C6B1A7CAD34CD3C85C40B8515CFB1C2B2694BC78803D8DACB4
Content-Length: 65
Cache-Control: application/json; charset=utf-8
Content-Type: application/x-javascript
EN

回答 1

Stack Overflow用户

发布于 2013-02-04 22:28:18

浏览器的安全策略可能会阻止您的响应,因为您尚未设置:

代码语言:javascript
复制
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials","true");

如果这还不起作用,可以尝试添加

代码语言:javascript
复制
xhrFields: { withCredentials: true }

你的ajax选项可能也值得一试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14686769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档