JS跨域总结

JS跨域总结攻略

什么是跨域

在浏览器中,一个Web页面从一个服务器的域名、端口或协议请求资源时,如果该请求目标与该Web页面的域名、端口或协议不一致,就会发生跨域。

JS跨域的原因

跨域问题的出现是因为浏览器的同源策略。同源策略是浏览器对JavaScript代码的安全限制,同源是指协议,域名,端口号均相同。浏览器阻止页面中的JavaScript程序去访问不同源下的资源,以此保障用户的信息安全。

JS跨域的解决方案

  1. JSONP

JSONP(JSON with Padding)是一种解决跨域的方案,它的原理是利用script标签不受同源策略限制的特性,在请求时通过动态创建script标签,将需要获取的数据作为回调函数的参数传递到前端页面中。

示例:

前端页面代码:

function handleResponse(data) {
  console.log(data);
}

const script = document.createElement("script");
script.src = "http://domain1.com/api?callback=handleResponse";
document.body.appendChild(script);

后台接口代码:

const query = req.query;
const str = JSON.stringify(req.query);
const callback = query.callback;
res.send(`${callback}(${str})`);
  1. CORS

CORS(Cross-Origin Resource Sharing)是由W3C提出的一种跨域解决方案,其原理是在服务端设置Access-Control-Allow-Origin头信息来告诉浏览器请求的域可以跨域请求数据。

示例:

前端页面代码:

fetch("http://domain2.com/api", {
  method: "GET",
  mode: "cors",
  headers: {
    "Content-Type": "application/json",
  },
}).then((res) => console.log(res));

后台接口代码:

res.set("Access-Control-Allow-Origin", "http://domain1.com");
res.set("Access-Control-Allow-Methods", "GET, POST");
res.set("Access-Control-Allow-Headers", "Content-Type");
res.send("Hello CORS");

其他跨域解决方案

  1. 代理服务器

可以在本地创建一个代理服务器,用这个服务器向目标服务器发起请求,然后再将结果返回给浏览器,绕过同源策略的限制。但是这种方案需要依赖于一个可靠的代理服务器。

  1. WebSocket

WebSocket是一种双向通信协议,没有同源策略限制,可以用来在不同源的浏览器客户端之间打通通讯线路。但是该协议需要在服务端和客户端同时支持,需要较高的技术实力才能实现。

总结

对于跨域问题,我们可以通过JSONP和CORS两种方案来解决。JSONP适用于简单的跨域场景,而CORS则适用于复杂的跨域场景。除了这两种方案,我们还可以通过代理服务器和WebSocket等技术来解决跨域问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS跨域总结 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • Jquery替换已存在于element上的event的方法

    在jQuery中,我们可以使用unbind()和bind()方法来替换已存在的事件。具体来说,可以按照以下步骤进行: 使用unbind()方法将原有的事件从元素上卸载掉。 使用bind()方法重新绑定需要替换的事件。 下面是两个示例: 示例1:替换已有的click事件 假设我们有一个按钮,已经绑定了click事件,在点击按钮时会弹出一个提示框。现在我们需要将…

    JavaScript 2023年6月10日
    00
  • JavaScript原型与原型链深入探究使用方法

    JavaScript原型与原型链深入探究使用方法 原型 JavaScript中每个函数都有一个prototype属性,它指向一个对象。这个对象就是所谓的“原型对象”或“原型”。我们可以在原型对象上添加方法和属性,这些方法和属性可以被构造函数创建的实例所共享。在原型对象上定义的方法和属性,可以被该构造函数所创建的所有实例共享使用。这样,我们就可以省略实例中相同…

    JavaScript 2023年6月10日
    00
  • 基于Bootstrap+jQuery.validate实现Form表单验证

    针对“基于Bootstrap+jQuery.validate实现Form表单验证”的攻略,我可以提供以下内容: 1. 引入相应库和插件 在HTML中引入Bootstrap和jQuery库,并在其下方引入jquery.validate插件及其语言包文件。 <!– Bootstrap CSS 文件 –> <link rel="st…

    JavaScript 2023年6月10日
    00
  • JavaScript截断字符串的方法

    当需要在JavaScript中处理字符串时,很可能会遇到需要截断字符串的情况。以下是几种JavaScript截断字符串的方法: 1. substring函数 substring()是JavaScript中截断字符串最常用的函数之一。语法如下: string.substring(start, end) string是要进行截断的字符串。 start是子字符串的…

    JavaScript 2023年5月28日
    00
  • JS数组合并push与concat区别分析

    JS数组合并push与concat区别分析 push方法 push()是JavaScript内置方法之一,用于向数组末尾添加元素,并返回数组的新长度。 let arr1 = [1, 2, 3]; let arr2 = [4, 5, 6]; arr1.push(…arr2); console.log(arr1); // [1, 2, 3, 4, 5, 6]…

    JavaScript 2023年5月27日
    00
  • js数组去重常见的方法汇总(7种)

    下面我将详细讲解“js数组去重常见的方法汇总(7种)”。 一、引言 在JavaScript的实际开发中,经常会遇到需要对数组进行去重操作的情况。而JavaScript提供了多种方法来进行数组去重操作,下面将详细介绍七种常见的方法。 二、使用Set Set是ES6新引入的一种集合数据类型,它可以存储任意类型的唯一值。使用Set可以很方便地实现数组去重,只需要将…

    JavaScript 2023年5月27日
    00
  • JavaScript中.min.js和.js文件的区别讲解

    JavaScript是一种在浏览器中运行的脚本语言,它不仅可以为网页增添动态效果,还可以实现与用户的交互。在JavaScript中,我们通常会看到两种不同的文件类型:.js文件和.min.js文件。这两种文件类型的主要区别在于其文件大小和文件内容的压缩方式。 .js文件 .js文件是JavaScript源代码文件的扩展名,这种文件类型通常包含已经格式化好的、…

    JavaScript 2023年5月27日
    00
  • Bootstrap 3.x打印预览背景色与文字显示异常的解决

    问题描述 在使用 Bootstrap 3.x 进行页面开发时,我们可能会遇到打印预览中背景色与文字显示异常的问题。具体表现为: 背景色未被打印; 文字被截断或是部分未被显示。 这是因为 Bootstrap 3.x 中默认有一些 CSS 样式会影响打印预览的效果,但我们可以通过以下方式来解决问题。 解决方案 为了实现标准的打印预览效果,我们需要定义打印样式表,…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部