cors

起因

有同学在nginx站点配置中加了一行Access-Control-Allow-Origin *,导致微信中业务数据异常,抓包看http头有两个Access-Control-Allow-Origin字段,一个是站点自己的域名,一个是*。

为了实现跨域资源访问,在代码和nginx配置中都加了Access-Control-Allow-Origin字段,但是浏览器有个原则,如果有两个Access-Control-Allow-Origin字段,那么都失效,哪个都不信。最终导致了微信中打开异常。

也引出了CORS。

定义和原理

什么是CORS跨站资源共享?

跨站源资源共享(CORS)是一份浏览器技术的规范,提供了 Web 服务从不同网域传来沙盒脚本的方法,以避开浏览器的同源策略[1],是 JSONP 模式的现代版。与 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求。用 CORS 可以让网页设计师用一般的 XMLHttpRequest,这种方式的错误处理比 JSONP 要来的好。另一方面,JSONP 可以在不支持 CORS 的老旧浏览器上运作。现代的浏览器都支持 CORS[2]。

简单说,就是为了实现跨站访问资源的遍历,同时保护浏览器使用者的安全,提出的一种规范。如何保护的安全,在下一结做介绍。

在html中的图片、css、js等静态引用,和ajax发起的动态请求,都受同源策略影响。如果有跨域,都可以用CORS来实现(也有其他方法,CORS是标准)。

跨域请求主要用于:

  • 调用XMLHttpRequest或fetchAPI通过跨站点方式访问资源
  • 网络字体,例如Bootstrap(通过CSS使用@font-face 跨域调用字体)
  • 通过canvas标签,绘制图表和视频。

意义

CORS怎么保护安全

客户端

保护用户访问网站的安全。防止用户在A站登录授权后,在访问恶意网站B时,B站在ajax中请求A站,获取A站的信息。

服务端

保护服务器的静态资源、接口数据等,都被自己信任的域名访问,不被其他未授权的网站拉走数据。

实现

客户端

在header中带上Origin字段,标明是跨域请求。如果需要发送带凭证的数据(cookie、Http认证和客户端SSL证明等),将WithCredentials设为true。

xhr.withCredentials = true;

如果请求服务器是非简单请求,浏览器会发出一个OPTION请求,和服务器协商信息。

服务器

服务器处理流程:
1 http头部是否有origin字段
2 没有,当成普通请求处理。
3 有,是否method是OPTIONS(preflight)
4 不是OPTIONS(简单请求),返Allow-Origin、Allow-Credentials等,并返回正常内容。
5 是,返回Allow-Headers、Allow-Methods等,内容为空。

nginx参考配置

     add_header 'Access-Control-Allow-Origin' 'xxxx';add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' 'GET, POST, DELETE, PUT, OPTIONS';add_header 'Access-Control-Allow-Headers' 'Accept, Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' 'xxxx'; add_header 'Access-Control-Max-Age' 1728000; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, DELETE, PUT, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Accept, Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; add_header 'Content-Type' 'text/plain charset=UTF-8'; add_header 'Content-Length' 0; return 204; }

注意

1、在代码或nginx一个地方修改,不要在一个http头中有多个Access-Control-Allow-Origin字段,否则会触发“起因”中的问题。
2、修改配置最好在nginx配置中修改,其次在代码中修改,但是一定不要两侧都改,容易造成两侧混乱不容易维护。
3、业务站点不要为了省事给Access-Control-Allow-Origin设置为*,权限太开会有安全隐患。
4、按规范实现的浏览器,会做拦截。如果没有填写Access-Control字段或填写错误,即使服务端返回了全部数据,浏览器也会拦截不给页面。

参考

CORS——跨域请求那些事儿
跨域资源共享 CORS 详解
浏览器和服务器实现跨域(CORS)判定的原理

转载于:https://www.cnblogs.com/yelongsan/p/7998765.html

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

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

相关文章

qsort与sort

sort()函数是C中的排序函数其头文件为&#xff1a;#include<algorithm>头文件&#xff1b; qsort()是C中的排序函数&#xff0c;其头文件为&#xff1a;#include<stdlib.h> sort是不需要自己写compare的&#xff0c;sort默认是升序排列&#xff0c;如果想要降序就…

别错过校招

我不是很想讨论这个问题&#xff0c;也没有想过我现在要用这个话题做文章的标题&#xff0c;这篇文是提醒准备毕业的同学们&#xff0c;校招非常重要。今天晚上&#xff0c;一个微信好友问「发哥&#xff0c;我现在研究生毕业&#xff0c;但是自己的基础非常不好&#xff0c;也…

spring集成 log4j + slf4j

以maven web项目为例&#xff0c; 首先、在pom文件引入相关依赖&#xff0c;如下&#xff08;spring官网文档有介绍&#xff09;&#xff1a; <dependencies><!-- spring 相关 --><dependency><groupId>org.springframework</groupId><artifa…

喜讯,Asp.net Ajax 文档提供下载

今天去了一下 Asp.net Ajax 的官方网站&#xff0c;准备挑战自己的耐心去映着头皮跨过那所谓的修好的电缆去读 Asp.net Ajax 的文档。发现一个喜讯&#xff0c;不知道到什么时候&#xff0c;Asp.net Ajax 的文档提供下载了。我下载了一个&#xff0c;包括文档,代码和示例数据库…

大数阶乘

描述我们都知道如何计算一个数的阶乘&#xff0c;可是&#xff0c;如果这个数很大呢&#xff0c;我们该如何去计算它并输出它&#xff1f; 输入输入一个整数m(0<m<5000)输出输出m的阶乘&#xff0c;并在输出结束之后输入一个换行符样例输入50 样例输出304140932017133780…

90后中国程序员“黑吃黑”博彩网站,半年获利256万,判刑11年半

一个90后程序员&#xff0c;在短短两年的时间里&#xff0c;非法控制67万台计算机&#xff0c;还利用漏洞“黑吃黑”博彩网站&#xff0c;半年从中获利256万余元……近期&#xff0c;浙江省杭州市西湖区人民法院对这起黑客大案进行了一审宣判。法院以诈骗罪、非法控制计算机信息…

成功数据恢复一例LINUX EXT3 下误删除ORACLE数据库

[申明]转载请保留原作网站&#xff1a;[url]http://www.sjhf.net[/url] 关键字[LINUX误删除数据恢复][摘要]国家认证认可监督管理委员会&#xff0c;用于正常工作的一个重要ORACLE数据库&#xff0c;存储于LINUX EXT3文件系统之上。一次&#xff0c;管理员在建立测试库时选错了…

nyoj744 蚂蚁的难题(-)

蚂蚁的难题(一) 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;2描述小蚂蚁童鞋最近迷上了位运算&#xff0c;他感觉位运算非常神奇。不过他最近遇到了一个难题&#xff1a; 给定一个区间[a,b],在区间里寻找两个数x和y&#xff0c;使得x异或y最…

用一张图片告诉你芯片设计

#推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言嵌入式Linux微信扫描二维码&#xff0c;关注我的公众号

XML轻松学习手册(1)XML快速入门

前言转载于:https://blog.51cto.com/yinpeng/17218

【学习总结】Markdown 使用的正确姿势

参考资料&#xff1a; Learning-Markdown 入门参考 注&#xff1a;原博可能对GitHub中的Markdown格式更适用。ps&#xff1a;在王熊猫的GitHub里也有相关格式的攻略&#xff0c;可一并参考学习。关于表情的cheatsheet ? &#xff08;似乎不太好&#xff0c;哈哈&#xff09;1、…

MTK 平台TP调试遇坑

#前言最近在调试我们项目上的TP驱动&#xff0c;奈何一直不能使用&#xff0c;而且这个项目的硬件确定是没有问题的「这个是前提」&#xff0c;我们在软件上提升了SDK基线&#xff0c;在之前的基线版本上软件是没有问题的。然后我就赶紧检查了两个方面确定TP的供电是不是正常的…

阿里巴巴装袋问题

【任务描述】 阿里巴巴进入四十大盗的宝库后&#xff0c;发现里面宝物众多&#xff0c;并且每种宝物都有体积和价值的标注&#xff0c;如何尽可能地多装宝物&#xff0c;是宝物的价值最大&#xff0c;但不能超过口袋容量。&#xff08;口袋体积是150&#xff09; 宝物 A B …

立言,必为之

淄博一行&#xff0c;女朋友一句话点醒梦中人。感悟颇多&#xff0c;今立言与此&#xff0c;后必践行之。 一诺千金 言必行&#xff0c;行必果。答应别人的事情就要做&#xff0c;要做就要做好。 慎言要做到一诺千金&#xff0c;必须要慎言&#xff0c;合理的估计自己的实力&am…

51nod 1379 索函数

Fib[0]0,Fib[1]1,Fib[n]Fib[n-1]Fib[n-2] if n>1. 定义索函数Sor(n)Fib[0]| Fib[1] |Fib[2]|…|Fib[n]. 给定整数n&#xff0c;要求计算Sor(n)%1,000,000,007(1e97). Input第1行&#xff1a;给出一个整数T&#xff0c;表示有T组数据。(1<T<10000) 第2行到T1行&#xf…

昨天小米股价大涨的背后:UWB芯片到底是个什么鬼?

小米10月12日发布了“一指连”小米UWB技术。小米称该技术赋予手机与智能设备空间感知能力&#xff0c;手机指向设备即可定向操控&#xff0c;使小米在“通往未来之路上再迈一步”。来源&#xff1a;腾讯自选股受此消息利好&#xff0c;截止10月12日收盘&#xff0c;小米集团港股…

取表单radio值时

取表单radio值时 在 js 中取值时&#xff0c;用 e.detail.value.xxx 或 e.detail.value["xxx"]&#xff0c;其中 xxx 为 name 属性值。posted on 2017-12-09 23:45 飞狐爷 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/cyxxzjp/p/8013181.html

数钱问题

数钱 题目描述 按照中国的币制有 1元&#xff0c;5元&#xff0c;10元&#xff0c;20元&#xff0c;50元&#xff0c;100元 给出钱数n&#xff08;n能用int存储&#xff09;&#xff0c;输入最少多少张钱能补足n。 输入 k n 输出 钱的张数 样例输入 4 123 200 187…

当你使用微信和QQ的时候,请不要忘记ICQ这个伟大的公司!

距离 ICQ 创立已经 24 年了&#xff0c;仿佛已经跨越了一代人的年纪&#xff0c;而今&#xff0c;我们似乎无法在互联网上找到太多关于 ICQ 的信息。如果有人不知道 ICQ 的话&#xff0c;可以告诉你 ICQ 才是互联网通讯的鼻祖&#xff0c;而不是 QQ、MSN、微信、Facebook。ICQ …

新学年开始了

今天是正月十五&#xff0c;本是万家团圆的日子&#xff0c;而我却来到了济南&#xff0c;我的学校。独在异乡为异客&#xff0c;每逢佳节倍思亲。本应是艳阳高照的天气&#xff0c;却冷不丁的来了个倒春 寒&#xff0c;济南居然下起了大雪。找出一个寒假都没有穿的羽绒服&…