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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TDCQZD/article/details/81982112

一、 重定向

1、基本介绍

URL 重定向,也称为 URL 转发,是一种当实际资源,如单个页面、表单或者整个 Web 应用被迁移到新的 URL 下的时候,保持(原有)链接可用的技术。HTTP 协议提供了一种特殊形式的响应—— HTTP 重定向(HTTP redirects)来执行此类操作。
在 HTTP 协议中,重定向操作由服务器通过发送特殊的响应而触发。HTTP 协议的重定向响应的状态码为 3xx 。浏览器在接收到重定向响应的时候,会采用该响应提供的新的 URL ,并立即进行加载;大多数情况下,除了会有一小部分性能损失之外,重定向操作对于用户来说是不可见的。

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

2、 Location

Location 首部指定的是需要将页面重新定向至的地址。一般在响应码为3xx的响应中才会有意义、

3、如何使用重定向?

Heads添加Location字段

二、 临时重定向——302

1、基本介绍

有时候请求的资源无法从其标准地址访问,但是却可以从另外的地方访问。在这种情况下可以使用临时重定向。搜索引擎不会记录该新的、临时的链接。在创建、更新或者删除资源的时候,临时重定向也可以用于显示临时性的进度页面。

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。搜索引擎机器人会在遇到该状态码时触发更新操作,在其索引库中修改与该资源相关的 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"
         })

IP定位使用的一直是 "Location":"/yqx",直到清理缓存后,才会使用 "Location":"/yys"
5、注意事项

永久重定向301谨慎使用,一旦设定永久重定向,浏览器将一直触发新操作,除非用户清理缓存。如果中途改变了网站迁移地址,必须用户清除缓存后才能访问到新网站,导致用户体验非常不好。

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

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

展开阅读全文

没有更多推荐了,返回首页