Javascript 跨域知识详细介绍

yizhihongxing

Javascript 跨域知识详细介绍

什么是跨域?

在 Web 开发中,当一个网页的脚本程序试图去访问另一个网页中的内容时,如果这两个网页之间的协议、域名、端口号不一致,就会触发浏览器的同源策略产生跨域问题。跨域问题是一个非常常见的问题,也是 Web 开发中必须要面对和解决的问题。

同源策略

同源是指,两个页面拥有相同的协议(http/https)、域名 和 端口,只有这三者完全相同才被认为是同源。

同源策略是不允许跨域访问操作(如读写 cookie、DOM 操作等),同源策略的设计是为了保证用户数据的安全,防止恶意脚本窃取用户的个人信息。

跨域的解决方案

1. JSONP( JSON with Padding )

JSONP利用了 script 标签是不受同源策略限制的特性,通过 script 标签引入一个包含回调函数的 json 文本,从而实现跨域访问。

示例:

// 定义回调函数
function handleData(data) {
  console.log(data);
}

// 动态创建 script 标签,设置请求url
const script = document.createElement('script');
script.src = 'http://example.com/api/data?callback=handleData';

// 把标签插入到html中
document.getElementsByTagName('head')[0].appendChild(script);

2. CORS( Cross-Origin Resource Sharing )

CORS实现跨域请求的核心思想是在服务端设置允许跨域访问的响应头,浏览器将在请求时检测响应中是否包含这些允许跨域的头信息,如果有,则浏览器会允许对方访问。

示例:

服务端返回响应头信息:Access-Control-Allow-Origin

Access-Control-Allow-Origin: *

表示允许所有域名访问。

3. 代理

代理就是设置一个中间代理服务器,在这个代理服务器上进行跨域请求,再把数据返回给前端,通过代理,前端可以绕开同源策略直接访问需要的资源。

示例:

fetch('/api/data', {
  method: 'POST',
  credentials: 'include'
})
.then(res => res.json())
.then(res => {
  console.log(res);
})
.catch(err => {
  console.error(err);
})

前端通过fetch请求代理服务器设置了请求地址为 "/api/data",代理服务器在后台转发请求到 "/domain/api/data" 地址。

总结

以上是跨域的三种解决方案,不同的场景和需求需要选择不同的方案来解决跨域问题。同时,开发者要时刻注意跨域带来的安全问题,防止恶意攻击造成的数据泄漏和其他风险。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript 跨域知识详细介绍 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • javascript函数式编程程序员的工具集

    对于JavaScript函数式编程程序员,以下是一些常用的工具集合,我们将会一一讲解。 Ramda Ramda是一个功能强大且易于使用的JavaScript函数式编程库。它包含很多函数,如map,filter,compose等,以帮助你更容易地完成计算型编程任务。 下面是一个简单的示例,演示如何使用Ramda: import R from ‘ramda’; …

    JavaScript 2023年5月27日
    00
  • html下载本地

    要将HTML文件下载到本地,我们可以使用以下两种方法: 方法一:右键另存为(Save As) 这是最简单的方法,只需右键点击正在浏览的HTML页面,选择“另存为”或“Save As”,然后指定下载路径和文件名即可。 请注意,如果这个HTML页面包含CSS、JavaScript或图像等外部文件,则需要将这些文件一同下载到本地,并确保它们在同一文件夹内或者正确链…

    JavaScript 2023年5月27日
    00
  • js实现登陆与注册功能

    实现登录和注册功能是实现网站用户系统非常重要的一部分。下面是一个基本的js实现登陆与注册的攻略: 1.设计数据库 数据库是用来保存用户信息和验证用户身份的主要存储介质,需要提前设计好数据库的结构并使用相关的数据库技术(如MySQL)进行实现,至少包含用户信息表和用户登录信息表。常见的用户信息表包含加密后的用户名、加密后的密码、用户邮箱、注册时间等字段,示例:…

    JavaScript 2023年5月19日
    00
  • 不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了

    首先,不间断滚动JS打包类是一种JavaScript库,用于在网页上实现各种滚动效果,包括但不限于文字滚动、图片滚动、轮播图等。 使用步骤: 1.引入js文件 在html文件中引入js文件,例如: <script src="path/to/scroll.js"></script> 2.创建滚动元素 在html文件中…

    JavaScript 2023年6月11日
    00
  • js裁剪(分隔)字符串的三种常用方法

    当我们处理字符串时,经常需要对字符串进行裁剪或者分隔,这里我介绍三种常用的JavaScript字符串处理方法。 方法一:使用substr方法裁剪字符串 substr方法基于指定的起始下标和长度裁剪给定的字符串。 const originalString = "Hello, World!"; const startIndex = 7; //…

    JavaScript 2023年5月28日
    00
  • JS中的数组转变成JSON格式字符串的方法

    将JS中的数组转换成JSON格式字符串,需要使用JSON.stringify()这个方法。下面是具体的步骤: 创建一个JS数组。 将JS数组传递给JSON.stringify()方法。 JSON.stringify()会将JS数组转换成JSON格式字符串。 下面附上一个示例: var arr = ["JavaScript", "…

    JavaScript 2023年5月27日
    00
  • 浅谈JS中json数据的处理

    下面是“浅谈JS中json数据的处理”的完整攻略: 一、什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,以易于读写且易于机器解析的形式传输数据。JSON采用键值对的形式组织数据,并使用逗号分隔不同的键值对。 二、JSON数据的表示方式 在JavaScript中使用JSON表示数据时,可以使用字面量表…

    JavaScript 2023年6月11日
    00
  • javascript unicode与GBK2312(中文)编码转换方法

    下面是详细讲解“javascript unicode与GBK2312(中文)编码转换方法”的完整攻略。 了解Unicode与GBK2312编码 在进行编码转换前,我们需要先了解所涉及的两种编码方式:Unicode和GBK2312。 Unicode是国际标准化组织制定的国际编码标准,它为世界上所有的字符规定了统一的编码,包括字母、数字、标点符号、各国文字等。U…

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