前端面试题 - 92. head 请求了解过吗?如何用 get 模拟 head 请求?

705 阅读2分钟

HTTP 中的 HEAD 请求方法与 GET 方法类似,但是不返回请求资源的主体部分,只返回头部信息(响应码、响应头等)。HEAD 请求常用于检查资源是否存在、获取资源的元数据以及检查资源是否被修改过等。

XMLHttpRequest实现

如果要使用 GET 模拟 HEAD 请求,可以通过以下步骤来实现:

  1. 发送一个 GET 请求,但是在请求中添加一个自定义的请求头 {'X-HTTP-Method-Override': 'HEAD'} ,表示使用 HEAD 方法。
  2. 服务器接收到该请求时,会根据请求头中的 X-HTTP-Method-Override 参数,判断该请求为 HEAD 请求,然后只返回响应头信息,不返回响应体部分。

示例代码如下:

// 创建 XMLHttpRequest 对象
const xhr = new XMLHttpRequest();
// 打开连接,使用 GET 方法
xhr.open('GET', '/path/to/resource');
// 添加自定义请求头,模拟 HEAD 请求
xhr.setRequestHeader('X-HTTP-Method-Override', 'HEAD');
// 设置回调函数
xhr.onreadystatechange = function() {
  // 如果状态为完成
  if (xhr.readyState === XMLHttpRequest.DONE) {
    // 如果状态码为 200
    if (xhr.status === 200) {
      // 输出头部信息
      console.log(xhr.getAllResponseHeaders());
    }
  }
};
// 发送请求
xhr.send(null);

需要注意的是,并非所有的服务器都支持使用 X-HTTP-Method-Override 头部来模拟 HEAD 请求,因此需要根据具体情况进行处理。

用fetch实现

使用 fetch 函数实现 HEAD 请求的方法与使用 XMLHttpRequest 的方法类似,也需要在请求头中添加一个自定义的参数 {'X-HTTP-Method-Override': 'HEAD'} 来表示使用 HEAD 方法。

示例代码如下:

fetch('/path/to/resource', {
  method: 'GET',
  headers: {'X-HTTP-Method-Override': 'HEAD'}
}).then(response => {
  // 输出头部信息
  console.log(response.headers);
});

需要注意的是,在使用 fetch 函数时,我们需要手动解析响应头信息。上面的代码中,我们可以通过 response.headers 属性来获取响应头信息。