重定向和转发
不废话:
“转发” 的核心定义:
服务端内部主导跳转、客户端无感知(仅 1 次请求)、浏览器 URL 不改变,与传统 Web 开发中 “转发” 的本质逻辑完全一致,只是实现载体(Nginx 路由层 vs 上层业务框架)不同,不影响其 “转发” 的属性归属。
“重定向”核心定义:
服务端触发信号、客户端执行二次/多次请求跳转、浏览器 URL 必然更新,与所有场景下 “重定向” 的本质逻辑完全一致,只是实现载体(Nginx 指令 vs 后端应用响应)不同,不影响其 “重定向” 的属性归属。
关于nginx的一些概念命题:
命题编号 | 命题内容 | 是非判断 | 核心依据 |
---|---|---|---|
1 | 转发是服务端行为,重定向是客户端行为 | 对 | 转发:服务端接收请求后,直接在内部“跳转”到目标资源,全程客户端(浏览器)无感知,仅1次请求; 重定向:服务端返回3xx状态码+目标URL,客户端接收到响应后,主动发起第2次请求到新URL,本质是“客户端执行跳转”。 |
2 | 重定向会改变用户的浏览器URL | 对 | 重定向的核心是客户端根据服务端返回的新URL重新请求,浏览器会将地址栏更新为“新请求的URL”(例如从/a 重定向到/b ,地址栏会显示/b )。 |
3 | Nginx的return和rewrite都是属于重定向 | 错 | rewrite指令不必然是重定向: - 若rewrite后通过 last /break 在Nginx内部完成资源匹配(未触发3xx状态码),属于“内部转发行为”,不是重定向;- 只有当rewrite后通过 redirect /permanent 显式返回3xx状态码时,才属于重定向;return指令(如 return 302 /new )必然返回3xx状态码,属于重定向,但“rewrite都是重定向”的表述错误,导致整个命题不成立。 |
4 | rewrite是内部行为,不会改变用户浏览器的URL | 错 | rewrite的行为分两种: - 若rewrite触发 redirect /permanent (重定向),则会改变浏览器URL;- 若rewrite仅内部匹配(如 rewrite ^/a /b last; ),才是内部行为、不改变URL;命题将rewrite“绝对化”为“内部行为”,忽略了其可触发重定向的场景,因此错误。 |
裸辞快一年了,感觉时间很快
还是很焦虑,并没有改善很多
AI发展很快速,我自己刚开发了一款软件,目前还在app store 审核中
祝愿 万事顺遂🍀,也祝屏幕前的你万事顺遂🫰