JS跨域总结

yizhihongxing

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日

相关文章

  • networkInformation.downlink测用户网速方法详解

    networkInformation.downlink测用户网速方法详解 在当前移动互联网时代,提高用户体验成为互联网公司重中之重,而给用户提供良好的网速体验则是其中关键之一。在前端开发中,我们可以使用 networkInformation.downlink 对用户的网速进行测量,从而更好的优化页面加载速度和改善用户体验。 什么是networkInforma…

    JavaScript 2023年6月11日
    00
  • 微信小程序表单验证功能完整实例

    下面是关于“微信小程序表单验证功能完整实例”的详细攻略,包含了代码实现和示例说明。 1. 简介 在微信小程序开发过程中,我们经常需要使用表单来收集用户数据。为了保证数据的有效性和安全性,我们需要对表单数据进行验证。下面我们就来介绍一种微信小程序表单验证功能的完整实例。 2. 实现步骤 2.1 HTML 结构 首先,我们需要在 HTML 中添加表单元素,并设置…

    JavaScript 2023年6月10日
    00
  • JavaScript立即执行函数的三种不同写法

    当我们想要立即调用一个函数时,就需要用到JavaScript立即执行函数。立即执行函数是一个函数执行完毕后立即被调用执行,而不是等到再次调用。它常用于模块化开发,而这个函数中的变量不会污染全局变量。 下面来讲解三种不同写法: 写法一:使用圆括号把函数括起来 (function() { // 函数体 })(); 这是最常见的一种写法,把函数用圆括号括起来,这个…

    JavaScript 2023年5月27日
    00
  • 详解ES6中的let命令

    我来为你详细讲解ES6中的let命令的完整攻略。 什么是let命令 在ES6中,let命令是用来声明变量的,与之前的var命令不同的是,let声明的变量只在块级作用域内部有效,不存在变量提升的现象,且不可重复声明。 块级作用域 什么是块级作用域?块级作用域就是在花括号内部的作用域,通常用来限制变量的作用范围。 示例1 { let a = 1; var b =…

    JavaScript 2023年6月11日
    00
  • JavaScript中一些特殊的字符运算

    下面是关于“JavaScript中一些特殊的字符运算”的完整攻略。 前言 在JavaScript中,一些特殊的字符可以进行运算,这些运算可以实现很多有趣的功能,但也需要我们仔细地了解它们的使用方法。本文将详细讲解这些特殊字符在JavaScript中的使用方法,并给出两条示例说明。 章节 1. 逗号运算符(,) 逗号运算符可以用于将多个表达式连接在一起,并且最…

    JavaScript 2023年5月28日
    00
  • 在支持HTML5的浏览器上运行WebGL程序的方法

    在支持HTML5的浏览器上运行WebGL程序,需要经过以下步骤: 步骤一:检查浏览器是否支持WebGL 在运行WebGL程序之前需要检查浏览器是否支持WebGL。可以通过以下代码进行检查: function detectWebGL() { if (!window.WebGLRenderingContext) { // 浏览器不支持WebGL return f…

    JavaScript 2023年6月11日
    00
  • javascript中SetInterval与setTimeout的定时器用法

    关于JavaScript中的SetInterval和setTimeout定时器用法,我会给你一些详细的说明。 SetInterval和setTimeout的简介 SetInterval和setTimeout是JavaScript中非常常用、常见的两个定时器,它们可以让我们在一个指定的时间间隔或者一次性的延时之后执行相应的代码。具体来说: SetInterva…

    JavaScript 2023年6月11日
    00
  • 基于jQuery的$.getScript方法去加载javaScript文档解析

    当需要动态加载JavaScript文件时,可以使用$.getScript()方法。下面是完整的攻略: 什么是$.getScript()方法 $.getScript()是jQuery提供的一种方便的方法,可以用于异步加载并解析JavaScript文件。使用$.getScript()方法后,不需要像传统的<script>标签那样阻止页面加载,可以在页…

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