← 返回目录

第 4 卷

第 4 / 10 卷日期:

请求,代理服务器根据规则转发请求到后端真实服务器,客户端只知道代理服务器的地址,不知道真实后端服务器的地址。

核心特征

  • 代理服务于服务器,客户端无需配置,无感知代理存在;
  • 代理服务器隐藏真实后端服务器IP和集群架构;
  • 代理服务器统一接收客户端请求,实现请求分发。

典型应用场景

  1. 负载均衡:将客户端请求分发到后端多台服务器,避免单台服务器过载(如Nginx负载均衡);
  2. 跨域解决方案:前端请求同源的代理服务器,代理服务器转发到跨域接口,规避浏览器同源策略;
  3. 静态资源缓存:代理服务器缓存CSS/JS/图片,直接返回给客户端,减轻后端服务器压力;
  4. 安全防护:隔离后端服务器,防止直接暴露外网,抵御DDOS攻击、过滤恶意请求;
  5. HTTPS部署:代理服务器统一配置SSL证书,处理TLS握手,后端服务器无需配置HTTPS。

正向代理 vs 反向代理核心区别

维度正向代理反向代理
代理对象客户端服务器
隐藏对象真实客户端IP真实后端服务器IP
配置方客户端手动配置服务器端配置,客户端无感知
核心目的方便客户端访问外网保护服务器、负载均衡、跨域
典型工具代理服务器、VPNNginx、Apache、HAProxy

13. 描述如何使用Nginx作为解决跨域问题的一种方法,并概述其工作原理

Nginx解决跨域的核心原理

利用反向代理规避浏览器的同源策略限制:前端请求同源的Nginx代理服务器,Nginx再将请求转发到跨域的后端接口服务器,由于浏览器只校验前端与Nginx的同源性,而Nginx与后端服务器的通信是服

务器间请求,无跨域限制,从而实现跨域请求。

步骤2:修改Nginx配置文件(nginx.conf)

核心配置:在 http{} 中添加 server{},配置同源代理地址和跨域接口转发规则,并开启CORS跨域头。

Code block

1http { 2server {

3listen 80; # 前端访问的Nginx端口(与前端同源,如http://localhost:80)

4server_name localhost; # 前端域名,与前端页面一致 5

6#配置跨域接口转发规则:匹配/api开头的请求
7location /api {
8# 1.转发到真实的跨域后端接口地址
9proxy_pass http://192.168.1.100:3000;#后端接口地址(跨域地址)
10# 2.传递请求头,保留客户端真实信息
11proxy_set_header Host $host;
12proxy_set_header X-Real-IP $remote_addr;
13proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
14proxy_set_header X-Forwarded-Proto $scheme;

15 16# 3. 开启CORS跨域头(可选,兜底保障)

17add_header Access-Control-Allow-Origin *; # 允许所有域名跨域,生产环境指定具体域名

18add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS; # 允许的请求方法

19add_header Access-Control-Allow-Headers Content-Type,Authorization; # 允许的请求头

20add_header Access-Control-Allow-Credentials true; # 允许携带Cookie 21

22# 4.处理OPTIONS预检请求(必配,AJAX跨域会先发预检请求)
23if ($request_method = OPTIONS) {
24return 204;#预检请求直接返回204,不转发到后端
25}
26}
27}
28 }

步骤3:前端请求配置

4console.log(res.data);

5});

步骤4:重启Nginx生效

Code block

1# Windows 2nginx -s reload

3# Linux/Mac 4sudo nginx -s reload

Nginx跨域的优势

  1. 无前端代码侵入:前端仅需修改请求地址,无需添加任何跨域配置;
  2. 安全性高:后端接口不直接暴露外网,由Nginx统一转发,规避攻击风险;
  3. 性能优异:Nginx轻量高效,转发请求的性能损耗极低,支持高并发;
  4. 功能扩展:可同时实现负载均衡、静态资源缓存、HTTPS部署;
  5. 兼容性强:支持所有浏览器,无AJAX/fetch请求限制。

关键注意点

  1. 生产环境 Access-Control-Allow-Origin 不要写 *,需指定具体前端域名(如

http://www.xxx.com),避免安全风险;

  1. 需处理 OPTIONS 预检请求,否则POST/PUT/DELETE请求会跨域失败;
  2. 若前端需要携带Cookie,需满足3个条件: withCredentials: true、 Access-

Control-Allow-Credentials: true、 Access-Control-Allow-Origin 为具体域名(非*)。

14. 解释浏览器的事件循环机制,包括它是如何处理异步操作的

事件循环(Event Loop)的定义

浏览器的事件循环是单线程的JS引擎处理异步任务的核心机制,由于JS是单线程,无法同时执行多个任务,事件循环通过任务队列的方式,将同步任务和异步任务按顺序执行,实现非阻塞的异步执行效

果,保证页面不卡死。

全站分卷索引 · 10 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷
  7. 7第 7 卷
  8. 8第 8 卷
  9. 9第 9 卷
  10. 10第 10 卷