网站首页 > 技术文章 正文
上一期咱们说到请求的问题,那么这一期咱们来说说跨域的问题:
跨域,什么是跨域呢?首先有着几种不同:
首先域名不同:比如说京东和淘宝,你要想在京东上面请求淘宝的接口,肯定是不通的
www.jd.com 与 www.taobao.com
然后是端口不同,你在服务器前端用的是80端口,服务器用的90端口,肯定是不通的
www.jd.com:8080 与 www.jd.com:8081
二级域名不一样,有一些二级域名就不一样,也存在跨域问题
item.jd.com 与 miaosha.jd.com
说明一点,跨域不是一个技术难题,其实是一个安全控制,这是浏览器对ajax的控制,一般来讲,只能控制ajax在同一个域名下请求,但是这个世界上的事情哪有那么巧呢?所以还是需要跨域的,而且很多应用都需要跨域,没有办法的。
介绍三种跨域请求方式:
jsonp:这个只能用get请求才行,非常古老,估计会被弃用
ngix反向代理,这个的话确实可以用很多请求方式,但是会增加一些额外配置,增加工作量。
cors:这个比较先进,支持多种请求,但是也会增加请求,降低系统性能。
下面来着重介绍cors的跨域过程,cors,全称跨域资源共享,目前的话,浏览器已经做了这个cors处理,服务端只需要用一下过滤器就行,判断请求头是否携带跨域信息,同时响应头进行响应即可。
说一下原理吧,有一点复杂,要是看不懂的话请私信,下面开始讲解原理,参考一下大神阮老师的文章,按照我的理解给大家讲出来,感谢传智李俊杰老师
对于ajax请求,浏览器分为两种:
1种是简单请求,1种是特殊请求
先说一下简单请求:
请求方式是这三种:head,get,post,这也是比较常见的三种哦
在请求的时候,Origin中会指出当前请求属于哪个域(协议+域名+端口)。服务会根据这个值决定是否允许其跨域。
这个时候就是服务端的事情了,服务端一般会返回这些东西
有接个地方需要注意:
- 服务的响应头中需要携带Access-Control-Allow-Credentials并且为true。
- 浏览器发起ajax需要指定withCredentials 为true
- 响应头中的Access-Control-Allow-Origin一定不能为*,必须是指定的域名
这样就可以跨域了。
其实扯7扯8,这些都是原理,没有搞懂也没有关系,因为一般后端服务器框架早就做好了,你只需要加一个东西就可以了,请看图:
如果用的php,那么只要在路由后面加上这个allowcrossdomain就行了
下一章咱们接着搞技术,就是品牌的模块开发,这个模块会牵扯到品牌模块的增删改查,还有搜索,排序,弹框,父子组件传值,页面布局等,还有后台的接口开发,咱们下一章见!
猜你喜欢
- 2024-10-12 渗透测试XSS跨站攻击检测手法 xss跨站攻击类型
- 2024-10-12 e起学丨WEB安全渗透测试基础知识(六)
- 2024-10-12 全面整合才是王道,美军挑战打造全领域联合指管系统
- 2024-10-12 想送林动避雷针是什么梗 出自武动乾坤之英雄出少年
- 2024-10-12 文件上传漏洞是什么?这么通俗易懂的讲解真的很难得!
- 2024-10-12 Web渗透测试攻防之浅述信息收集 app渗透信息收集
- 2024-10-12 交易所安全测试(十一)丨安全审计指南
- 2024-10-12 Mutual Mean-Teaching:为无监督学习提供更鲁棒的伪标签
- 2024-10-12 配置跨域后,框架帮我们做了什么?
- 2024-10-12 前后端分离后,Java Web开发如何解决跨域问题?
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)