前端 三种解决跨域问题 jsonp 、CORS、代理服务器 解决跨域全家桶

我的报错情况是 后端接口是3000 前端本地接口是8080,最后出现跨域
在这里插入图片描述
1.什么是跨域?
首先跨域是一种安全机制,是在开发上线前考虑到的安全问题并且需要采取合适的手段去避免这个问题带来的程序错误,接口跨域可以后端处理,也可以前端处理,一般情况下后端会处理跨域的问题,但是为了避免拿到的接口没有解决,我们也可以通过前端来处理跨域这个需求。

2.为什么出现跨域问题:
在这里插入图片描述
浏览器不能执行其他网站的脚本,是由浏览器同源策略限制的一类请求场景,从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。
同源策略是指"协议+ 域名+端口“三者相同,即便两个不同的域名指向同一个ip地址,也非同源,违背同源策略就是跨域。
3.如果不解决跨域会出现什么问题?
首先接口请求不成功
同源策略它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。

4.通过几个案例查看是否跨域了
案例一:是没有跨域问题

浏览器地址: http://localhost:8080/query2.
Ajax请求地址: http://localhost:8080/select

案例二:(跨域了,端口号不一样)

1.浏览器地址: http://localhost:8080/query
2.Ajax请求地址: http://localhost:8081/select

案例三:(跨域了 协议不一样)

1.浏览器地址: http://localhost:8080/query
2.Ajax请求地址: https://localhost:8080/select

案例四:(跨域了 域名不一样)

1.浏览器地址: http://www.baidu.com/query
2.Ajax请求地址: http://163.177.151.109/select

案例五:(没有跨域:: 默认端口号可以省略 https443)

1.浏览器地址 : http://192.168.1.3:80/query
2.Ajax请求地址: http://192.168.1.3/select

案例6:(没有跨域:: 默认端口号可以省略: https443)

1.浏览器地址: https://192.168.1.3/query
2.Ajax请求地址: https://192.168.1.3:443/select

jsonp解决跨域
1.JSONP解决同源限制问题
原理:利用script标签的src属性可以跨域加载资源的特性,通过动态创建script标签来实现跨域请求。
跨源网络访问的三种方式:跨域写操作,跨域资源嵌入,跨域读操作
前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 静态请求 -->
    <!-- <script src="http://127.0.0.1:30/api/getData?cb=callback"></script> -->
    <script>
        // 动态创建script标签
        const script = document.createElement('script')
        // 设置src属性
        script.src = 'http://127.0.0.1:3000/api/getData?cb=callback'
        // 接收后端的回调函数
        function callback(res) {
            console.log(res,'res');
        }
        // 将script挂载到页面上
        document.getElementsByTagName('body')[0].appendChild(script)
    </script>
</body>
</html>

node.js页面 (改完之后需要重启一下)

// 引入express
const express = require('express')
// 创建实例
const app = express()
// 创建监听端口
const port = 3000
//  定义接口
// app.get('/api/getData',(req,res) =>{
//     // 返回的结果
//     res.send({
//         code:10000,
//         data:{
//             msg:'hellow '
//         }
//     })
// })
// 动态定义接口
app.get('/api/getData',(req,res) =>{
    // 获取前端参数
    const { cb } = req.query
    res.send(`${cb} (${JSON.stringify({
        code:10000,
        data:{
            msg:'哈哈'
        }
    })})`)
})
// 监听当前的端口
app.listen(port,() =>{
    console.log(`server start! port:${port}`);
})

测试
在这里插入图片描述
cores解决跨域问题
原理:需要服务器实现CORS接口,在服务器端设置响应头,允许指定的域名访问资源。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>跨域问题</title>
</head>
<body>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/1.5.0/axios.min.js"></script>
    <script>
        axios({
            methods:'get',
            url:'http://localhost:3000/api/getData'
        })
    </script>
</body>
</html>
// 引入express
const express = require('express')
// 创建实例
const app = express()
// 创建监听端口
const port = 3000
// '*'  匹配所有任意的路径   req:请求体,res:响应体,next:下一步
app.all('*',(req,res,next)=>{
    res.header('Access-Control-Allow-Origin', '*') //允许所有的请求源
    res.header('Access-Control-Allow-Headers', '*') //允许所有的请求源 X-Token
    res.header('Access-Control-Allow-Methods', '*') //允许所有的请求源 get post put delete
    next()
})
//  定义接口
app.get('/api/getData',(req,res) =>{
    // 返回的结果
    res.send({
        code:10000,
        data:{
            msg:'hellow '
        }
    })
})
// JSONP动态定义接口
// app.get('/api/getData',(req,res) =>{
//     // 获取前端参数
//     const { cb } = req.query
//     res.send(`${cb} (${JSON.stringify({
//         code:10000,
//         data:{
//             msg:'哈哈'
//         }
//     })})`)
// })
// 监听当前的端口
app.listen(port,() =>{
    console.log(`server start! port:${port}`);
})

在这里插入图片描述

代理服务器
原理:在同源策略下,通过在同一域名下设置代理服务器,将跨域请求转发到目标服务器上。
在这里插入图片描述
配置代理服务器(仅限于解决本地跨域;项目上线或者打包,要不通过后端解决,要不前端通过nginx反向代理)
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/238100.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Appium微信小程序自动化环境准备

一、前置说明 微信从8.0.19开始内核从x5换成xweb之后&#xff0c;原先的开启webview调试的原方案已经会报503错误。 点击下面的链接&#xff0c;都会报503错误&#xff1a; http://debugmm.qq.com/?forcex5ture http://debugx5.qq.com 微信内核升级为xweb之后&#xff0c;需要…

LeetCode力扣每日一题(Java):58、最后一个单词的长度

一、题目 二、解题思路 1、我的思路 先将字符串转换成字符数组 由于我们需要获取最后一个单词的长度&#xff0c;所以我们从后往前遍历字符数组 我们还需判断所遍历的字符是不是字母&#xff0c;即判断每个字符对应的ASCII值即可&#xff0c;用计数器count来储存单词长度 …

小型洗衣机哪个牌子质量好?迷你洗衣机排名前十名

随着内衣洗衣机的流行&#xff0c;很多小伙伴在纠结该不该入手一款内衣洗衣机&#xff0c;专门来洗一些贴身衣物&#xff0c;答案是非常有必要的&#xff0c;因为我们现在市面上的大型洗衣机只能做清洁&#xff0c;无法对我们的贴身衣物进行一个高强度的清洁&#xff0c;而小小…

Unity优化——加速物理引擎1

大家好&#xff0c;这里是七七&#xff0c;今天开始更新物理引擎相关的优化部分了&#xff0c;本文介绍的是物理引擎内部工作情况。 Unity技术有两种不同的物理引擎&#xff1a;用于3D物理的Nvidia的PhysX和用于2D物理的开源项目Box2D。然而&#xff0c;Unity对它们的实现是高…

和鲸科技携手深圳数据交易所,“数据+数据开发者生态”赋能人工智能产业发展

信息化时代&#xff0c;数据驱动决策的重要性日益凸显。通过利用数据可以深入了解市场需求、客户行为、竞争态势等关键信息&#xff0c;从而制定更为有效的战略和决策。围绕推动数据要素产业发展&#xff0c;近日&#xff0c;深圳数据交易所&#xff08;以下简称“深数所”&…

MySQL InnoDB Replication部署方案与实践

1. 概述 MySQL Innodb ReplicaSet 是 MySQL 团队在 2020 年推出的一款产品&#xff0c;用来帮助用户快速部署和管理主从复制&#xff0c;在数据库层仍然使用的是主从复制技术。 ReplicaSet 主要包含三个组件&#xff1a;MySQL Router、MySQL Server 以及 MySQL Shell 高级客户…

在线课堂知识付费小程序源码系统 开发组合PHP+MySQL:用手机随时随地地学习,讲师亲自在线授业解惑 带安装部署教程

近年来&#xff0c;人们对于学习的需求也日益增加。传统的课堂教学已经无法满足人们的学习需求&#xff0c;而在线课堂则能够让人们随时随地地进行学习。同时&#xff0c;随着知识付费的兴起&#xff0c;越来越多的讲师也愿意将自己的知识和经验分享给更多的人。因此&#xff0…

温湿度传感器DHT11的简单应用

文章目录 一、DHT11是什么&#xff1f;二、使用步骤1.硬件1.硬件连接2.工作原理1.串行单总线2.温湿度数据采集原理 2.软件1.DHT11初始化如下&#xff08;示例&#xff09;&#xff1a;2.DHT11复位如下&#xff08;示例&#xff09;&#xff1a;3.等待DHT11的回应如下&#xff0…

@Transactional失效问题

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 关于Transactional 日…

酷开科技多维度赋能营销,实力斩获三项大奖

在数智化新阶段、广告新生态、传播新业态的背景下&#xff0c;“第30届中国国际广告节广告主盛典暨网易传媒态度营销峰会”于11月18日在厦门国际会展中心盛大举行。来自全国的品牌方、战略决策者、媒体平台和品牌服务机构等汇聚一堂。在50000&#xff0b;现场观众和数千万线上观…

SSL证书HTTPS保护服务

SSL证书属于数字证书的其中一种&#xff0c;广泛用于https协议&#xff0c;从而可以让数据传输在加密前提下完成&#xff0c;确保HTTPS网络安全是申请SSL证书必要工作。 SSL证书是主要用于https是一种加密协议&#xff0c;仔细观察网站地址会发现目前主流的网址前面都会有http…

Linux操作系统学习(零)、计算机概论

计算机概论 指令集 CPU中含有多种指令集&#xff0c;指令集对于CPU运算具有指导和优化的硬程序&#xff0c;用来引导CPU进行加减运算和控制计算机操作系统的一系列指令的集合 常见的就有微指令集RISC和复杂指令集CISC RISC&#xff1a;包括ARM架构和PPC架构 CISC&#xff…

HTML面试题---专题四

文章目录 一、前言二、如何在 HTML 中嵌入音频文件&#xff1f;三、解释 <script> 标签中 defer 属性的用途。四、如何在 HTML 中创建粘性/固定导航栏&#xff1f;五、HTML 中的 span 元素的用途是什么&#xff1f;六、如何使 HTML 元素可拖动&#xff1f;七、解释 <i…

项目中使用Arrays.asList、ArrayList.subList的坑

使用Arrays.asList的注意事项 1.1 可能会踩的坑 先来看下Arrays.asList的使用&#xff1a; List<Integer> statusList Arrays.asList(1, 2); System.out.println(statusList); System.out.println(statusList.contains(1)); System.out.println(statusList.contains(3)…

如何打造稳健高效的数据库的基础设施?数据库云提出创新方案

引言 数据库的云化、丰富业务场景下多元的数据库类型、公有云与私有云交织的IT架构&#xff0c;叠加信创影响使得企业内部的基础设施日益复杂&#xff0c;如何高效管理多元的数据库和多云异构基础设施正成为企业面临的严峻挑战。 在此背景下&#xff0c;数据库云应运而生。数…

六级翻译之印章

好像大房子挺难得 三段式 1Since ancient from now&#xff0c;seals have been a symbol of power and certerfiction of identity.seals not only practical but also is a form of art.Seal is an ancient art combining with manafutuer of crafting and desgin of…

界面控件DevExpress中文教程 - 如何用Office File API组件填充PDF表单

DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库&#xff0c;不用安装Microsoft Office&#xff0c;就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion替换背景

在Stable Diffusion软件中,使用ControlNet+模型实现固定物体批量替换背景 出图的流程。 一、准备好图片 1.你需要准备好一些白底图或者透明底图用于训练模型。 2.你需要准备同样角度的其他背景色底图用于ControlNet勾线 3.注意检查你的图片尺寸,是否为1:1,…

安防 音响 车载等产品中音频接口选型的高性能国产芯片分析

在人工智能兴起之后&#xff0c;安防市场就成为了其全球最大的市场&#xff0c;也是成功落地的最主要场景之一。对于安防应用而言&#xff0c;智慧摄像头、智慧交通、智慧城市等概念的不断涌现&#xff0c;对于芯片产业催生出海量需求。今天&#xff0c;我将为大家梳理GLOBALCH…

STM32 CAN多节点组网项目实操 挖坑与填坑记录

摘要 CAN线性组网项目开发过程中遇到的数据丢包问题&#xff0c;并尝试解决的记录和推测分析。 关键词 CAN串联多节点通讯、CAN10节点通讯、CAN数据丢包、STM32 CAN 背景/项目介绍 概述&#xff1a; 开发了一个多节点线性组网采集数据的项目。 系统包含1个供电和数据网关板还有…