Follow Redirection

Node.js

在进行网络请求的时候,有可能会遇上服务器指定链接跳转的情况。此时,无论是 301(永久转移)还是 302(暂时转移),在请求页面的时候都需要根据服务器的指示,去访问下一个链接。当然,这里下一个链接依然有可能是跳转链接,需要继续执行跳转操作。

一段可用的 Node.js 代码如下:

const http = require('http');
const https = require('https');

function fetch(link) {
  return new Promise((resolve) => {
    const { get } = link.startsWith('https') ? https : http;
    get(link, response => {
      if (response.statusCode >= 300 && response.statusCode < 400) {
        const { location } = response.headers;
        return fetch(location).then(resolve);
      }
      resolve(response.headers['set-cookie']);
    });
  });
}

这里,Node.js 处理 HTTP 和 HTTPs 请求使用的模块是不相同的,因而需要根据链接地址的 protocol 进行按需索取。同时,如果是 3xx 的 HTTP 结果,则需要进行链接跳转。可以直接读取 headers 中的 location 数据,找到下一步需要跳转到的位置。