提问者:小点点

Ajax - “访问控制-允许-源不允许源本地主机”


相对来说,我对Ajax还比较陌生,只是负责这个跨域调用。我们的网页上有一个文本框,用户将使用它来执行公司名称的搜索。通过单击文本框旁边的按钮,将请求Ajax调用。不幸的是,web服务位于一个单独的域中,所以这自然会引起问题。

以下是我为完成这项工作所做的最大努力。我还应该注意,这个调用的目的是以XML格式返回结果,这些结果将在请求的< code>success部分进行解析。

这是再次出现错误消息:

“访问控制-允许-源”不允许源 http://localhost:55152。

我不知道该如何解决,任何想法都将不胜感激。

function GetProgramDetails() {
    var URL = "http://quahildy01/xRMDRMA02/xrmservices/2011/OrganizationData.svc/AccountSet?$select=AccountId,Name,neu_UniqueId&$filter=startswith(Name,\'" + $('.searchbox').val() + "\')";
    var request = $.ajax({
        type: 'POST',
        url: URL,
        contentType: "application/x-www-form-urlencoded",
        crossDomain: true,
        dataType: XMLHttpRequest,
        success: function (data) {
            console.log(data);
            alert(data);
        },
        error: function (data) {
            console.log(data);
            alert("Unable to process your resquest at this time.");
        }
    });
}

共1个答案

匿名用户

此错误是由于跨域资源共享中实施的限制造成的。这已作为安全功能的一部分实现,以通过跨域调用限制资源的客户端(域)。当您向webservice或api或类似应用程序发送请求时,它会在服务器或目标(这里是您的api)的请求中添加源标头,以验证请求是否来自授权源。理想情况下,api/服务器应在其收到的请求头中查找来源,并可能根据允许其向其提供资源的来源(域)集进行验证。如果它来自允许的域,则它将在响应头中添加与访问控制允许来源”相同的域。通配符也是允许的,但问题是,有了通配符权限,任何人都可以发出请求并得到服务(有一些限制,比如api通过windows auth或Cookie进行身份验证,在这些限制下,您需要发送带有凭据的*)。在响应头中使用通配符源不是一个好的做法,因为它会对所有人开放。

以下是用值设置响应头的一些方法:-

Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: http://yourdomain.com

您甚至可以在同一响应中添加多个访问控制-允许-源标头(我相信在大多数浏览器中都有效)

Access-Control-Allow-Origin: http://yourdomain1.com
Access-Control-Allow-Origin: http://yourdomain2.com
Access-Control-Allow-Origin: http://yourdomain3.com

在服务器端(c#语法),您应该这样做:-

var sourceDomain = Request.Headers["Origin"]; //This gives the origin domain for the request
     Response.AppendHeader("Access-Control-Allow-Origin", sourceDomain ); //Set the response header with the origin value after validation (if any) .Depending on the type of application you are using syntax may vary.

希望这有帮助!!!