8.跨域请求

news2024/12/22 19:12:04

目录

1  一些概念

1.1  同源

1.2  同源策略

1.3  跨域

2  JSONP

2.1  原理

2.2  jQuery中的JSONP

2.2.1  默认情况

2.2.2  自定义键与函数名称

2.2.3  淘宝搜索建议请求


1  一些概念

1.1  同源

两个页面的 协议,域名与端口都相同,则两个页面具有相同的源。

  • 如果域名后面没有端口号,那么代表使用的是默认端口号80

在视频中举了几个例子来分析url是否同源

1.2  同源策略

同源策略是浏览器提供的安全功能,用于隔离潜在的恶意文件,也就是说无法用A源头的文件对B源头的文件造成影响,比如

  • 无法读取非同源网页的Cookie,LocalStorage和IndexedDB
  • 无法接触非同源网页的DOM
  • 无法想非同源地址发送Ajax请求

script标签不受浏览器同源策略的影响

1.3  跨域

同源值两个URL的协议,域名,端口一致,如果这三个有一个不同的就是跨域。由于同源策略的存在,浏览器会对跨域请求进行拦截

实现跨域请求主要有两种解决方案,分别是JSONP与CORS

JSONP的兼容性比CORS好(兼容低版本IE),但是只支持GET请求,不支持POST请求

CORS属于W3C标准中解决跨域Ajax的请求方案,支持GET与POST请求

2  JSONP

JSONP一定要后端配合才可以完成

2.1  原理

JSONP(JSON with Padding)是JSON的一种使用模式。由于script标签不受浏览器同源策略的影响,我们可以通过src属性请求非同源的JS脚本。JSONP的实现原理就是通过script的src属性请求跨域的数据接口,并通过函数调用的形式接收跨域接口响应回来的数据

视频中的P58-P59讲了JSONP的实现原理 02.JSONP-JSONP的概念_哔哩哔哩_bilibili

我简单总结一下

  • 利用script标签中的src属性实现跨域
  • 讲前端方法作为参数传递到服务端,然后服务端注入参数后返回实现通信
  • 由于要使用到script的src属性,因此只支持get
  • JSONP不属于Ajax请求,因为在F12中network的XHR没有显示任何东西

先看前端

首先定义一个函数,我这里的名称是success,这个函数中写你拿到结果后要怎样处理

之后通过script标签发get请求,问号前是地址,问号后是查询字符串,查询字符串需要包含你刚刚定义的函数名,以及服务需要的参数

再看后端,后端我取消了之前用于跨域的装饰器

后端接收发送的三个信息(前端与后端的键一定要提前定好)

最后返回值用 return callback + '(' + str(data) + ')' 在上面那个例子中就相当于 success(data),这样就能成功执行你在JS中定义的函数

我们打开网页看一下

发现可以成功请求

2.2  jQuery中的JSONP

jQuery中的JSONP原理也是通过script标签的src搞的,只不过他是动态的,他创建完了就给你删了,你一遍看不到script标签,在network中把网络速度调慢就能看见了

2.2.1  默认情况

使用jQuery同样要在后端定义callback这个键,后端的写法与之前一样

再看前端

使用的是.ajax()方法,在该方法中使用jsonp必须将dataType定义为jsonp,在查询字符串中不需要写callback,$.ajax()方法会给你自动搞一个,但是你的后端一定要有callback这个键

我们打开网页看一下情况

我们看一下后端的响应状况,data1=30,data2=50这些是正常的,我自己没有手动的写callback,在.ajax()会自动给你搞一个函数名,然后他自己再调用,最后还有一个参数是下划线,那个你可以理解为jQuery自己用的参数

2.2.2  自定义键与函数名称

我现在不想用callback这个键了而且我也想自己定义一个函数名称,首先你先跟后端交流好,后端把键改了

然后你使用.ajax()加上两个参数jsonp(键的名称),jsonCallback(函数名称)

可以成功请求

键和函数也都是你要求的名字

2.2.3  淘宝搜索建议请求

有的网站的部分功能会使用JSONP进行跨域请求,比如淘宝的搜索建议

url是https://suggest.taobao.com/sug?q= 在等于号后写输入的内容,我做个例子

这样你就能得到10个搜索建议

这个是用上面的JSONP做的例子,有兴趣可以看一下 附录5-淘宝搜索案例_Suyuoa的博客-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计Django高校实验室仪器设备管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

大数据(9h)FlinkSQL双流JOIN

文章目录1、环境2、Temporal Joins2.1、基于处理时间(重点)2.1.1、设置状态保留时间2.2、基于事件时间3、Lookup Join(重点)4、Interval Joins(基于间隔JOIN)重点是Lookup Join和Processing Time Temporal …

【Ubuntu】修改ubuntu和windows双系统启动顺序

目录一、问题描述二、背景知识1. GRUB是什么2. GRUB配置文件3./etc/default/grub 主配置文件二、问题分析三、解决方案1. 修改grub主配置文件2. 更新grub配置文件一、问题描述 UbuntuWindows双系统默认使用GRUB作为引导管理器,而且通常默认启动Ubuntu。这样过于死板…

用Python分析了30000+《独行月球》影评数据,看看观众们怎么说~

文章目录🏳️‍🌈 1. 导入模块🏳️‍🌈 2. Pandas数据处理2.1 读取数据2.2 数据大小2.3 查看索引、数据类型和内存信息🏳️‍🌈 3. Pyecharts数据可视化3.1 《独行月球》评分分布-13.2 《独行月球》评分分布…

TypeScript学习笔记

TypeScript学习笔记 TypeScript 与 JavaScript 的区别 TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法。TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译。TypeScript 文件的后缀名 .ts (.ts&am…

Milvus的索引方式

索引方式: FLAT:准确率高, 适合数据量小 暴力求解相似。 IVF-FLAT:量化操作, 准确率和速度的平衡 IVF:inverted file 先对空间的点进行聚类,查询时先比较聚类中心距离,再找到最近的N个点。 IV…

redis5.0集群搭建(两台服务器)

文章目录1. 前言2. 配置两台机器内网互联3. redis安装4. redis集群5.0之前和5.0之后版本的区别4.1 redis5.0之前的版本创建集群4.2 redis5.0之后的版本创建集群4.3 redis5.0之前的版本需要依赖ruby环境5. redis5.0集群搭建5.1 创建redis-cluster目录5.2 将之前的redis.conf拷贝…

windbg使用教程

下载 https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools 安装,打开exe 我选择了下载 打开X64 Debuggers And Tools-x64_en-us.msi 要安装对应系统位数 不然打不开 安装完成后没有反应。还以为我弄错了呢&#…

【学习笔记】深度学习入门:基于Python的理论与实现-神经网络的学习

CONTENTS四、神经网络的学习4.1 从数据中学习4.2 Loss function4.3 数值微分4.4 梯度4.5 学习算法的实现四、神经网络的学习 4.1 从数据中学习 神经网络的特征就是可以从数据中学习。所谓“从数据中学习”,是指可以由数据自动决定权重参数的值。利用特征量和机器学…

HBase 开发:使用Java操作HBase 第1关:创建表

为了完成本关任务,你需要掌握:1.如何使用Java连接HBase数据库,2.如何使用Java代码在HBase中创建表。 如何使用Java连接HBase数据库 Java连接HBase需要两个类: HBaseConfigurationConnectionFactoryHBaseConfiguration 要连接HBase…

SPARKSQL3.0-Spark兼容多版本Hive源码分析

一、前言 阅读本节需要先掌握Catalog基础知识 Spark对Hive的所有操作都是通过获取Hive元数据[metastore]帮助spark构建表信息从而调用HDFS-API对原始数据的操作,可以说Spark兼容多版本Hive就是在兼容Hive的Metastore 二、源码分析 在catalog一节中我们知道spark…

二.maven常用功能点

maven常用功能点一:分模块开发设计二:聚合三:继承1.依赖的继承2.可继承的内容3.聚合与继承的区分四:属性1.自定义属性2.内置属性3.Setting属性4.java系统属性5.环境变量属性五:java配置文件引用pom属性六:多…

基于PHP+MySQL大学生心理健康管理系统的设计与实现

随着时代的发展,大学生的数量与日预增但是相对的也出现了很多心理问题,大学生自杀等心理问题引起的问题屡见不鲜如何能过更好的培养大学生正确的心理健康问题是现在很多大学多面临的一个重要的问题。本系统主要是对共享自行车的信息进行管理。该系统的基本功能包括用户登录,用户…

云小课|云小课带你玩转可视化分析ELB日志

阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。 云日志服务支持可视化查看日志,当ELB日志接入云日志服务后&a…

[附源码]计算机毕业设计springboot青栞系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

野火FPGA进阶(3):SDRAM读写控制器的设计与验证

文章目录第50讲:SDRAM读写控制器的设计与验证理论部分设计与实现1. sdram_ctrlsdram_initsdram_a_refsdram_writesdram_readsdram_arbitsdram_ctrl2. sdram_topfifo_ctrlsdram_top3. uart_sdramuart_rxuart_txfifo_readuart_sdram第50讲:SDRAM读写控制器…

[附源码]JAVA毕业设计工程车辆动力电池管理系统(系统+LW)

[附源码]JAVA毕业设计工程车辆动力电池管理系统(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 …

怎么在Windows下使用Makefile文件

前言:如果熟悉在Linux开发的话,肯定知道Makefile文件的用处,它给我们带来很多的便利。在Linux系统下并不会像Windows那么多开发工具,在Windows下,只要在开发工具上点击一个按钮,就能将工程的所有源码进行编…

365天深度学习训练营-第P2周:彩色图片识别

目录 一、前言 二、我的环境 三、代码实现 1、数据下载以及可视化 2、CNN模型 3、训练结果可视化 4、随机图像预测 四、模型优化 1、CNN模型 2、VGG-16模型 3、Alexnet模型 4、Resnet模型 一、前言 >- **🍨 本文为[🔗365天深度学习训练营]…

2022年钒电池行业研究报告

第一章 行业概况 钒电池(Vanadium Redox Battery,缩写为VRB),全称为全钒氧化还原液流电池,是一种活性物质呈循环流动液态的氧化还原电池。钒电池可以作为大容量储能电站的电池,其工作原理如下:…