当前位置: 首页 > article >正文

前端面试题22 | 什么是跨域问题?怎么解决?

哈喽小伙伴们大家好!新的一周开始啦~距离2024年结束也仅有两个月了,不知道大家年初给自己制定的目标实现了多少?不管怎样,接下来的两个月都请继续加油哦!我们坚持下来了,我们就是最棒的!

今天,继续来给大家分享一道面试题

在开发中,我们经常会遇到跨域的问题,尤其是开发前后端分离的项目,大家有没有想过为什么会出现跨域呢?

简单的来给大家举个例子

你要跟qq的一个人发消息,但是你没有添加他的好友,那么你们能直接进行交流吗?肯定是不能的

那你们后来添加了好友,但是你是在线的一个状态(这是在线指的是网络连接正常),而你的好朋友是离线的状态,那么尽管你发了消息,对方能收到吗?

那如果以上两个条件都满足了,你是qq发的消息,对方微信能收到吗?显然不能

那么,同理,我们来看看软件开发中的跨域

 什么是跨域?

跨域(Cross-Origin Resource Sharing,CORS)是指浏览器在执行 AJAX 请求时,由于安全原因,对不同源(协议、域名或端口不同)之间的请求做出了限制。这种限制被称为同源策略(Same-Origin Policy),它防止一个域的文档或脚本与另一个域的资源进行交互。

为什么需要跨域?

同源策略是为了防止恶意文档获取对另一个域的敏感数据。例如,如果一个网站可以读取另一个网站的内容,那么它可能会读取用户的私人信息,如银行账户信息。

跨域问题的常见场景

1. **前端请求API**:当你的前端应用尝试从一个不同的域(如第三方API)获取数据时。
2. **前后端分离**:前端和后端部署在不同的域上。
3. **单页面应用(SPA)**:SPA框架(如React、Vue、Angular)通常需要从后端API获取数据。

怎么解决跨域?

1. **CORS响应头**:
   - 服务器可以在响应头中设置`Access-Control-Allow-Origin`来指定哪些源可以访问资源。
   - 例如,`Access-Control-Allow-Origin: *`允许所有域访问,或者指定具体的源,如`Access-Control-Allow-Origin: https://example.com`。

2. **JSONP(已过时)**:
   - JSONP(JSON with Padding)是一种早期的解决方案,通过`<script>`标签绕过同源策略。
   - 由于安全性问题和限制,JSONP已被CORS取代。

3. **代理服务器**:
   - 在前端和后端之间设置一个代理服务器,所有前端请求先发送到代理服务器,然后由代理服务器转发到目标服务器。
   - 这种方式可以隐藏后端服务的实际地址,并且可以处理跨域问题。

4. **文档.domain**:
   - 如果两个域名属于同一个主域(例如`sub1.example.com`和`sub2.example.com`),可以通过设置`document.domain`来允许它们之间的交互。

5. **窗口消息(Window.postMessage)**:
   - 使用`window.postMessage`方法在不同源的窗口之间安全地传递消息。

6. **CORS Anywhere(Node.js代理)**:
   - 使用Node.js创建一个代理服务,如CORS Anywhere,它可以在开发环境中临时解决跨域问题。

7. **浏览器插件**:
   - 对于开发和测试目的,可以使用浏览器插件来禁用同源策略。

好啦,今天的分享就到这里,我是程序媛小李,一位正在往全栈方向发展的前端小姐姐,希望今天的分享对你有帮助,我们下期再见!


http://www.kler.cn/a/380318.html

相关文章:

  • Java解析word中的表格或者文本
  • 模型 海勒姆法则(用户依赖你未承诺的API功能)
  • 《JVM第4课》程序计数器
  • SpringBoot+VUE2完成WebSocket聊天(数据入库)
  • Golang gRPC
  • 【Linux】进程间通信(匿/命名管道、共享内存、消息队列、信号量)
  • java 对人名和电话 脱敏-replaceAll
  • HTB:Mirai[WriteUP]
  • 第七部分:1. STM32之ADC实验--单通道实验
  • 新世联科技:NG2-A-7在DAC空气捕集提取CO2的应用
  • Ps:天空替换
  • 2024-11-4 学习人工智能的Day21 openCV(3)
  • Python 单元测试中的 Mocking 与 Stubbing:提高测试效率的关键技术
  • sql专题 之 常用命令
  • React05 样式控制 classnames工具优化类名控制
  • 【算法】Prim最小生成树算法
  • 【k8s】-运维技巧-1
  • Spring Boot实战:构建校园社团信息管理系统
  • Linux基础(七):Linux文件与目录管理
  • 软件加密与授权管理:构建安全高效的软件使用体系
  • docker镜像获取不到的问题处理
  • TIDB的结构
  • 【SpringCloud详细教程】-01-一文了解微服务
  • Python和MATLAB都可以用于绘制折线图,下面是分别用Python和MATLAB绘制简单折线图的示例。
  • 蓝桥双周赛 第21场 小白入门赛
  • 【每日 C/C++ 问题】