ajax中的CORS问题怎么处理?

我在一个网站的页面上请求另一个网站的一个链接,提示CORS,这个怎么解决?

 rurl = "http://m.xxxx.com/Tools/add.ashx?title=" + ip+"-"+title + "&tel1=" + tel1 + "&come=" + come + "&content=" + content + "";
                $.ajax({
                    url: rurl,
                    type: "get",
                    dataType: "json",
                    timeout: "60000",
                    success: function (data) {
                        if (data == 0) {
                            alert("留言成功");
                            return true;
                        }
                        else (data == 1)
                        {
                            alert("留言失败");
                            return false;
                        }

                    },

image.png

阅读 1.3k
avatarAI BotBETA

CORS(跨来源资源共享)是一个W3C标准,它定义了一种浏览器和服务器交互的方式来确定是否允许跨来源请求。当从一个源(域、协议和端口)的web页面请求另一个源的资源时,出于安全原因,浏览器会阻止此请求,除非目标资源明确允许它。

处理CORS问题通常有以下几种方法:

  1. 服务器端配置CORS
    最理想的方法是让目标服务器(在这个例子中是http://m.xxxx.com)配置CORS策略以允许你的源进行跨域请求。这通常通过在HTTP响应头中添加Access-Control-Allow-Origin等CORS相关的头部来实现。

    例如,如果m.xxxx.com的服务器是Node.js,则可能使用类似以下的代码来设置CORS头部:

    const express = require('express');
    const app = express();
    
    app.use((req, res, next) => {
      res.header("Access-Control-Allow-Origin", "http://your-site.com"); // 允许你的网站
      res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
      next();
    });
    
    // ... 其他路由和中间件 ...
    
    app.listen(3000, () => console.log('Server is running on port 3000'));

注意:你需要将"http://your-site.com"替换为你的网站的实际域名。

  1. 使用代理服务器
    如果你无法控制目标服务器(即m.xxxx.com),你可以设置一个代理服务器来转发请求并添加适当的CORS头部。代理服务器接收来自你的网站的请求,然后向目标服务器发送请求,并将响应(包括任何必要的CORS头部)转发回你的网站。
  2. JSONP
    对于GET请求,可以使用JSONP(JSON with Padding)作为一种替代方法。但请注意,JSONP仅适用于GET请求,并且存在安全隐患,因为它允许第三方在客户端执行JavaScript代码。
  3. 浏览器插件或扩展
    对于开发或测试目的,你可以使用浏览器插件或扩展来绕过CORS限制。然而,这不适用于生产环境,因为它不会解决跨域请求的安全问题。
  4. 修改前端代码以使用服务器端API
    如果你控制你的网站的服务器端代码,你可以创建一个服务器端API,该API负责向目标服务器发送请求,并将结果返回给你的前端代码。这样,前端代码就不必直接与目标服务器进行跨域通信。

在你的具体情况下,如果你无法修改m.xxxx.com的服务器设置,那么使用代理服务器可能是最可行的解决方案。你可以设置一个代理服务器来转发你的AJAX请求,并在响应中添加适当的CORS头部。然后,你可以将你的AJAX请求的URL更改为代理服务器的URL。

1 个回答

domain-a.com 站访问 domain-b.com站提示 CORS 就是正常解决跨域问题的解决方式。

  1. domain-a.com 增加跨域头;
  2. 做HTTP反向代理,请求变更到 domain-a.com

跨源资源共享(CORS) - HTTP | MDN

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进