HTTP之访问控制「CORS」
序言
跨域资源共享「CORS」就是在不同的域名、协议、端口直接请求资源。本文主要讲述了什么是跨域,什么情况下会出现预检请求,我司的跨域安全访问
什么是跨域
同源策略
出于安全的原因,在没有被允许的情况下浏览器限制从不同源「origin」发起请求,也可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了。
什么才能是同源
源:由协议+域名+端口组成,也就是说,这个三个要统一才同源
例:
- http://www.baidu.com && https://www.baidu.com 不同源 协议不同
- http://api.baidu.com && http://www.baidu.com 不同源 域名不同
- http://www.baidu.com:8081 && http://www.baidu.com:8080 不同源 端口不同
- www.baidu.com/index.html && www.baidu.com/404.html 同源
什么情况下会出现预检请求
预检请求
跨域资源共享标准新增了一组HTTP首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。在某些会对服务器数据产生作用「需要修改数据库」的请求「主要是GET以外的请求」,浏览器会先发送通过OPTIONS方法发送预检请求,从服务器那边得到返回是否允许跨域。服务器也可以携带是否需要身份凭证通知浏览器。
也就是说:在你发送请求的时候,浏览器会自己先发送一个预检请求。后台只需要识别请求的方法「OPTIONS」,然后返回一些信息。 如下图:
这里有两个login/请求,第一个是浏览器主动发出的。它的Request Method方法为 OPTIONS,然后服务器的返回信息:
- access-control-allow-headers:允许你携带头的参数
- access-control-allow-methods:允许你发送请求的方法
- access-control-allow-origin:允许你发送请求的地址
这部分信息通知了你修改自己的请求参数来符合服务器的要求, 服务器如何除了浏览器发送的预检请求,可以参照这个MDN Server-Side_Access_Control (CORS)。
简单请求
在以下情况下发送的请求不会触发预检请求
使用以下方法之一:「GET HEAD POST」
头部字段在这个集合之内:「Accept, Accept-Language, Content-Language, Content-Type (需要注意额外的限制), DPR, Downlink, Save-Data, Viewport-Width, Width」
Content-Type以下三种之一:「text/plain,multipart/form-data,application/x-www-form-urlencoded」
...
例子:我在发送登录的时候,头部字段自定义了Authorization,这时候就触发预检请求
我司的访问控制方式
JSON Web Token「JWT」
公司主要采用的就是JWT的跨域认证解决方案。JWT的意思就是:用户发送登录信息「用户名,密码」给服务器,服务器认证后生成一个JSON对象,给用户储存,之后用户请求数据都需要带上JWT来发送请求。
步骤
- 登录 发送用户名密码给服务器验证返回JWT
- 前端通过LocalStorage储存JWT
- 之后的请求带上JWT
- 验证过期或者失败直接返回401退到登录页面
不足之处
- JWT一旦签发了,在到期之前始终有效,这样别人可以使用你的JWT获取数据
- JWT过期或失效的时候,用户仍然需要通过失效的JWT请求才能知道JWT已经失效
扩展阅读
如果前端没有跟后端建立统一API设计规范,可以使用这个 RESTful api
参考
MDN HTTP访问控制 阮一峰 JWT入门教程
转载于:https://juejin.im/post/5ccd2222518825408612c23a
HTTP之访问控制「CORS」相关推荐
- 好奇了好久的「对象」,就这?
作者 | 编程指北 来源 | 编程指北(ID:cs_dev) 别误会,今天要写的不是我对象,毕竟我还没有...... 这篇文章主要是聊聊我对于编程语言中「对象」的一些简单认识, 面向过程 VS 面向对 ...
- 编程人的「对象」长啥样?
作者 | 编程指北 责编 | 张文 头图 | CSDN 下载自视觉中国 来源 | 编程指北(ID:cs_dev) 别误会,今天要写的不是我对象,毕竟我还没有...... 这篇文章主要是聊聊我对于编程 ...
- 「网络安全」安全设备篇(1)——防火墙
什么是防火墙? 防火墙是指设置在不同网络(如可信任的企业内部网和不可信的公共网)或网络安全域之间的一系列部件的组合.它可以通过监测.限制.更改跨越防火墙的数据流,尽可能地对外部屏蔽网络内部的信息.结构 ...
- 「网络安全」安全设备篇(4)——防火墙、IDS、IPS的区别
前面三篇文章,针对防火墙.IDS.IPS做了详细介绍,具体内容这里不再赘述,感兴趣的小伙伴可以去看看哦. 概念不同 防火墙和IPS属于访问控制类产品,而IDS属于审计类产品.我们可以用一个简单的比喻, ...
- 虹科干货|Redis企业版数据库为企业「数据安全」叠加最强Buff!
虹科干货|Redis企业版数据库为企业「数据安全」叠加最强Buff! "这是一场可预见的噩梦!" 近期,黑客通过攻击亚洲最大两家数据中心-万国数据和新科电信媒体,获取国际巨头企业的 ...
- 一个「学渣」从零开始的Web前端自学之路
从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的"丰富". 最后的机缘巧合下,走上了前端开发之路,作为 ...
- 一个「学渣」从零Web前端自学之路
从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的"丰富". 最后的机缘巧合下,走上了前端开发之路,作为 ...
- 一个「学渣」的从零Web前端自学之路,附学习资源分享
从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的"丰富". 最后的机缘巧合下,走上了前端开发之路,作为 ...
- 如何直观地理解「协方差矩阵」?
如何直观地理解「协方差矩阵」? Xinyu Chen Urban Traffic Data Analytics 372 人赞同了该文章 协方差矩阵在统计学和机器学习中随处可见,一般而言,可视作方差和协 ...
最新文章
- oracle数据库的net manager配置监听(插图)
- css3动画应用-音乐唱片旋转播放特效
- faster-rcnn原理及相应概念解释
- 执行ssh-add时出现Could not open a connection to your authentication agent
- TensorFlow 2.0 - Checkpoint 保存变量、TensorBoard 训练可视化
- Delphi调用Android的.so文件(转)
- php增删改查参数化,JPA之使用JPQL语句进行增删改查
- 【数据结构和算法笔记】串详解:c实现
- c#后台如何导出excel到本地_C# 导出 Excel 的各种方法总结
- 魔兽登录后 服务器那显示不兼容,魔兽世界服务器不兼容什么意思?魔兽世界服务器不兼容解决方法...
- TC4056A丝印1A 线性锂离子电池充电IC
- 淘宝开店经验 心得 攻略
- 2022-2027年中国星级酒店市场竞争态势及行业投资前景预测报告
- 甘孜州2021高考 康定中学宴冬梅成绩查询,最新2021甘孜州高中排名
- JSON.stringify(value[, replacer [, space]])
- Rate This Topic
- 2018-07-03 根据Excel后缀名获取WorkBook
- 游戏下单陪玩app主要有哪些功能
- 一个 Git 库内管理多个子项目
- luogu2947向右看齐【栈】
热门文章
- 一个html文档所需要的最基本的标记对是,川大《WEB技术》19秋在线作业1题目【标准答案】...
- mysql oracle 默认事务级别_oracle 默认的事务隔离级别
- iOS限定UITextField的输入格式
- 首位植入脑机接口的患者通过Twitter发布信息
- BCI competition IV 2b简介
- eeglab中文教程系列(9)-绘制ERP图像
- 如何安全地吃掉悬崖边上的苹果?DeepMindOpenAI给出3D版安全强化学习答案
- 用数学方式打开Facebook新Logo,真的和视频号Logo来自同一方程
- 71岁的亿万富翁坐自家飞船成功游览太空!此前已为太空旅行砸了超10亿美元
- MIT一招霸气颠覆传统:勇敢换导师,成本我买单,学生沸腾了