跨域的五种解决方案详解

2023-05-16

1.跨域解决方案一:cors技术

CORS :全称cross origin resource share (资源共享)

工作原理: 服务器 在返回响应报文的时候,在响应头中 设置一个允许的header

res.setHeader(‘Access-Control-Allow-Origin’, ‘*’)

CORS :全称cross origin resource share (资源共享)

服务器 在返回响应报文的时候,在响应头中 设置一个允许的header

//服务器设置CORS,允许浏览器跨域
res.setHeader('Access-Control-Allow-Origin', '*')

1.png

2-express使用中间件cors

官网传送门:https://www.expressjs.com.cn/resources/middleware.html

xpress有一个自带的中间件cors,它的作用是自动给每一个res设置默认请求头

这样就不用我们自己每一个接口都要设置一次了

2.png
仅需两步即可潇洒搞定!

//1.下包 
$ npm install cors


//2配置中间件 
var cors = require('cors') 
app.use(cors()

cors中间件底层原理如下

app.use((req, res, next) => {//任何请求都会进入这个use中间件 
res.setHeader('Access-Control-Allow-Origin', '*')//设置响应头 
next()//执行下一个中间件  })

2.跨域解决方案二:原生jsonp

通过动态创建script标签,通过script标签的src,向一个不同源的接口发送一个get请求

3.png
src属性发送请求时,在参数中额外携带一个callback的参数,参数值是一个在页面中预先定于好的函数名

callback属性值:预先定义的函数名,这个函数必须要在script标签之前定义

服务器接收到请求之后,获取callback的参数值

服务器将要响应的数据拼接成 函数调用格式,通过传参的方式将响应数据返回给浏览器

4.png

注意:JSONP只支持get请求,不支持post

3.跨域解决方案三: jQuery中的jsonp

只需要一行代码

dataType:'jsonp'

底层原理与原生一致,设置dataType为jsonp,jq会自动动态帮我们创建一个script标签,将url放到src属性中

细节注意点:jq使用jsonp不需要自己设置callback,jq会自动帮我们发送callback参数,参数值就是jq的success回调函数

5.png
4.跨域解决方案四:谷歌浏览器设置跨域

跨域是浏览器的一个安全限制,我们可以通过修改一些设置,让被设置的浏览器没有这个同源的限制,自然可以实现跨域

5.区别

最后的最后总结一下SONP与CORS的区别

1.CORS:

服务器返回响应头,前端无需任何处理

简单快捷,支持所有请求方式

2.JSONP

浏览器:自定义响应回调函数,使用script标签的src请求

利用浏览器的src属性没有跨域这一限制特点

服务器:接收callback参数,返回函数调用

处理复杂,并且只支持get请求

原因:get请求参数直接在url后面拼接,而post请求参数是放在请求体中

未完待续…

最后

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跨域的五种解决方案详解 的相关文章

随机推荐

  • Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】

    最近一周在研究rom移植 xff0c 所以就对Smali语言学习了一下 xff0c Smali语言其实就是Davlik的寄存器语言 xff1b Smali语言就是android的应用程序 apk通过apktool反编译出来的都有一个smal
  • android4.0自定义锁屏总结【android锁屏研究一】

    最近搬家了 xff0c 从北京 gt 深圳 xff0c 除了天气有点不同外 xff0c 其他的都差不多 xff0c 工作性质和以前也类似 xff01 纪念一下自己的迁移 题外话 转载请表明出处 xff1a http blog csdn ne
  • Android(6.0、7.0、8.0) popupWindow弹窗位置错乱解决方案

    问题描述 xff1a 项目中做一个底部弹窗选择地址的功能 xff0c 直接用的PopupWindow xff0c 简单方便 xff0c 但是却不慎入坑 要求效果 xff0c 如下图 xff1a 就是这么一个简单的底部弹窗 xff0c 点击家
  • android系统锁屏详解【android锁屏解析二】

    谷歌的代码写的确实不错 xff0c 我很幸运 xff0c 一开始接触代码就赶上了谷歌这个开源的系统 xff0c 让我的视野开阔了很多 xff0c 也让我看到了优秀的代码工程师写到的代码 心怀感恩之心 题记 我的有篇文章说了这个锁屏 xff0
  • <转载>创建第一个Android项目

    Android 如何创建项目 Android Hai的博客 CSDN博客 android新建项目 目录一 创建流程二 Android Studio 主窗口三 链接一 创建流程1 安装最新版 Android Studio 2 第一次打开And
  • kotlin---使用注释处理的 Android 框架

    在日常 Android 开发中 xff0c 流行着数以千计的框架帮助我们提升开发效率 使用 Kotlin 开发时仍然可以沿用这些框架 xff0c 而且和使用 Java 同样简单 本章教程将提供相关示例并重点介绍配置的差异 教程以 Dagge
  • 集合的使用——超市购物小票案例

    集合的使用 超市购物小票案例 1 定义GoodsItem类 名称 货号 单价 数量 计价单位 金额 span class token comment 定义GoodsItem类 名称 货号 单价 数量 计价单位 金额 span span cl
  • 在Eclipse中添加sun.misc.Launcher类

    研究类加载器 xff0c 用到sun misc Launcher类 xff0c 如何在Eclipse中添加呢 xff1f 启动类加载器的加载路径 URL ruls 61 sun misc Launcher getBootstrapClass
  • IllegalMonitorStateException异常 | 生产者消费者模式

    文章目录 结论先行 xff1a 生产者消费者 synchronized版生产者消费者 Lock版 结论先行 xff1a 这是JDK对这异常的定义 就是说线程没有拿到对应对象的监视器 xff0c 也就不能在监视器上完成wait或者notify
  • Warning Stopping docker.service, but it can still be activated by docker.socket

    执行 systemctl stop docker 后提示 Warning Stopping docker service but it can still be activated by docker socket 解释 xff1a 这是d
  • docker desktop stopping 问题解决

    搜了下网上一些解决问题好像比较多的是docker desktop stopped xff0c 他们是说换低版本的docker desktop解决的 xff0c 但是我的是通过更新WSL xff08 Windows Subsystem for
  • Hadoop启动

    博主用的是Cent0S XShell7使用Hadoop 1 启动Hadoop start all sh 这里会给你报出不赞同的问题 xff0c 但是也是可以使用的 xff0c 最好是采用分别运行HDFS YARN的方式来启动Hadoop 2
  • IDEA2020启动Tomcat控制台中文乱码解决

    IDEA2020启动Tomcat控制台中文乱码解决 1 中文乱码原因 基本上大家安装的windows系统本地语言都是选择中文 xff08 不会有人选择英文吧 xff1f 不会吧 xff1f 不会吧 xff1f xff09 xff0c 也就是
  • log4j和logback的比较

    一 slf4j slf4j是一系列的日志接口 xff0c 而log4j logback等则是具体实现了的日志框架 因为是接口 xff0c 所以在项目中如果你不引用log4j logback或者其它日志框架你会发现 xff0c 控制台的输出是
  • MyEclipse配置Tomcat 7

    1 打开步骤 xff1a 窗口 gt 首选项 gt MyEclipse gt Servers gt Tomcat gt Tomcat 7 x 2 配置自己本地的Tomcat 7版本 3 关闭MyEclipse自带的Tomcat服务器 4 启
  • mysql之模糊查询的方法

    Mysql模糊查询正常情况下在数据量小的时候 xff0c 速度还是可以的 xff0c 但是不容易看出查询的效率 xff0c 在数据量达到百万级 xff0c 千万级的甚至亿级时mysql查询的效率是很关键的 xff0c 也是很重要的 一 一般
  • Spring Cloud限流详解

    Spring Cloud限流详解 Spring Cloud Spring Cloud 2017 12 01 在高并发的应用中 xff0c 限流往往是一个绕不开的话题 本文详细探讨在Spring Cloud中如何实现限流 在Zuul上实现限流
  • 如何释放linux的内存

    你们知道怎么释放linux的内存吗不知道的话跟着学习啦小编一起来学习怎么释放linux的内存 释放linux的内存的步骤 Linux下操作频繁时 xff0c 物理内存会被快速用完 xff0c 当操作结束后 xff0c 物理内存没有被正常的释
  • docker修改镜像名称以及tag版本

    docker tag 镜像ID 镜像名称 tag版本信息 docker tag 8ef375298394 mysql v5 7
  • 跨域的五种解决方案详解

    1 跨域解决方案一 cors技术 CORS 全称cross origin resource share xff08 资源共享 xff09 工作原理 xff1a 服务器 在返回响应报文的时候 xff0c 在响应头中 设置一个允许的header