【问题标题】:How I can block some of the HTTP headers fields?如何阻止某些 HTTP 标头字段?
【发布时间】:2019-10-18 13:54:22
【问题描述】:

例如,该页面正在发送我不想从中加载异步 CSS 的“链接”http 标头字段。我怎样才能阻止它?我是否有可能获得这些标题,从中删除 LINK 字段,然后页面将在没有此添加 CSS(未放置在页面正文中)的情况下加载?

我尝试修改标题无济于事。

request('https://www.google.com', function(err, resp, data){
  if (resp.statusCode == 200) {
    console.log(resp.headers); // headers
  }
  else {console.log(err);}
});

Request 是一个 node.js 模块。我需要在浏览器加载标题之前修改标题(通过'render'与ejs模板组合传递修改后的标题不起作用)。

【问题讨论】:

    标签: http http-headers


    【解决方案1】:

    是的,可以从 html 响应中删除 css 和 js 链接(它们不是标题),并仅使用 jsdom 或cheerio 显示结果。

    【讨论】:

    • 我不是在谈论 HTML 页面响应,我是在谈论 HTTP 标头响应。如果服务器给你响应 - 可以删除部分 HTTP 标头,在浏览器获取它们并启动异步作业以尽快下载它们之前?
    • @Proo1931 指向 css 和 js 的“链接”存在于 HTML 页面响应正文中,而不是 HTTP 标头中。
    • 哦,所以首先我们需要将 CSS 和 JS 添加到 HTML 页面的 head 元素中,然后我们可以通过 HTTP headers 链接字段请求异步加载它们......好的,我现在明白了,感谢@shaochuancs 的解释,zuei 的帖子是正确的,我会接受它。
    • @Zuei Zukenberg 通过删除 CS 和 JS 链接你的意思是编辑我在 request 和 jsdom 模块的帮助下抓取的内容 - 通过删除链接/脚本标签?还是有更简单的方法?
    • Hm.. 一个简单的解决方案是使用正则表达式,否则,使用 jsdom 您可以定位所有样式标签并将它们从 dom 中删除。
    【解决方案2】:

    更新:OP 正在谈论“Web 链接”,即带有 HTTP 响应标头的预取资源上的 RFC5988 内容,并希望阻止此类预取行为。

    为此,可以手动创建代理,阻止所有不需要的数据,并仅返回 HTTP 标头和感兴趣的内容。例如:

    router.get('/proxy-to-google', function(req, res) {
      request('https://www.google.com', function(err, resp, data) {
        // get interested headers from resp object, and set it in res
        res.set('Example-Header', 'XXX');
        ...
        res.send(data);
      });  
    });
    

    网络世界中有 3 种类型的 head/header,您似乎对这些概念感到困惑。

    1. HTTP 标头。这些是 HTTP 请求和响应中传递的标头信息。在问题示例中,会打印 HTTP 响应标头。
    2. <header> HTML 中的元素。这些是存在于 HTML 页面正文中的可见元素,主要用于包装标题、导航栏等元素。
    3. <head> HTML 中的元素。这是 HTML 文档的元元素。它在页面中不可见,而是负责标记 HTML 文档的重要信息,例如 CSS 样式表链接、JavaScript 文件 URL 等。

    在您的情况下,您正试图阻止上面的第 3 种“头部”,您可以使用 @Zuei Zukenberg 的建议来实现。这个<head> 元素与HTTP 标头无关。

    【讨论】:

    • 不,我正在尝试捕获 HTTP 标头 - 'link',它想要异步加载 CSS 和 JS - 但我发现 HTML PAGE 中的 HEAD 元素也包含这些文件。 HTTP 标头只想尽快下载它们 - 这会导致我的应用程序出错 - 因为在我可以用这些链接剪切 HEAD HTML 部分之前,它们已经加载(预加载)。
    • 嗯,在 HTTP 标头中包含 CSS 和 JS “链接”是一个非常奇怪的设计。
    • 是的,我知道,我也很惊讶(不知道 HTTP 标头中有 LINK 字段,您可以使用 rel=preload 选项协助样式和脚本,但是如何删除它们?你有什么想法吗?
    • 啊,你说的是“Web Linking”,RFC5988 的东西。您想为您自己的网站禁用网络链接预取吗?或者您是否尝试为某些 3rd 方网站(例如 Google)禁用它?
    • 我测试了一个网站 - 它通过 HTTP 标头链接字段加载样式和脚本。稍后它会与我自己的脚本混淆,所以我想把它们删掉。我已经安装了 jsdom,但不知道如何消除下载,例如一个很重要的 css 样式!改变我风格的规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 2014-04-24
    • 1970-01-01
    相关资源
    最近更新 更多