CORS的简单理解
去年我在做一个项目,是关于标签打印的,它就是一个Windows程序,提供标签打印功能,由其它程序(包括网站)告诉它需要打印怎样的标签,它就出标签,这个“告诉它需要怎样的标签”的过程,是通过HTTP的Post请求实现的,我把这个程序做成一个Self-Host的小网站,接受来自各方面的HTTP请求,测试下来可行,我分别自己写了个HTTP客户端以及使用现成的Postman来测试,都没问题。
直到项目上线前,发现浏览器没办法成功发送打印请求,原因是:浏览器默认情况下不允许跨站的异步请求。这啥意思呢?比如我在访问A.com,这时候页面JavaScript要求我用异步(注意是异步,不是同步,同步就没有这个问题)请求B.com的一个地址,此时我的浏览器就拒绝了这个动作。之前我有点不理解为什么要拒绝,现在我算是明白了,你想,假如你已经登录了B.com,B.com是信任你的身份的,而A.com想利用你已经登录了B.com这个状态,神不知鬼不觉地用页面JS向B.com发送一个异步请求,获取到一些你的敏感资料,然后存到自己的服务器上来,这个会有安全性问题,所以浏览器是拒绝的,注意,拒绝的主角是浏览器,而不是B.com,这样也不难解释为什么我自己写小程序测试以及使用Postman测试都没问题。
那这个问题应该怎么解决呢?这就需要用到W3C的标准——CORS(Cross-Origin Resource Sharing),这是一项技术标准:https://www.w3.org/TR/cors/,也就是说,现在主流的浏览器应当都支持,太旧的浏览器就不好说了。浏览器把能否跨站异步请求这个决定权交给目标网站,即前面提到的B.com,B说可以就可以,B说不可以就不可以,B可以配置自己的判定规则,比如B说我只允许来自C.com的跨站异步请求,那么A.com仍然是被浏览器阻止的。那么,浏览器如何知道目标网站是否允许呢?其实是通过几个HTTP头的字段来判断的,之前提供的w3.org的那个连接有具体说明,这里就不展开了。
服务器端如何支持CORS,这个就参考各自的实现吧,自己查查手册,关键字为CORS,EASY。
CORS的简单理解的更多相关文章
- git的简单理解及基础操作命令
前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- [转]简单理解Socket
简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html 题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...
- Js 职责链模式 简单理解
js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...
- Deep learning:四十六(DropConnect简单理解)
和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...
- Deep learning:四十二(Denoise Autoencoder简单理解)
前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...
- 简单理解dropout
dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...
- 我们为之奋斗过的C#-----C#的一个简单理解
我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...
- 简单理解ECMAScript2015中的箭头函数新特性
箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...
随机推荐
- IDEA无法创建类,接口
原因:模板丢失 解决方案: 在idea.exe.vmoptions 或 idea64.exe.vmoptions中加入配置-Djdk.util.zip.ensureTrailingSlash=fals ...
- 分布式计算框架Gearman原理详解
什么是Gearman? Gearman提供了一个通用的应用程序框架,用于将工作转移到更适合于工作的其他机器或流程.它允许你并行工作,负载平衡处理,并在语言间调用函数.它可用于从高可用性网站到传输数据库 ...
- Linux下启动时间优化专题
1. 过往优化总结 陆陆续续在Linux进行启动时间优化,之前有两份文档,分别从内核和用户空间两个方向进行了优化. <Android/Linux boot time分析优化>和<Bu ...
- killall 、kill 、pkill 命令详解
killall 命令 Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name).我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀 ...
- MySQL 在线更改 Schema 工具
MySQL在线更改schema的工具很多,如Percona的pt-online-schema-change. Facebook的 OSC 和 LHM 等,但这些都是基于触发器(Trigger)的,今天 ...
- bzoj 1901 主席树+树状数组
修改+查询第k小值 单纯主席树修改会打乱所有,所以再套一个树状数组维护前缀和使得修改,查询都是log 对了,bzoj上不需要读入组数,蜜汁re.. #include<cstdio> #in ...
- BZOJ_2561_最小生成树_最小割
BZOJ_2561_最小生成树_最小割 题意: 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条 ...
- 记一次MySQL数据库拒绝访问的解决过程
问题背景 用wordpress搭博客,数据库采用MySQL.为了调试方便,创建账户my_account ,允许它从任意主机访问数据库. CREATE USER `my_account`@'%' IDE ...
- 处理php出现default timezone抖动的问题
懒癌发作1年多,再次回来写随笔.(上次是16年,再上次是13年,好像懒的没救了) 这回遇到一个系统前端展现的时间在无规律抖动的问题: 前端php环境是5.3,运行于apache上,php.ini中已经 ...
- String去重方法
思路:利用集合的contains方法将某个字符串中的集合中没有的单个字符添加到集合中,然后再将集合中每个元素做拼接 @Test public void aa5(){ String aa="a ...