V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
466934322
V2EX  ›  PHP

求大神解答!转发和重定向的区别

  •  
  •   466934322 · 2016-06-21 21:32:15 +08:00 via Android · 2844 次点击
    这是一个创建于 2868 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看了百度。转发是服务器操作!重定向是客户端操作!那么我从页面上 index.php?Id=22 类似这种,传过去的应该属于服务器转发还是客户端重定向?
    11 条回复    2016-06-24 19:22:35 +08:00
    shiji
        1
    shiji  
       2016-06-21 21:44:40 +08:00 via Android   ❤️ 1
    这通常是转发。

    以后自己打开浏览器 F12 切到网络,然后输入地址回车,返回的第一个状态码是 3XX (比如 301 302 之类的)就是重定向。否则就是 rewrite 或者什么也不是
    bdbai
        2
    bdbai  
       2016-06-21 23:52:28 +08:00 via Android   ❤️ 1
    转发通常是让 URL 更好看一些,比如
    /blog/post/22 -> /blog/post.php?id=22
    转发发生在服务器收到请求后。客户端不知道实际地址。

    HTTP 重定向在客户端是可见的。比如用户登录成功后服务器执行 header('Location: /welcome'); 客户端收到回应后会立即再往 /welcome 这里发一个请求,地址栏上可以观察到。

    你举的例子只是普通的 GET 参数传递,没有涉及到转发或重定向。
    luckycat
        3
    luckycat  
       2016-06-22 03:07:21 +08:00   ❤️ 1
    URL 转发 和 URL 重定向没有区别。都是服务器向客户端返回 HTTP 301 或 HTTP 302 响应而已。

    百度搜索技术问题最令人无语的地方就是,总会有一堆自己都没弄明白怎么回事的人过来教你。让你怀疑自己智商有问题。
    wingtatlee
        4
    wingtatlee  
       2016-06-22 04:51:34 +08:00   ❤️ 1
    你所說的轉發和重定向是 Forward 和 Redirect 嗎?分別是很大的。
    Redirect - 是使用瀏覽器進行重定向。 It sends an http response with code 3xx ,然後瀏覽器會發出另外的 request 去到新的頁面。
    Forward - 這是內部的操作。瀏覽器是不知道頁面發生了什麼改變,因此 URI 是不會發生改變的,你還是在原來同一個頁面。

    理論上來說, Forward 會更快,因為瀏覽器沒有參與到操作,還是原來的 URL 。 Redirect 會相對慢,瀏覽器參與到操作中,你會得到新的 URL 。

    你從頁面發出 index.php?Id=22 ,到底是 Forward 還是 Redirect 是視乎 server side 最後如何執行你的 request 。而使用哪一個是需要根據不同的 scenario 。
    jatesun
        5
    jatesun  
       2016-06-22 06:52:30 +08:00 via iPhone
    这种问题随手谷歌一下,任何一个结果都比这要详细仔细得多→_→
    466934322
        6
    466934322  
    OP
       2016-06-22 07:51:26 +08:00 via Android
    @luckycat
    @wingtatlee
    @bdbai
    @shiji
    因为全栈的大牛告诉我,重定向可以防止表单重复提交!而我因为对安全也不懂,所以对这方面格外注重吧!
    vjnjc
        7
    vjnjc  
       2016-06-22 12:16:34 +08:00
    重定向是会产生 2 个 http 请求。
    转发是 1 个 http 请求(在服务端)被 route 到了另外个 controller 处理逻辑。
    shiji
        8
    shiji  
       2016-06-22 15:28:03 +08:00 via Android
    @466934322 全栈的大牛。。。。

    不管重定向还是 rewrite ,都不能防止表单重复提交吧?重定向点几次后退不就可以重新提交了吗?

    而且把这个归为安全问题貌似太勉强了,应该是概念问题。

    是有哪本脑残教材或者视频把重定向和转发拿出来比较了么?感觉几天前还有人在 sf 上问几乎一样的问题。
    misaka19000
        9
    misaka19000  
       2016-06-22 16:29:05 +08:00   ❤️ 1
    重定向:基于 HTTP 协议
    转发:程序内部的数据转移
    bdbai
        10
    bdbai  
       2016-06-22 18:26:12 +08:00 via Android
    @466934322 这大牛一定不是全栈...你可以找个 PHP 框架,看看它的重定向和 URL 路由分别是怎么用的,自己感受一下。
    yukar
        11
    yukar  
       2016-06-24 19:22:35 +08:00   ❤️ 1
    轉發:敲門之後直接把人給你找來
    重定向:敲門後告訴你那人真實住址
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5696 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 06:08 · PVG 14:08 · LAX 23:08 · JFK 02:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.