前端面试题(2025持续更新)

一、浏览器

1.1 跨域

1.1.1 什么是跨域

跨域是浏览器基于同源策略(Same-Origin Policy)实施的安全限制机制,需同时满足以下三个条件才会触发:

  • 运行环境:发生在浏览器环境中
  • 请求类型:涉及向后端接口发起的请求
  • 策略触发:违反了同源策略规则

同源策略要求(三者必须完全相同):

  • 协议(http/https)
  • 域名(包括子域名)
  • 端口号

只要任一条件不满足,浏览器就会触发跨域限制。

1.1.2 解决跨域的方法

  • 后端配置CORS
    通过设置响应头(如Access-Control-Allow-Origin)允许特定源访问。
  • 本地开发代理(Proxy)
    利用开发服务器(如webpack/vite)的代理功能转发请求。
  • JSONP
    通过动态script标签绕过限制(仅限GET请求)。

1.1.3 服务端请求服务端会跨域么

跨域是浏览器的安全策略,服务端之间的通信(如Node.js发起HTTP请求)不受同源策略限制。

1.1.4 webpack或者vite中可以使用proxy解决跨域,它解决跨域的原理是什么

原理:在本地开发时,代理服务器充当中间人:

  1. 浏览器 → 请求发送到本地代理服务器(同源,避免跨域)。
  2. 代理服务器 → 转发请求到目标后端服务器(服务端无跨域限制)。
  3. 结果通过代理返回给浏览器。

本质:通过隐藏真实后端地址,绕过浏览器的同源策略。

1.1.5 为什么跨域的时候有时候请求会发两次

对于非简单请求(如带自定义头或非标准Content-Type),浏览器会先发送一次OPTIONS方法的预检请求(Preflight Request),确认服务器允许实际请求后,才会发送真实请求。

1.1.6 为什么非要有这个预检请求

核心目的:安全性保障。

  • 权限确认:确保服务器明确允许跨域请求的特定方法、头部和字段。
  • 减少风险:避免恶意脚本直接发送非常规请求(如PUT/DELETE)。

类比:类似于访问权限门禁,先验证身份(预检),再放行正式操作。

1.1.7 总结

跨域是浏览器出于安全考虑(同源策略)对非同源请求(协议、域名、端口任一不同)的限制,常见解决方案包括后端配置CORS、开发服务器代理(如webpack/vite的proxy)或JSONP。服务端间通信无跨域问题,而浏览器中非简单请求(如带自定义头)会先发OPTIONS预检请求,以确认服务器允许实际请求,确保安全性。代理的原理是通过本地同源服务器转发请求,绕过浏览器限制。

1.2 GET和POST的区别

1.2.1 什么是 HTTP?

HTTP(Hypertext Transfer Protocol)超文本传输协议。它是建立在TCP/IP协议之上,用于客户端和服务器之间的通信和数据交换。

1.2.2 HTTP 方法

  • GET:请求指定的资源
  • POST:向指定资源提交数据进行处理请求(例如提交表单或上传文件)。POST请求经常用于创 建、更新或删除服务器上的资源。
  • PUT:向指定资源位置上传其最新内容。
  • DELETE:请求服务器删除指定的资源。
  • HEAD:请求获取指定资源的元数据信息,但不返回资源本身的内容。
  • PATCH:用于对资源进行局部修改。
  • OPTIONS:请求获取指定资源支持的通信协议和方法等信息。
  • CONNECT:建立一个网络连接,使用隧道协议连接代理。
  • TRACE:回显服务器收到的请求,主要用于测试或诊断。

最常用的两种方法是:GET 和 POST。

1.2.3 共同点

GET和POST请求都是HTTP协议中常见的请求方式,底层都是基于TCP/IP协议实现的,使用二者的任意一个,都可以实现客户端和服务器端的双向交互。

1.2.4 不同点

语义
GET的语义是从服务器获取指定的资源,而POST的语义是根据请求负荷(报文body)对指定的资源做出处理。

请求参数

  • GET请求的参数一般会附加在URL后面,以问号(?)开头,参数之间用&符号分割,而且URL的长度是有限制的,通常为2k,当浏览器厂商不同、版本不同这个限制的大小值也可能不同;这是因为服务器解析一个字符串时需要分配内存,而URL必须作为一个整体去看待,没有办法分块处理,于是必须预先分配一块足够大的内存来存储URL。如果URL太长或者并发量高的话就会对服务器造成压力,为了解决这个性能问题所以做了不同程度的限制。
  • POST请求参数是存放在请求正文(request body)中的,所以没有大小限制。

浏览器

  • GET请求一般会被缓存,比如常见的CSS、JS、HTML请求都会被缓存;而POST请求默认是不进行缓存的。
  • GET请求可以直接进行回退和刷新,不会对用户和程序产生任何影响;而POST请求如果直接回滚和刷新将会把数据再次提交
  • GET请求的参数会保存在历史记录中,而POST请求的参数不会保留到历史记录中。
  • GET请求的地址可被收藏为书签,而POST请求的地址不能被收藏为书签。

幂等性

  • GET请求是幂等的,即多次请求相同的URL和参数,得到的结果是一样的,不会产生副作用。
  • POST请求是不严格幂等的,因为多次发送相同的POST请求所得到的结果可能不同。

1.2.5 安全性

HTTP协议里GET和POST本质上只是请求方式的不同,协议并没有做过多的限制,只是从规范约定于更加倾向于把GET请求参数拼接在URL上,把POST请求放在body里,直观上会从URl看到参数显得没那么安全。但是从网络安全角度而言这两种方式都是明文的,HTTP本身就是不安全的协议。请求在任何一个网络节点被劫持内容都是透明的,真正要做到安全要求双端加密,如HTTPS。

1.2.6 总结

GET适用于获取资源,不对服务器数据产生影响,幂等性要求较高。
POST适用于提交,修改或者删除资源,对服务器数据产生影响的操作,以及要传输敏感信息的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值