【问题标题】:How to enable CORS for simple AJAX web application如何为简单的 AJAX Web 应用程序启用 CORS
【发布时间】:2015-04-20 12:47:48
【问题描述】:

我已经搜索了很多关于 AJAX 调用 CORS 的解决方案,但我仍然无法从其他服务器获取 XML 数据。

这是控制台注释:

XMLHttpRequest 无法加载 url.xml。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost' 因此不允许访问

我遵循来自:http://www.html5rocks.com/en/tutorials/cors/ 部分的说明:来自 jQuery 的 CORS,这是我尝试的代码:

$.ajax({
    type:'GET',
    url:'http://www.someurl.xml',
    contentType:'text/plain',
    xhrFields:{
        withCredentials: false
    },
    headers: {
        'Access-Control-Allow-Origin':'http://localhost:8080',
        'Access-Control-Allow-Method':'GET',
        'Access-Control-Allow-Headers':'Content-Type,x-requested-with,Authorization,Access-Control-Allow-Origin'
    },
    success: function(data){
        var test = data;
    }
});

我知道这个问题已经被问了很多次,但没有答案可以帮助解决我的问题。

为了在 localhost 中进行测试,我使用的是 IIS 8.5

【问题讨论】:

    标签: ajax crossdomain.xml


    【解决方案1】:

    $.ajax 代码中的 headers 部分将标头添加到服务器的请求中,但 CORS 标头需要出现在来自服务器的响应中。

    使用 IIS,您可以在 web.config<system.webServer> 部分添加带有几行的标题。添加这将使您开始 GET 请求:

    <system.webServer>
     <httpProtocol>
      <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
     </httpProtocol>
    </system.webServer>
    

    更多信息请看这篇文章:http://encosia.com/using-cors-to-access-asp-net-services-across-domains/

    【讨论】:

    • 我试试这个,但我得到这个错误:HTTP 错误 500.19 - 内部服务器错误。但这仍然对我没有帮助,因为我只是在 IIS 中测试它,因为服务器将是应用程序,服务器没有使用 IIS
    • @krnekires 如果您还没有任何其他 web.config,那么您需要的不仅仅是 system.webServer 位,它才能成为有效的 web.config。尝试使用这个:github.com/Encosia/Encosia-Samples-ASMX-CORS/blob/…
    • 现在我在控制台中只收到了 No 'access-control-allow-origin' 注释。我正在获取数据的网址可能有问题吗?这是网址:meteo.si/uploads/probase/www/fproduct/text/sl/…(它是公开的)
    • @krnekires 您的服务器似乎是 apache,而不是 IIS。 Apache 将忽略 web.config 文件。在 apache 上,您可以通过将 Header set Access-Control-Allow-Origin "*" 放入您的 .htaccess 来做同样的事情。
    【解决方案2】:

    CORS 标头必须由您调用的服务器发送,您不能向它们提供请求本身。

    当跨域发出请求时,您的浏览器将在实际请求数据之前执行预检请求以获取相关的 CORS 标头(我相信这使用了 OPTION 方法)。

    如果来自 preflight 的 CORS 标头包含当前来源或与之匹配的通配符,则浏览器将继续处理实际请求并获取一些数据。

    【讨论】:

      猜你喜欢
      • 2015-09-24
      • 2010-10-24
      • 2015-07-24
      • 2023-01-13
      • 2018-12-09
      • 2016-09-17
      • 2018-01-31
      • 1970-01-01
      • 2019-04-17
      相关资源
      最近更新 更多