前端面试题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`。

  1. **JSONP(已过时)**:
  • JSONP(JSON with Padding)是一种早期的解决方案,通过`<script>`标签绕过同源策略。

  • 由于安全性问题和限制,JSONP已被CORS取代。

  1. **代理服务器**:
  • 在前端和后端之间设置一个代理服务器,所有前端请求先发送到代理服务器,然后由代理服务器转发到目标服务器。

  • 这种方式可以隐藏后端服务的实际地址,并且可以处理跨域问题。

  1. **文档.domain**:
  • 如果两个域名属于同一个主域(例如`sub1.example.com`和`sub2.example.com`),可以通过设置`document.domain`来允许它们之间的交互。
  1. **窗口消息(Window.postMessage)**:
  • 使用`window.postMessage`方法在不同源的窗口之间安全地传递消息。
  1. **CORS Anywhere(Node.js代理)**:
  • 使用Node.js创建一个代理服务,如CORS Anywhere,它可以在开发环境中临时解决跨域问题。
  1. **浏览器插件**:
  • 对于开发和测试目的,可以使用浏览器插件来禁用同源策略。

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

相关推荐
一袋米扛几楼989 分钟前
【Git】规范化协作:详解 GitHub 工作流中的 Issue、Branch 与 Pull Request 最佳实践
前端·git·github·issue
网络点点滴22 分钟前
前端与后端的区别与联系
前端
EnCi Zheng1 小时前
M5-markconv自定义CSS样式指南 [特殊字符]
前端·css·python
kyriewen1 小时前
你的网页慢,用户不说直接走——前端性能监控教你“读心术”
前端·性能优化·监控
广州华水科技1 小时前
北斗GNSS变形监测在大坝安全监测中的应用与优势分析
前端
前端老石人1 小时前
前端开发中的 URL 完全指南
开发语言·前端·javascript·css·html
CAE虚拟与现实1 小时前
五一假期闲来无事,来个前段、后端的说明吧
前端·后端·vtk·three.js·前后端
Sarvartha1 小时前
三目运算符
linux·服务器·前端
晓晨的博客1 小时前
ROS1录制的bag包转换为ROS2格式
前端·chrome
Wect1 小时前
LeetCode 72. 编辑距离:动态规划经典题解
前端·算法·typescript