V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
daijinming
V2EX  ›  程序员

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

  •  
  •   daijinming · Dec 13, 2018 · 3975 views
    This topic created in 2694 days ago, the information mentioned may be changed or developed.
    21 replies    2021-08-01 21:48:48 +08:00
    qwx
        1
    qwx  
       Dec 13, 2018
    在我的理解中,服务端的重定向分为两种,一种是 redirect,一种是 rewrite,rewrite 是客户端无感知的,就是地址栏不变化。redirect 会给浏览器一个状态码( 301 或 302 ),浏览器实现跳转。客户端重定向我理解的是,状态码虽然是 200,但其内容或 http 头中有跳转指令,浏览器会因为执行相关 js 代码或识别特定 http 头进行跳转操作。
    daijinming
        2
    daijinming  
    OP
       Dec 13, 2018
    在处理第三方用户验证,经常会遇到 重定向的问题,比如接入 CAS、QQ 互联之类的,这种跳转应该都是 服务器 redirect
    goofool
        3
    goofool  
       Dec 13, 2018
    HTTP Redirect 都是协议规定好的,还分什么客户端和服务端吗?你是想问 HTTP Redirect 和服务器调度(Forward)的区别吧
    HanMeiM
        4
    HanMeiM  
       Dec 13, 2018
    QQ 互联、github 这种 OAtuh 的应该先是客户端的跳转,然后请求自己的服务器,服务器重定向到第三方去拿东西
    daijinming
        5
    daijinming  
    OP
       Dec 13, 2018
    @goofool 请讲讲
    goofool
        6
    goofool  
       Dec 13, 2018
    Librazy
        7
    Librazy  
       Dec 13, 2018 via Android
    还有一种内部重定向,HSTS 的 307 是客户端内部产生的,从 http 重定向到 https
    t6attack
        8
    t6attack  
       Dec 13, 2018
    前者在 http 通道本身 定义,后者在 http 通道内传输的页面 定义。

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

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

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

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

    HTTP 重定向是 HTTP 协议的一部分,只是协议,不是技术。客户端重定向和服务端重定向应该是你框架内部的叫法,是技术方案,跟 HTTP 重定向不是一回事。但是一般来说,提到重定向或 Redirect,指的就是服务器端返回 301 状态码。你这个“服务器端重定向”是个相当不通用的叫法。
    yuedingwangji
        16
    yuedingwangji  
       Dec 14, 2018 via Android
    rewrite 状态栏是会变化的 …
    daijinming
        17
    daijinming  
    OP
       Dec 14, 2018
    @passerbytiny 再问,在网站上点击 QQ 登录,跳转到 QQ 登录界面,QQ 登录成功后再跳转回来,应该不是重定向是吗?
    passerbytiny
        18
    passerbytiny  
       Dec 14, 2018
    @daijinming #14 点击登录不是重定向,登陆成功后跳回来是重定向,服务器判定登录成功后,回发送 http301 的。
    daijinming
        19
    daijinming  
    OP
       Dec 14, 2018
    @passerbytiny #18 服务器判定登录成功后,回发送 http301 的,浏览器收到后是不是还是要发出 HTTP 请求到当前功能网站那?
    jimzhong
        20
    jimzhong  
       Dec 14, 2018
    @daijinming 是。打开开发者工具的“网络”卡就能看到。
    xzsljc
        21
    xzsljc  
       Aug 1, 2021
    还有一种内部重定向,HSTS 的 307 是客户端内部产生的,从 http 重定向到 https
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5318 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 01:21 · PVG 09:21 · LAX 18:21 · JFK 21:21
    ♥ Do have faith in what you're doing.