跨域技术(JSONP与CROS)

JSONP

我们发现,Web页面上调用js文件时不受是否跨域的影响,凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>。那就是说如果要跨域访问数据,就服务端只能把数据放在js格式的文件里。恰巧我们知道JSON可以简洁的描述复杂数据,而且JSON还被js原生支持,所以在客户端几乎可以随心所欲的处理这种格式的数据。然后客户端就可以通过与调用脚本一模一样的方式,来调用跨域服务器上动态生成的js格式文件。客户端在对JSON文件调用成功之后,也就获得了自己所需的数据。这就形成了JSONP的基本概念。允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

function dll(response){alert(response.city);
}
var script=document.createElement("script");
script.src="http://freegeoip.net/json/?callback=dll";
document.body.insertBefore(script,document.body.firstChild);

 三步走:创建script、指定src,插入到文档。

jQuery支持JSONP的调用。在另外的一个域名中指定好回调函数名称,就可以用下面的形式来就加载JSON数据。
url?callback=?
jQuery.getJSON(url + "&callback=?", function(data)  {  
  alert(data.a + data.b);  
});
服务端当然也要提供JSONP的支持,其实只要提供读写callback这个params就可以了。
跨域资源共享(CORS)
Cross-Origin Resource Sharing (CORS) 是W3c工作草案,它定义了在跨域访问资源时浏览器和服务器之间如何通信。CORS背后的基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定请求或响应成功与否。

CORS与JSONP相比,更为先进、方便和可靠。

1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS。
对一个简单的请求,没有自定义头部,要么使用GET,要么使用POST,它的主体是text/plain,请求用一个名叫Orgin的额外的头部发送。Origin头部包含请求页面的头部(协议,域名,端口),这样服务器可以很容易的决定它是否应该提供响应。
服务器端对于CORS的支持,主要就是通过设置Access-Control-Allow-Origin来进行的。
Header set Access-Control-Allow-Origin * 
为了防止XSS攻击我们的服务器, 我们可以限制域,比如
Access-Control-Allow-Origin: http://blog.csdn.net
很多服务都已经提供了CORS支持,比如 AWS 支持跨域资源分享功能CORS,向S3上传不需要代理。

转载于:https://www.cnblogs.com/dll-ft/p/5761556.html

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

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

相关文章

python3 array为什么不能放不同类型的数据_小白入门Python数据科学全教程lt;一gt;...

前言本文讲解了从零开始学习Python数据科学的全过程&#xff0c;涵盖各种工具和方法你将会学习到如何使用python做基本的数据分析你还可以了解机器学习算法的原理和使用说明先说一段题外话。我是一名数据科学家&#xff0c;在用SAS做分析超过5年后&#xff0c;我决定走出舒适区…

c winform 上传文件到mysql_C# winform DevExpress上传图片到数据库【转】

实现功能如下图&#xff1a;注明&#xff1a;此文使用的是DevExpress控件&#xff0c;winform 原生控件也是一样使用方法。1.点击选择图片按钮&#xff0c;功能为通过对话框选择要上传的文件&#xff0c;并将该文件在下面的PictureEdit中显示出来。具体代码如下&#xff1a;pri…

V 8 nfs+drbd+heartbeat

V 8 nfsdrbdheartbeatnfsdrbdheartbeat&#xff0c;nfs或分布式存储mfs只要有单点都可用此方案解决在企业实际生产场景中&#xff0c;nfs是中小企业最常用的存储架构解决方案之一&#xff0c;该架构方案部署简单、维护方便&#xff0c;只需通过配inotifyrsync简单而高效的数据同…

nodemailer使用_如何使用Nodemailer使用HTML作为内容发送电子邮件 Node.js

nodemailer使用Prerequisite: 先决条件&#xff1a; How to send emails using Nodemailer | Node.js 如何使用Nodemailer发送电子邮件。 Node.js How to send emails with attachments using Nodemailer | Node.js 如何使用Nodemailer发送带有附件的电子邮件。 Node.js This …

angularjs 元素重复指定次数_[LeetCode] 442. 数组中重复的数据

[LeetCode] 442. 数组中重复的数据题目链接&#xff1a; https://leetcode-cn.com/problems/find-all-duplicates-in-an-array难度&#xff1a;中等通过率&#xff1a;61.5%题目描述:给定一个整数数组 a&#xff0c;其中1 ≤ a[i] ≤ n &#xff08; n 为数组长度&#xff09;,…

docker 安装mysql 实战文档_docker 安装mysql

PassJava (佳必过) 项目全套学习教程连载中&#xff0c;关注公众号第一时间获取。docker 安装mysql1.下载镜像sudo docker pull mysql:5.7ubuntuVM-0-13-ubuntu:~$ sudo docker pull mysql:5.75.7: Pulling from library/mysqlc499e6d256d6: Pull complete22c4cdf4ea75: Pull c…

python 补前导零_Python正则表达式| 程序从IP地址中删除前导零

python 补前导零Given an IP address as input, write a Python program to remove leading zeros from it. 给定一个IP地址作为输入&#xff0c;编写一个Python程序以从中删除前导零。 Examples: 例子&#xff1a; Input: 216.08.094.196Output: 216.8.94.196Input: 216.08…

眼球追踪

眼球追踪类似于头部追踪&#xff0c;但是图像的呈现取决于使用者眼睛所看的方向。例如&#xff0c;人们可以用“眼神”完成一种镭射枪的瞄准。眼球追踪技术很受VR专家们密切关注。Oculus创始人帕尔默拉奇就曾称其为“VR的心脏”。对于人眼位置的检测&#xff0c;能够为当前所处…

mysql 创建分区表_Mysql分区表及自动创建分区Partition

Range分区表建表语句如下&#xff0c;其中分区键必须和id构成主键和唯一键CREATE TABLE test1 (id char(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘自增主键(guid)‘,create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间‘,partition_key …

python下载文件暂停恢复_Python关于Threading暂停恢复解决办法

我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后, 线程就属于失控状态. 不过, 我们可以自己实现这些. 一般的方法就是循环地判断一个标志…

信息系统状态过程图_过程状态图中使用的重要术语| 操作系统

信息系统状态过程图1)上下文切换 (1) Context Switching) Whenever a process is transferred within the system, it moves within different states. These states are known as the process states. When a process goes from one state to another state inside the system…

mysql 吧库下的表名都加_mysql数据库表名大小写问题

mysql数据库表名大小写问题mysql数据库linux版本表名、字段名默认大小写敏感&#xff0c;即区分大小写。查看mysql有关大小写参数&#xff1a;lower_case_file_system是一个只读参数&#xff0c;无法被修改&#xff0c;这个参数是用来告诉你在当前的系统平台(linux\windows等)下…

rgb 灰色_金属+RGB+无线,我要买爆这款海盗船VIRTUOSO鉴赏家游戏耳机

海盗船最近新出的旗舰耳机&#xff0c;VIRTUOSO RGB Wireless SE&#xff0c;中文名叫鉴赏家。耳机一改往日欧美电竞风&#xff0c;改走金属质感高大上简约风&#xff0c;不过讲真&#xff0c;这颜值我吃起来很香。考虑文章过长&#xff0c;我先概括一下入手理由&#xff0c;具…

python 基类 派生类_在Python中具有两个子(派生)类的继承示例

python 基类 派生类In this program, we have a parent class named Details and two child classes named Employee and Doctor, we are inheritance the class Details on the classes Employee and Doctor. And, finally creating two objects of Employee and Doctor class…

连接postgresql

# psycopg2enginecreate_engine(postgresqlpsycopg2://scott:tigerlocalhost/mydatabase)#python 连接postgresql使用psycopg2作为默认的DBAPIThe first time a method like Engine.execute()orEngine.connect()is called, the Engine establishes a real DBAPI connection to …

n的阶乘程序python_Python程序对N阶乘的尾随零进行计数

n的阶乘程序pythonFormula used: 使用的公式&#xff1a; Trailing 0s in N! Count of 5s in prime factors of n! floor(n/5) floor(n/25) floor(n/125) ....Example: 例&#xff1a; Input: N 23Output: 4Factorial of 23 is 25852016738884976640000 which has four …

c mysql使用场景_Mysql 场景

1个SQL题&#xff0c;1个场景题&#xff0c;会有点难度&#xff01;SQL题该SQL题大量涉及到row_number&#xff0c;case when&#xff0c;group by等高级用法&#xff0c;有一定的实用价值&#xff0c;总结出来&#xff0c;供日后参考Question.1&#xff1a;分组汇总给定筛选条…

以己为壑

2019独角兽企业重金招聘Python工程师标准>>> 今天把软件工程里面关于面向对象的设计学完了,使我对面向对象OOA和OOD的思想有了进一步的认识,各科知识千沟万壑,犬牙交错,的确是这样,能蒙住自己眼的永远是你自己,而不是这个世界,因为美就在那里;裹住自己双足的的永远是…

macos安装vscode_如何使用VSCode进行PostgreSQL开发及调试

Visual Studio Code (VSCode)是一个轻量级但功能强大的源代码编辑器&#xff0c;可在桌面上运行&#xff0c;适用于Windows&#xff0c;macOS和Linux。 它内置了对JavaScript&#xff0c;TypeScript和Node.js的支持&#xff0c;并具有丰富的其他语言(如C&#xff0c;C&#xff…

最小生成树 kruskal_使用Kruskal算法求解Java最小生成树问题

最小生成树 kruskalIn Electronic Circuit we often required less wiring to connect pins together. We can model this wiring problem with a connected, undirected graph G(V, E), where V is the set of pins, E is the set of possible interconnections between pair …