谁对 HTTP 的重定向理解比较熟悉,能不能讲解下客户端重定向和服务端重定向有什么异同 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
daijinming
V2EX    程序员

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

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

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

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

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

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

    HTTP 重定向是 HTTP 协议的一部分,只是协议,不是技术。客户端重定向和服务端重定向应该是你框架内部的叫法,是技术方案,跟 HTTP 重定向不是一回事。但是一般来说,提到重定向或 Redirect,指的就是服务器端返回 301 状态码。你这个“服务器端重定向”是个相当不通用的叫法。
    yuedingwangji
        16
    yuedingwangji  
       2018-12-14 09:25:58 +08:00 via Android
    rewrite 状态栏是会变化的 …
    daijinming
        17
    daijinming  
    OP
       2018-12-14 10:46:56 +08:00
    @passerbytiny 再问,在网站上点击 QQ 登录,跳转到 QQ 登录界面,QQ 登录成功后再跳转回来,应该不是重定向是吗?
    passerbytiny
        18
    passerbytiny  
       2018-12-14 10:55:33 +08:00
    @daijinming #14 点击登录不是重定向,登陆成功后跳回来是重定向,服务器判定登录成功后,回发送 http301 的。
    daijinming
        19
    daijinming  
    OP
       2018-12-14 11:00:36 +08:00
    @passerbytiny #18 服务器判定登录成功后,回发送 http301 的,浏览器收到后是不是还是要发出 HTTP 请求到当前功能网站那?
    jimzhong
        20
    jimzhong  
       2018-12-14 12:01:57 +08:00
    @daijinming 是。打开开发者工具的“网络”卡就能看到。
    xzsljc
        21
    xzsljc  
       2021-08-01 21:48:48 +08:00
    还有一种内部重定向,HSTS 的 307 是客户端内部产生的,从 http 重定向到 https
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     912 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 21:10 PVG 05:10 LAX 14:10 JFK 17:10
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86