Advertisement

HTTP协议特性之重定向——NodeJs版

阅读量:

一、 重定向

1、基本介绍

在网页开发中,为了实现资源(如页面、表单等)的高效路由转移,《URL 转发技术》是一种广泛采用的方法。该技术通过 HTTP 协议中的特殊机制实现资源迁移功能。具体而言,在服务器端通过发送特定类型的响应来触发资源路由的变化。根据 HTTP 标准规定,在这种路由变更操作中会返回一个状态码为 300 系列(如 301 永久重定向、302 临时重定向)的响应信息给客户端设备。当浏览器接收到来自服务器的这些特殊指令后,在相应的时间内自动切换到新的地址并开始加载新内容;由于这些指令对用户体验来说是透明无可见性的操作,并且只会带来微乎其微的性能开销(即性能损失几乎 negligible)。

重定向一般用于整站迁移。

2、 Location

Location 首部配置指定了需要将页面重定向至的目标地址。通常情况下,在响应码为3xx的响应中才会具有意义。

3、如何使用重定向?

Heads添加Location字段

二、 临时重定向——302

1、基本介绍

有时无法通过常规路径获取所需资源,
但能通过别处获取。
此时可采用暂时重导的方法。
搜索 engines will not record this temporary link.
当创建、更新或删除资源时,
暂时重导可以用来显示进度页面。

2、状态码:302

3、代码示例:

复制代码
    const http = require("http");
    const fs = require("fs");
    const host = "127.0.0.1";
    const port = 8080;
    
    const server = http.createServer((requestMsg, response) => {
    
    if (requestMsg.url === "/img") {
        console.log("/img")
        //301谨慎使用,否则只有客户自动清除缓存
        // response.writeHead(301,"Permanent Redirect",{//此段代码只执行一次
        //     "Location":"/yxc"
        // })
        response.writeHead(302,"Temporary Redirect",{
            "Location":"/yqx"
        })
        response.end();
        // response.writeHead(200, "OK", {"Content-Type": "text/html; charset=utf-8"});
        // response.end("图片请求");
    } else if (requestMsg.url === "/yxc") {
        console.log("/yxc")
        requestMsg.on("data", (data) => {
            console.log("data:" + data.toString())
        })
    
        response.setHeader("Content-Type", "image/jpeg")
        const readS = fs.createReadStream("./imgs/yxc.jpg");
        readS.pipe(response);
    } else if (requestMsg.url === "/yqx") {
        console.log("/yqx")
        requestMsg.on("data", (data) => {
            console.log("data:" + data.toString())
        })
    
        response.setHeader("Content-Type", "image/jpeg")
        const readS = fs.createReadStream("./imgs/yqx.jpg");
        readS.pipe(response);
    } else {
        response.writeHead(500, "Invalid Request", {"Content-Type": "text/html; charset=utf-8"});
        response.end("无效请求");
    }
    
    })
    server.listen(port, host, () => {
    console.log(`server starting at ${host}:${port}`)
    })
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释

4、代码说明:
执行上述代码后,如下代码可执行多次:

复制代码
     response.writeHead(302,"Temporary Redirect",{
             "Location":"/yqx"
         })
    
      
      
      
    
    代码解释

当更改Location值时,可以重新定位。

三、永久重定向——301

1、基本介绍

此重定向操作具有永久性。此操作表明原始URL不再作为有效引用存在,请以新的URL为准进行引用。当检测到该状态码出现时,请启动更新流程,并在搜索引擎index库中修正相关资源的URL信息。

2、状态码:301

3、代码示例:

复制代码
    const http = require("http");
    const fs = require("fs");
    const host = "127.0.0.1";
    const port = 8080;
    
    const server = http.createServer((requestMsg, response) => {
    
    if (requestMsg.url === "/img") {
        console.log("/img")
        //301谨慎使用,否则只有客户自动清除缓存
        response.writeHead(301,"Permanent Redirect",{//此段代码只执行一次
            "Location":"/yxc"
        })
        // response.writeHead(302,"Temporary Redirect",{
        //     "Location":"/yqx"
        // })
        response.end();
        // response.writeHead(200, "OK", {"Content-Type": "text/html; charset=utf-8"});
        // response.end("图片请求");
    } else if (requestMsg.url === "/yxc") {
        console.log("/yxc")
        requestMsg.on("data", (data) => {
            console.log("data:" + data.toString())
        })
    
        response.setHeader("Content-Type", "image/jpeg")
        const readS = fs.createReadStream("./imgs/yxc.jpg");
        readS.pipe(response);
    } else if (requestMsg.url === "/yqx") {
        console.log("/yqx")
        requestMsg.on("data", (data) => {
            console.log("data:" + data.toString())
        })
    
        response.setHeader("Content-Type", "image/jpeg")
        const readS = fs.createReadStream("./imgs/yqx.jpg");
        readS.pipe(response);
    } else {
        response.writeHead(500, "Invalid Request", {"Content-Type": "text/html; charset=utf-8"});
        response.end("无效请求");
    }
    
    })
    server.listen(port, host, () => {
    console.log(`server starting at ${host}:${port}`)
    })
    
    
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释

4、代码说明:

执行永久重定向代码后,如下代码只执行一次:

复制代码
     response.writeHead(302,"Temporary Redirect",{
             "Location":"/yxc"
         })
    
      
      
      
    
    代码解释

当更改Location值后,

复制代码
     response.writeHead(302,"Temporary Redirect",{
             "Location":"/yys"
         })
    
      
      
      
    
    代码解释

一直以来,“Location”: "/yqx"被使用。直到清除缓存后,“Location”: "/yys"才开始采用。

一直以来,“Location”: "/yqx"被使用。直到清除缓存后,“Location”: "/yys"才开始采用。

为了科学配置永久重定向301功能,请务必谨慎操作;一旦设置永久重定向,请注意该行为会导致浏览器持续执行新的操作流程(即不会自动跳转至目标网页),除非及时清除浏览器缓存以解除限制。若需更改目标网站迁移地址,则应在清除浏览器缓存后才能访问新的目标网站;否则将严重影响用户体验的质量。

四、面试点:重定向的三个状态301 302 304

301:永久重定向
302:临时重定向
304:协商缓存

全部评论 (0)

还没有任何评论哟~