美文网首页
Http重定向与转发

Http重定向与转发

作者: 鱼猫大脚 | 来源:发表于2020-12-04 15:22 被阅读0次

    重定向(Redirect)

    重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

    当浏览器请求一个URL,服务器返回一个重定向指令,告诉浏览器地址变了,请使用新的URL重新发送请求。

    总体上,重定向是客户端行为:

    ┌───────┐       GET /url-A    ┌───────────────┐
    │Browser│ ──────────────────> │  Web Server   │
    │       │ <────────────────── │  /url-A       │
    └───────┘       302/301       └───────────────┘
        │
        ▼
    ┌───────┐       GET /url-B    ┌───────────────┐
    │Browser│ ──────────────────> │  Web Server   │
    │       │ <────────────────── │  /url-B       │
    └───────┘       200           └───────────────┘
    

    Java示例:

    @RestController
    @RequestMapping("/redirect")
    public class RedirectController {
    
        @GetMapping("/url-A")
        public String getUrlA(HttpServletResponse response) throws IOException {
            response.sendRedirect("/redirect/url-B");
            return "Redirect-A";
        }
    
        @GetMapping("/url-B")
        public String getUrlB() {
            return "Redirect-B";
        }
    }
    

    转发(Forward)

    转发则是内部控制权的转移,客户端并不知道是如何转移的,是服务端的行为:

                              ┌────────────────────────┐
                              │      ┌───────────────┐ │
                              │ ────>│ /url-A        │ │
    ┌───────┐  GET /url-A     │      └───────────────┘ │
    │Browser│ ──────────────> │              │         │
    │       │ <────────────── │              ▼         │
    └───────┘    200 <html>   │      ┌───────────────┐ │
                              │ <────│ /url-B        │ │
                              │      └───────────────┘ │
                              │       Web Server       │
                              └────────────────────────┘
    

    Java示例:

    
    @RestController
    @RequestMapping("/forward")
    public class ForwardController {
    
        @GetMapping("/url-A")
        public String getUrlA(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.getRequestDispatcher("/forward/url-B").forward(request, response);
            return "Forward-A";
        }
    
        @GetMapping("/url-B")
        public String getUrlB() {
            return "Forward-B";
        }
    }
    
    

    区别

    转发 重定向
    服务端执行 客户端执行
    请求转移给服务端内部的其他资源 请求转移给其他服务器的资源(可以不是同一个服务)
    请求与转移的目标资源间共享 新建一个请求
    一次请求 至少两次请求
    浏览器地址不会改变 浏览器地址会改变
    速度通常比重定向快 速度通常比转发慢

    参考


    本文完

    相关文章

      网友评论

          本文标题:Http重定向与转发

          本文链接:https://www.haomeiwen.com/subject/khkiwktx.html