2023 年大厂实习前端面试题(一):跨域问题

news2025/1/8 5:47:37

1. 跨域

在这里插入图片描述

1.1 跨域问题来源

跨域问题的来源是浏览器为了请求安全而引入的基于同源策略(Same-origin policy)的安全特性。
在这里插入图片描述

同源策略是浏览器一个非常重要的安全策略,基于这个策略可以限制非同源的内容与当前页面进行交互,从而减少页面被攻击的可能性。

当页面和请求的协议、域名或端口不同时,浏览器判定两者不同源,从而产生跨域。需要注意的是跨域是浏览器的限制,实际请求已经正常发出和响应了。

1.2 预检请求

CORS 跨域请求,又分成简单请求 simple request, 和复杂请求 not-so-simple request

  • 只有跨域的情况下,才会发生预请求
  • 与前述简单请求不同,「需预检的请求」要求必须首先使用 OPTIONS 方法发起一个预检请求到服务器,以获知服务器是否允许该实际请求。「预检请求」的使用,可以避免跨域请求对服务器的用户数据产生未预期的影响。

OPTIONS 请求方法的主要用途有两个

  • 获取服务器支持的 HTTP 请求方法;
  • 用来检查服务器的性能。例如:AJAX 进行跨域请求时的预检,需要向另外一个域名的资源发送一个 HTTP OPTIONS 请求头,用以判断实际发送的请求是否安全。

什么时候会触发 OPTIONS 请求

  • 使用了下面任一 HTTP 方法:
PUT

DELETE

CONNECT

OPTIONS

TRACE

PATCH
  • 人为设置了对 CORS 安全的首部字段集合之外的其他首部字段。该集合为:
Accept

Accept-Language

Content-Language

Content-Type (but note the additional requirements below)

DPR

Downlink

Save-Data

Viewport-Width

Width
  • Content-Type 的值不属于下列之一:
application/x-www-form-urlencoded

multipart/form-data

text/plain

1.3 同源策略

如果两个 URL 的协议、域名和端口都相同,我们就称这两个 URL 同源。

比如下面这两个 URL,它们具有相同的协议 HTTPS、相同的域名,以及相同的端口,所以我们就说这两个 URL 是同源的。

https://time.geekbang.org/?category=1
https://time.geekbang.org/?category=0

浏览器默认两个相同的源之间是可以相互访问资源和操作 DOM 的。
两个不同的源之间若想要相互访问资源或者操作 DOM,那么会有一套基础的安全策略的制约。

为什么会要有同源策略

同源策略是为了保护 Web 安全而存在的。

在 Web 上,不同的网站之间经常需要互相交换数据,如果没有同源策略的限制,就可能会导致一些安全问题

  • 例如,一个恶意网站可以通过某种方式,让用户在其他网站上执行一些危险操作,例如盗取用户的信息、发起 CSRF 攻击等等。因此,浏览器引入了同源策略的限制,要求同源的网站之间才能互相交换数据。
  • 同源指的是协议、域名、端口号都相同,只有满足这三个条件的网站之间才能互相通信。这样,恶意网站就无法访问其他网站的数据,也无法执行一些危险操作。

1.4 解决方法

  • CORS

跨域资源共享(CORS, Cross- Origin Resource Sharing)是浏览器为 AJAX 请求设置的一跨域机制让其可以在服务端允许的情况下进行跨域访问,主要通过 HTTP 响应头来告诉浏览器服务端是否允许当前域的脚本进行跨域访问

原理简述:

允许浏览器向跨域服务器发送请求通过携带一些头部信息询问是否可以跨域,在服务端允许的情况下,服务器端会返回一些头部信息给浏览器,说明允许跨域。
浏览器会在发送跨域请求前,先向服务器发送一个 OPTIONS 请求(预检请求),该请求会包含一些额外的头部信息服务端收到预检请求后,会根据这些额外的头部信息判断该请求是否允许跨域访问,并返回一些额外的头部信息,
告诉浏览器是否允许跨域请求,从而完成跨域请求。

需要注意的是,CORS 只是一种浏览器解决跨域的机制,并不是服务器端的解决方案。在服务端,可以通过一些其他的方法(如:JSONP、代理等)来解决跨域问题。

  • 反向代理

跨域是为了突破浏览器的同源策略限制。
既然同源策略只存在于浏览器,那可以换一个思路。

反向代理是代理服务端,为目的服务器收发请求。
当客户端请求访问服务器时,请求首先经过反向代理服务器,然后反向代理服务器将请求发送到内部服务器上进行处理,并将处理结果返回给客户端。
此时,客户端不会知道实际处理请求的内部服务器地址,因为所有请求和响应的交互都通过反向代理进行。

反向代理的情况下客户端不需要做任何操作。

优点:

  • 代理服务器可以缓存一些静态资源,提高访问速度。
  • 隐藏服务器真实的 IP。

解决原理

  • 使用 Nginx 等反向代理服务器作为中间层,将客户端请求转发到内部服务器上进行处理;
  • 在反向代理服务器上设置合适的访问控制策略,通过添加 HTTP 头部信息,允许跨域请求。
    其他解决方法:JSONP、WebSocket

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

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

相关文章

linux 条件变量 pthread_cond_signal

专栏内容:linux下并发编程个人主页:我的主页座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 目录 前言 简介 应用场景 与互斥量/信号量的区别 接口介绍 变量定义 初始化 等待被唤…

ROS:ROS的一些基本命令行

目录 一、打开小海龟1.1终端,启动ROS Master:1.2终端2,启动小海龟仿真器:1.3终端3,启动海龟控制节点: 二、查看系统中的计算图三、节点命令3.1查看节点下的命令rosnode3.2显示节点列表rosnode list3.3查看节…

[CISCN2023]unzip

[CISCN2023]unzip 环境搭建 1.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><form method"post" action"1.php" en…

Java 基础进阶篇(十六):多线程总结

文章目录 一、多线程概述二、多线程的创建1.1 方式一&#xff1a;继承 Thread 类1.2 方式二&#xff1a;实现 Runnable 接口匿名内部类实现方案 1.3 方式三&#xff1a;JDK 5.0新增: 实现 Callable 接口1.4 三种方式对比 二、Thread的常用方法三、线程安全与同步3.1 线程安全3.…

数据类型.

数据类型 数据类型分类 数值类型 tinyint类型 数值越界测试&#xff1a; mysql> create table tt1(num tinyint); Query OK, 0 rows affected (0.02 sec)mysql> insert into tt1 values(1); Query OK, 1 row affected (0.00 sec)mysql> insert into tt1 values(128…

数据仓库基础(通俗易懂,好文)数仓概念

1、数据仓库的概念 数据仓库&#xff08;英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW&#xff09;,是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;为企业提供决策支持&#xff08;Decision Support&#xff09…

CISCN WP ——R3vCr4ck

[CISCN-Misc] 签到卡 [CISCN-Misc] 被加密的生产流量 在过滤器中搜索modbus 发现类似base的编码 跟踪TCP流得到Base32密文 在线解密 [CISCN-Crypto]可信度量 非预期解 分析题目&#xff0c;发现修改程序后的测试程序位于容器内&#xff0c;使用winscp通过scp连接容器&#xff…

Flume系列:案例-Flume复制(Replicating)和多路复用(Multiplexing)

目录 Apache Hadoop生态-目录汇总-持续更新 1&#xff1a;案例流程描述 2&#xff1a;实现步骤&#xff1a; 2.1&#xff1a;实现flume1.conf 2.2&#xff1a;实现flume2_hdfs.conf 2.3&#xff1a;实现flume3_dir.conf 3&#xff1a;启动传输链路 Apache Hadoop生态-目录…

移动端开发之基础知识

移动端开发之流式布局 移动端基础浏览器现状手机屏幕现状移动端调试方法 视口布局视口视觉视口理想视口总结&#xff1a; meta视口标签标准的viewport设置 三倍图物理像素&物理像素比多倍图背景缩放 background-size背景图三倍图 多倍图切图 cutterman 移动端开发选择移动端…

这么可爱的彩虹屁老婆,真的不想“娶”一个放桌面上吗?

&#x1f4a7;这么可爱的 彩虹屁老婆 \color{#FF1493}{彩虹屁老婆} 彩虹屁老婆&#xff0c;真的不想“娶”一个放桌面上吗&#xff1f;&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &…

如何在华为OD机试中获得满分?Java实现【比赛评分】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 一个有N个选手参加比赛,…

信号处理与分析-卷积的性质与推导

目录 一、引言 二、信号分析中的卷积 1. 什么是卷积 2. 卷积的性质 3. 卷积的应用 三、离散卷积 1. 离散卷积的定义 2. 离散卷积的计算 3. 离散卷积的性质 四、连续卷积 五、卷积的实际应用 六、总结 一、引言 在信号处理中&#xff0c;卷积是一种非常重要的数学运…

如何在华为OD机试中获得满分?Java实现【吃到最多的刚好合适的菜】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 入职后,导师会请你吃饭…

day2 -- MySQL内部模块

学习目标 我希望了解一下Mysql的工作原理&#xff0c;实现这个工作原理的各个模块是如何协同工作的。 学习内容 服务端与客户端 服务端与客户端如何通信 存储引擎 存储结构 具体细节 这里先放上Mysql可视化结构&#xff0c;来自B站 服务端 服务端也就是我们常说的Mysql&…

多元回归预测 | Matlab蛇群算法(SO)优化最小二乘支持向量机回归预测,SO-LSSVM回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab蛇群算法(SO)优化最小二乘支持向量机回归预测,SO-LSSVM回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %---…

基于博奇编码的计算全息图及再现研究

一、引言 全息技术作为一种新的成像技术近年来得到迅速的发展&#xff0c;计算机制全息图不需要实物的存在&#xff0c;同时还能通过计算机实现像的再现。计算全息图主要包括迂回位相型计算全息图和修正离轴参考光计算全息图&#xff0c;这两类全息图由不同的编码方式得到。前…

剑指 Offer 12 矩阵中的路径

题目&#xff1a; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那…

【Unity】Playable使用细则

【Unity】Playable使用细则 本文基于Unity 2021.3 API。 本文介绍官方文档中没提及的Playable使用限制、注意事项、Bug及规避方案&#xff0c;不是Playable的入门教程&#xff01; 如果你还不熟悉Playable的基础用法&#xff0c;请先学习以下官方文档和示例&#xff1a; Playa…

区块链复习

文章目录 简答题第一章1.区块链的概述&#xff08;问题&#xff1a;区块链是通过哪些机制实现信任的&#xff1f;&#xff09;2.哈希函数的性质&#xff08;问题&#xff1a;区块链为什么能够保证链上数据的不可篡改&#xff1f;&#xff09;3.区块链的特点&#xff08;P18-P19…

LwIP系列(1):C语言宏定义相关基础知识(##、include 文件、宏函数、预编译)

前言 对于嵌入式物联网技术来说&#xff0c;TCP/IP 协议几乎是不能绕过的&#xff0c;常见socket、tcp、udp、mqtt、coap、modbus-tcp、mdns、广播、组播等等&#xff0c;均是基于TCP/IP协议实现&#xff0c;无处不在。而目前在嵌入式领域&#xff0c;使用最多的TCP/IP协议栈就…