谁对 HTTP 的重定向理解比较熟悉,能不能讲解下客户端重定向和服务端重定向有什么异同

2018-12-13 14:23:50 +08:00
 daijinming
3305 次点击
所在节点    程序员
21 条回复
qwx
2018-12-13 14:32:16 +08:00
在我的理解中,服务端的重定向分为两种,一种是 redirect,一种是 rewrite,rewrite 是客户端无感知的,就是地址栏不变化。redirect 会给浏览器一个状态码( 301 或 302 ),浏览器实现跳转。客户端重定向我理解的是,状态码虽然是 200,但其内容或 http 头中有跳转指令,浏览器会因为执行相关 js 代码或识别特定 http 头进行跳转操作。
daijinming
2018-12-13 14:39:29 +08:00
在处理第三方用户验证,经常会遇到 重定向的问题,比如接入 CAS、QQ 互联之类的,这种跳转应该都是 服务器 redirect
goofool
2018-12-13 14:44:16 +08:00
HTTP Redirect 都是协议规定好的,还分什么客户端和服务端吗?你是想问 HTTP Redirect 和服务器调度(Forward)的区别吧
HanMeiM
2018-12-13 14:44:20 +08:00
QQ 互联、github 这种 OAtuh 的应该先是客户端的跳转,然后请求自己的服务器,服务器重定向到第三方去拿东西
daijinming
2018-12-13 14:56:14 +08:00
@goofool 请讲讲
goofool
2018-12-13 15:27:06 +08:00
Librazy
2018-12-13 15:30:51 +08:00
还有一种内部重定向,HSTS 的 307 是客户端内部产生的,从 http 重定向到 https
t6attack
2018-12-13 15:46:51 +08:00
前者在 http 通道本身 定义,后者在 http 通道内传输的页面 定义。

假设 A/B 两个 url 是两条通道:
前者是 A 通道上标注:此通道转向 B 通道。浏览器看到以后,转向 B 通道。
后者是 A 通道内传输一个页面,浏览器解析该页面,根据解析结果,获知要转向 B 通道。
t6attack
2018-12-13 15:52:55 +08:00
前者:服务端 、后者:客户端。
zpf124
2018-12-13 15:58:22 +08:00
听着像是 javaweb 时候讲的 forward 和 Redirect,有些人讲课就爱把这个叫做 服务端重定向 和 客户端重定向。

比如 用户访问 个人中心,如果登录过期了, 这时候有两种处理方式。

1、当前页面返回内容的内容直接就是登录页面, 对于用户来说他 浏览器的访问地址还是 个人中心的 URl,并不知道现在显示的内容是来自于 /login.html 的。(forward)

2、直接返回 302 告诉 客户端 需要去登录页重新登录。 对用户而言,他能看到浏览器跳转页面了,URl 也变成 /login.html 了。(redirect)
wleexi
2018-12-13 15:58:45 +08:00
意思是重定向和转发?
WordTian
2018-12-13 16:15:45 +08:00
客户端一般是用 js 跳转
服务端一般是用 301 状态码,加 Location 响应头
WordTian
2018-12-13 16:16:34 +08:00
@WordTian 噢,是 30x 状态码
binux
2018-12-13 16:25:26 +08:00
这是道语文题
passerbytiny
2018-12-14 09:11:26 +08:00
HTTP 重定向就一个解释,HTTP 状态码 3XX,常见的是 301。浏览器访问 URL 收到 3XX 状态码的时候,需要将当前访问的 URL 替换成新的 URL,是替换不是跳转,所以重定向后是不能返回的。

HTTP 重定向是 HTTP 协议的一部分,只是协议,不是技术。客户端重定向和服务端重定向应该是你框架内部的叫法,是技术方案,跟 HTTP 重定向不是一回事。但是一般来说,提到重定向或 Redirect,指的就是服务器端返回 301 状态码。你这个“服务器端重定向”是个相当不通用的叫法。
yuedingwangji
2018-12-14 09:25:58 +08:00
rewrite 状态栏是会变化的 …
daijinming
2018-12-14 10:46:56 +08:00
@passerbytiny 再问,在网站上点击 QQ 登录,跳转到 QQ 登录界面,QQ 登录成功后再跳转回来,应该不是重定向是吗?
passerbytiny
2018-12-14 10:55:33 +08:00
@daijinming #14 点击登录不是重定向,登陆成功后跳回来是重定向,服务器判定登录成功后,回发送 http301 的。
daijinming
2018-12-14 11:00:36 +08:00
@passerbytiny #18 服务器判定登录成功后,回发送 http301 的,浏览器收到后是不是还是要发出 HTTP 请求到当前功能网站那?
jimzhong
2018-12-14 12:01:57 +08:00
@daijinming 是。打开开发者工具的“网络”卡就能看到。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/517215

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX