前端的8种跨域解决方案

这篇具有很好参考价值的文章主要介绍了前端的8种跨域解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在前端开发中,常见的跨域解决方案有以下8种:

  1. JSONP(JSON with Padding):利用<script>标签的跨域特性,通过动态创建<script>标签,请求一个带有回调函数的接口,服务器返回的数据会作为回调函数的参数传入,从而实现跨域请求。
function jsonp(url, callback) {
  const script = document.createElement('script');
  script.src = url + '?callback=' + callback;
  document.body.appendChild(script);
}

jsonp('http://api.example.com/data', 'handleResponse');
function handleResponse(data) {
  console.log(data);
}
  1. CORS(Cross-Origin Resource Sharing):通过服务器设置响应头,允许指定的源(域名、协议、端口)进行跨域请求。
// 服务器响应头设置
Access-Control-Allow-Origin: http://example.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type

// 前端请求
fetch('http://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.log(error));
  1. 反向代理:在服务器端设置一个代理服务器,将前端的请求发送到目标服务器,并将目标服务器的响应返回给前端,从而实现跨域请求。
// 服务器端代理
app.use('/api', proxy({ target: 'http://api.example.com', changeOrigin: true }));

// 前端请求
fetch('/api/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.log(error));
  1. WebSocket:使用WebSocket协议进行跨域通信,WebSocket协议默认支持跨域请求。
const socket = new WebSocket('ws://api.example.com');
socket.onmessage = function(event) {
  console.log(event.data);
};
  1. postMessage:通过window.postMessage方法在不同窗口之间进行跨域通信,可以实现跨域数据传递和消息通知。
// 窗口A发送消息
window.postMessage('Hello', 'http://example.com');

// 窗口B接收消息
window.addEventListener('message', function(event) {
  if (event.origin === 'http://example.com') {
    console.log(event.data);
  }
});
  1. WebSocket + CORS:结合WebSocket和CORS,使用WebSocket建立跨域连接,然后通过CORS发送HTTP请求。
const socket = new WebSocket('ws://api.example.com');
socket.onopen = function() {
  socket.send('GET /data HTTP/1.1\r\nHost: api.example.com\r\n\r\n');
};
socket.onmessage = function(event) {
  console.log(event.data);
};
  1. Nginx反向代理:通过Nginx服务器设置反向代理,将前端的请求转发到目标服务器,从而实现跨域请求。
location /api {
  proxy_pass http://api.example.com;
}
  1. WebRTC:使用WebRTC技术进行跨域通信,可以实现点对点的音视频传输和数据传输。

使用场景:

  1. JSONP:

    • 优点:兼容性好,支持老版本浏览器;简单易用,无需特殊的配置。
    • 缺点:只支持GET请求;存在安全风险,容易受到XSS攻击;只能发送JSON格式的数据。
    • 使用场景:适用于简单的跨域请求,且对安全性要求不高的情况。
  2. CORS:

    • 优点:支持所有类型的HTTP请求;安全性较高,可以通过设置请求头进行控制;不需要特殊的前端代码。
    • 缺点:需要服务器端设置响应头,对于一些没有权限修改响应头的情况无法使用。
    • 使用场景:适用于需要进行复杂跨域请求的情况,且对安全性要求较高。
  3. 反向代理:

    • 优点:适用于所有类型的HTTP请求;不需要特殊的前端代码;可以在服务器端进行请求的处理和过滤。
    • 缺点:需要服务器端设置代理服务器,增加了服务器的负担和复杂度。
    • 使用场景:适用于需要在服务器端进行请求处理或过滤的情况,或者无法修改响应头的情况。
  4. WebSocket:

    • 优点:支持实时通信,可以进行双向通信;跨域限制较少。
    • 缺点:需要服务器端支持WebSocket协议;不适用于传输大量数据。
    • 使用场景:适用于实时通信或需要双向通信的场景,如聊天室、实时数据监控等。
  5. postMessage:

    • 优点:简单易用,无需特殊的配置;支持跨窗口通信。
    • 缺点:只能进行点对点的通信,无法广播消息;需要在接收端进行安全验证。
    • 使用场景:适用于不同窗口之间的通信,如父子窗口、跨域iframe等。
  6. WebSocket + CORS:

    • 优点:结合了WebSocket和CORS的优点,支持实时通信和复杂跨域请求。
    • 缺点:需要服务器端同时支持WebSocket和CORS。
    • 使用场景:适用于需要实时通信和复杂跨域请求的情况。
  7. Nginx反向代理:

    • 优点:支持所有类型的HTTP请求;可以在Nginx服务器上进行请求处理和过滤。
    • 缺点:需要在服务器端配置Nginx服务器,增加了服务器的负担和复杂度。
    • 使用场景:适用于需要在服务器端进行请求处理或过滤的情况,或者无法修改响应头的情况。
  8. WebRTC:文章来源地址https://www.toymoban.com/news/detail-708398.html

    • 优点:支持点对点的音视频传输和数据传输;跨域限制较少。
    • 缺点:需要浏览器和服务器端同时支持WebRTC协议;配置和使用较为复杂。
    • 使用场景:适用于需要进行实时音视频传输或数据传输的场景,如视频会议、实时游戏等。

到了这里,关于前端的8种跨域解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • html前端跨域问题的解决方案

    前言: 在前端发出Ajax请求的时候,有时候会产生跨域问题,报错如下: Access to XMLHttpRequest at ‘http://127.0.0.1/api/post’ from origin ‘null’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. 针对以上问题,本文提供两种解决方案,CORS中间件和

    2023年04月22日
    浏览(80)
  • 前端笔记 ---- Chrome 浏览器不能跨域访问解决方案

    1. 需求场景 Chrome 浏览器开发 H5 进行接口联调时,浏览器不允许跨域访问; 想通过浏览器设置,不使用代理等,浏览器可以进行跨域访问。 2. 报错图片 3. 解决方案 3.1 获取Chrome 浏览器安装位置 3.2 设置允许跨域和不验证证书 3.3 cmd 执行设置命令 3.4 组成完整命令 3.5 cmd 运行命

    2024年02月15日
    浏览(45)
  • 前端常见跨域解决方案(jsonp,cors,proxy,postMessage,webSocket)

    一、JSONP(jsonp) 概念: JSONP(JSON with Padding,填充式 JSON 或参数式 JSON)是一种通过 优点: 简单易用 兼容性好,支持各种浏览器 缺点: 只能实现 GET 请求,无法实现 POST 等其他类型的请求 安全性较低,容易受到 XSS 攻击 Eg: 为什么需要动态生成标签,而不是直接通过 原因有

    2024年02月07日
    浏览(44)
  • 前端跨域主流解决方案(Access to XMLHttpRequest at ‘http..’ from origin ‘null‘ has been blocked by CORS policy)

    前后端分开开发,由于浏览器本身的同源策略(服务端没有这个限制),导致了前端去访问服务端接口时会产生跨域。 经典报错:Access to XMLHttpRequest at ‘http…’ from origin ‘null‘ has been blocked by CORS policy 说明:目前网上的解决方案有9-10种,包括了:1.cors 2.node正向代理 3.ng

    2024年02月08日
    浏览(42)
  • 跨域解决方案

    因为浏览器可以同时打开很多页面,可以同时保存很多授权信息,浏览器为了安全问题,采用了同源策略(浏览器存在跨域问题,服务器不存在跨域问题) 同源策略:是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻

    2024年02月08日
    浏览(40)
  • 跨域问题解决方案(三种)

    具有相同的Origin,也即是拥有相同的协议、主机地址以及端口。一旦这三项数据中有一项不同,那么该资源就将被认为是从不同的Origin得来的,进而不被允许访问。 是一个W3C标准。允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使

    2024年02月07日
    浏览(54)
  • 跨域解决方案(9种)

    说起跨域,就要知道什么是浏览器同源策略 浏览器同源策略:必须是协议、域名、端口完全一致的才符合同源策略 如果以上三项,有一项不同都涉及到跨域问题 浏览器是从两个方面去做这个同源策略的,一是针对接口的请求,二是针对Dom的查询。 有一个东西叫 cookie ,一般

    2024年02月04日
    浏览(47)
  • js跨域的解决方案

    指的是浏览器不能执行其他网站的脚本,简单来说是浏览器同源政策的限制,浏览器针对于ajax的限制。 同源政策 两个页面拥有相同的 协议,端口,域名 就是同源,如果有一个不相同就是不同源。 同源政策产生的目的 保护用户信息安全,防止一些网站盗取用户信息。 常见

    2024年02月10日
    浏览(104)
  • 常见的跨域解决方案

    常见的跨域解决方案: 跨域问题可以分为两种情况: 前端跨域和后端跨域 。以下是针对这两种情况的跨域解决方案: 前端跨域解决方案: JSONP: 适用于前端向不同域名下的服务器请求数据,通过添加回调函数名称来实现跨域数据获取。 CORS: 当前端向服务器请求数据时,

    2024年02月12日
    浏览(47)
  • 前后端跨域解决方案

    跨域问题是由于浏览器的同源策略导致的 。同源策略是一种安全策略,它限制了一个源的文档或脚本如何能够与另一个源的资源进行交互。同源指的是协议、域名、端口号都相同。例如,一个页面从 http://www.example.com 加载了一段 JavaScript 代码,那么该页面就只能与 http://www

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包