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日

相关文章

  • $()JS小技巧

    $()JS小技巧 在前端开发中,我们经常需要对DOM元素进行操作,而jQuery库可以帮助我们更方便地实现这些操作。其中一个最常用的方法是$(),它可以获取DOM元素并对其进行操作。 基本语法 $()是jQuery的一种基本语法,它可以通过选择器来选取HTML元素,并返回一个jQuery对象。基本语法如下: $(selector).action() 其中的s…

    JavaScript 2023年5月18日
    00
  • jQuery getJSON 处理json数据的代码

    下面我来详细讲解一下“jQuery getJSON 处理json数据的代码”的完整攻略。 什么是JSON数据 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它是基于JavaScript的一个子集,数据格式简单易读,易于编写和理解。 JSON 数据格式的示例如下: { "name": &quot…

    JavaScript 2023年5月27日
    00
  • JavaScript设计模式之模板方法模式原理与用法示例

    JavaScript设计模式之模板方法模式 简介 模板方法模式(Template Method Design Pattern)又称为模板模式,是一种行为型设计模式。在该模式中,定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。也就是说,在父类中定义好算法的骨架,具体实现留给子类去实现,这样就可以保证算法的整体流程在父类中控制,所有子类遵循相同的规则去按…

    JavaScript 2023年6月10日
    00
  • 前端设计模式——解释器模式

    解释器模式(Interpreter Pattern):是一种行为型设计模式,它可以用来解决一些特定问题,例如编译器、计算器等等。这种模式定义了一个语言的语法,并用一个解释器来解释语言中的表达式。 解释器模式可以用来处理例如数据格式化、表单验证等业务场景。在这些场景中,我们需要定义一些语法规则,然后使用解释器来解释这些规则。 解释器模式的基本结构包括四个角色:…

    JavaScript 2023年4月18日
    00
  • JavaScript中的object转换成number或string规则介绍

    JavaScript中的Object(对象)是一种复杂的数据类型,可以包含多个属性,每个属性都是键值对,其中的值可以是原始类型或其他的Object。在JavaScript中,我们经常需要将Object转换为number或string类型。那么,JavaScript中Object转换为number或string的规则是什么?下面我们来详细解释。 Object转…

    JavaScript 2023年6月10日
    00
  • Ajax异步请求技术实例讲解

    Ajax异步请求技术实例讲解 Ajax是一种在不重新加载网页的情况下,能够实现与服务器进行数据交互的技术,它可以帮助我们通过JavaScript向服务器发起异步请求,并在请求成功后执行一定的操作,例如更新页面内容等。 Ajax的基本使用方法 在JavaScript中使用Ajax,需要用到XMLHttpRequest对象,通过该对象来向服务器发起请求并获取响应…

    JavaScript 2023年6月11日
    00
  • javascript教程:关于if简写语句优化的方法

    针对“javascript教程:关于if简写语句优化的方法”的优化攻略,我将进行完整的讲解。首先我们来了解下if语句的简写方法: 三元运算符 三元运算符是JavaScript中最常用的简写方法,它可以将一个if语句简化为一个表达式。 if (condition) { value = true; } else { value = false; } // 简化为…

    JavaScript 2023年6月11日
    00
  • Javascript数组循环遍历之forEach详解

    Javascript数组循环遍历之forEach详解 foreEach()方法的基本使用 JavaScript中的数组可以使用forEach()方法进行遍历,forEach()方法接收一个函数作为参数,该函数将在数组中的每个元素上运行,基本语法如下: array.forEach(function(currentValue, index, arr), this…

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