【问题标题】:How to enable CORS?如何启用 CORS?
【发布时间】:2015-08-13 03:50:39
【问题描述】:

我正在从客户端向不同域上的 Web-API 发出请求,以提取 JSON 格式的数据。如何启用跨域资源共享 (CORS)? 客户端在 https 上运行,而我的 web-API 在 http 上运行。

这是我正在进行的 AJAX 调用:

$(document).ready(function () {
    $.ajax({
        type: "GET",
        url: "http://map.techriff.in/api/values",
        success: function (json) {
            console.log(json);
        },
        error: function (err) {
            console.log(err);
        }
    });
});

【问题讨论】:

  • CORS 已启用。 API 只能服务于 http 请求。我们希望为 https 启用它。有什么办法吗??
  • 您的问题错过了一个基本信息:您如何在服务器端启用 CORS,以及针对哪些域?根据您之前的评论,您正在启用它。如何?如果我们看不到它,为什么不知道它为什么会失败。

标签: ajax json asp.net-web-api cors


【解决方案1】:

您需要将Access-Control-Allow-Origin: http://domain.com 添加到您的响应标头中,其中 domain.com 替换为您要允许的域(不要使用 * 通配符)。

如何做到这一点取决于您的服务器堆栈。在 ASP.NET 中:

Response.AppendHeader("Access-Control-Allow-Origin", "http://domain.com");

然后您需要在 jQuery 中设置 $.support.cors = true 以在客户端上启用它。

【讨论】:

    【解决方案2】:

    在进行 $.ajax 调用之前在某处添加 $.support.cors = true;

    来源:Is it safe to use $.support.cors = true; in jQuery?

    假设您在服务器上也正确设置了 Access-Control-Allow-Origin 标头。

    CORS jQuery AJAX request

    【讨论】:

      【解决方案3】:

      当我遇到 Chrome 显示以下错误的问题时,此网站帮助了我:“请求的资源上不存在‘Access-Control-Allow-Origin’标头”

      转到标题为“启用 CORS”的部分。

      https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api

      注意,我使用了以下属性语法,而不是上面网站中列出的语法:

              [EnableCors("http://localhost:1616", "*", "*")]
      

      【讨论】:

        【解决方案4】:

        首先,这是一个大问题。每个人都会说你必须在服务器中启用 CORS。如果我们请求 API 怎么办?我做的是。

        第 1 步:对我自己的服务器进行 ajax 调用。 第 2 步:从我的服务器向 API 发出 https 请求。 第 3 步:将结果发送到 ajax。

        我的 AJAX 调用。

           $.ajax({
                      type: "POST",
                      url: "makepay",
                      data:{
                                  key:value
                             },
                             success: function(response) {
                                 //place to handle the response
        
                                  },
                                  error: function() {
                                     //place to handle the error
                                  }
                        }); 
        

        我的服务器页面

        const https = require('https');
        app.post('/makepay',function(req, res){
          var options = {
          host: "Site address",
          path: "Path",
          method: "POST",
          headers: {
              'Content-Type': 'application/x-www-form-urlencoded',
        
          }
          var req = https.request(options, (resp) => {
          resp.on('data', (xmlresponse) => {
          res.send(xmlresponse);  
          }}
          req.write(parameters_to_the_API);
          req.end();
        
        });
        

        我希望你至少能明白这一点。

        【讨论】:

        猜你喜欢
        • 2014-01-19
        • 2020-02-17
        • 2019-06-28
        • 1970-01-01
        • 2014-07-29
        • 2015-05-27
        • 2020-11-24
        相关资源
        最近更新 更多