尽管文件可访问,但“Lighthouse 无法下载 robots.txt 文件”

2024-04-07

我有一个NodeJS/NextJS应用程序运行于http://www.schandilla.com http://www.schandillia.com。该项目有一个机器人.txt文件可访问于http://www.schandillia.com/robots.txt http://www.schandillia.com/robots.txt。到目前为止,该文件仅用于测试目的:

User-agent: *
Allow: /

然而,当我在我的网站上运行 Lighthouse 审核时,它会抛出一个错误抓取和索引错误说无法下载机器人.txt文件。我再说一遍,该文件位于http://www.schandillia.com/robots.txt http://www.schandillia.com/robots.txt.

如果您需要查看该项目的代码库,则位于https://github.com/amitschandilla/proost https://github.com/amitschandillia/proost. The 机器人.txt文件位于proost/web/static/但由于我的 Nginx 配置中的以下内容,可以在根目录下访问:

# ... the rest of your configuration
  location = /robots.txt {
    proxy_pass http://127.0.0.1:3000/static/robots.txt;
  }

完整的配置文件可在 github 上查看:https://github.com/amitschandillia/proost/blob/master/.help_docs/configs/nginx.conf https://github.com/amitschandillia/proost/blob/master/.help_docs/configs/nginx.conf.

如果有什么我忽略的地方,请提出建议。


TL;DR: Your robots.txt is served fine, but Lighthouse can not fetch it properly because its audit can currently not work with the connect-src https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src directive of of your site’s Content Security Policy, due to a known limitation which is being tracked as issue #4386 https://github.com/GoogleChrome/lighthouse/issues/4386 was fixed in Chrome 92 https://github.com/GoogleChrome/lighthouse/pull/12423.


解释:Lighthouse 尝试获取robots.txt文件通过从站点根目录提供的文档运行的脚本的方式进行。这是它用来执行此请求的代码(可以在灯塔核心 https://github.com/GoogleChrome/lighthouse/blob/master/lighthouse-core/gather/gatherers/seo/robots-txt.js):

const response = await fetch(new URL('/robots.txt', location.href).href);

如果您尝试从您的站点运行此代码,您会注意到抛出“拒绝连接”错误:

发生此错误的原因是浏览器对您网站提供的标头强制实施内容安全策略限制(为了便于阅读,分为几行):

content-security-policy:
    default-src 'self';
    script-src 'self' *.google-analytics.com;
    img-src 'self' *.google-analytics.com;
    connect-src 'none';
    style-src 'self' 'unsafe-inline' fonts.googleapis.com;
    font-src 'self' fonts.gstatic.com;
    object-src 'self';
    media-src 'self';
    frame-src 'self'

注意connect-src 'none';部分。每CSP 规范 https://w3c.github.io/webappsec-csp/2/#directive-connect-src,这意味着无法使用脚本接口从所提供的文档中加载任何 URL。在实践中,任何fetch被拒绝。

由于您配置的方式,此标头由 Next.js 应用程序的服务器层显式发送内容安全策略中间件 https://github.com/helmetjs/csp (from 提交 a6aef0e https://github.com/amitschandillia/proost/commit/a6aef0ef4e23a7836ba57cd9d8198d31bc1de471#diff-5ea216fa13019bfada6d0326e01aa7bbR32):

import csp from 'helmet-csp';

server.use(csp({
  directives: {
    defaultSrc: ["'self'"],
    scriptSrc: ["'self'", '*.google-analytics.com'],
    imgSrc: ["'self'", '*.google-analytics.com'],
    connectSrc: ["'none'"],
    styleSrc: ["'self'", "'unsafe-inline'", 'maxcdn.bootstrapcdn.com'], // Remove unsafe-inline for better security
    fontSrc: ["'self'"],
    objectSrc: ["'self'"],
    mediaSrc: ["'self'"],
    frameSrc: ["'self'"]
  }
}));

解决方案/解决方法:要解决审计报告中的问题,您可以:

  • 等待(或提交)Lighthouse 中的修复
  • use the connect-src 'self'指令,这会产生允许来自 Next.js 应用程序浏览器端的 HTTP 请求的副作用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尽管文件可访问,但“Lighthouse 无法下载 robots.txt 文件” 的相关文章

随机推荐

  • 立即返回弹簧网通量

    我正在尝试创建应该返回 201 响应的框架 当向 API 发出请求时 我想立即发回响应并在后台处理该请求 Flux fromIterable request getApiRequests log flatMap item gt WebCli
  • 正确的 Javascript 继承

    我想知道是否可以在javascript中继承构造函数 在下面的例子中 我想要Moveable分派x and y论点this x and this y分别如我所定义Sprite 另外 在不创建祖先实例的情况下定义原型的最佳方法是什么 但仍然简
  • Django 无法加载静态文件

    对 django 来说是全新的 在我的 settings py 文件中 我有 STATIC URL static INSTALLED APPS django contrib admin django contrib auth django
  • 如何将我的 Sqlite 数据库移植到 GAE?

    我的本地硬盘中有一个 SQLite 格式的数据库 我希望将数据库升级到 GAE 以便我可以使用它来创建某些很酷的网络应用程序 我已经四处浏览寻找一种方法来做到这一点 然而 大多数可用的项目都是将GAE中的数据库备份到我的本地硬盘 是否有现有
  • 将 Clojure 函数作为 java.util.Function 传递

    正如在主题中一样 我想使用一个以 Function 作为参数的 Java 方法 并为其提供一个Clojure函数 无论是匿名函数还是常规函数 任何人都知道如何做到这一点 java util function Function是一个接口 您需
  • 如何向 jfreechart 创建的图表添加缩放功能

    我使用 jfree 绘制了 XY 图表 现在我想为其添加缩放功能 这必须使用图表底部的滑块来完成 如何添加 Windows 照片查看器中提供的缩放功能 另外 当用户将鼠标悬停在绘制的线上时 我想将图表的当前 Y 值显示为工具提示 我没有得到
  • redirect_uri 不属于应用程序

    类似的问题和答案都没有解决我的问题 我有两个 Facebook 应用程序 一个是另一个的测试版本 因此它们几乎相同 我测试时没有任何问题 但在实时应用程序上 我收到 redirect uri 不属于应用程序 错误 这个申请就是一个很好的例子
  • 矢量化和尴尬并行之间有什么关系?

    这个问题说明了一切 在我看来 矢量化与令人尴尬的并行问题密切相关 换句话说 所有可矢量化的程序都必须是极其并行的程序 它是否正确 对令人尴尬的并行性的快速总结 一个代码是尴尬地平行如果代码可以毫不费力地并行化 特别是处理数据依赖性 请注意
  • 如何将焦点设置到 NSButton?

    I m writing a small menubar application for OS X Yosemite When clicking on the menubar icon a popover appears with a num
  • 类模板可以在没有成员的情况下实例化吗?

    The 维基百科文章 http en wikipedia org wiki Template metaprogramming说 实例化类模板不会导致其成员定义被实例化 我无法想象 C 中的任何类被实例化 无论是否从模板中 类成员也没有被实例
  • 将表单值附加到 Go 中的 GET/POST 请求

    我想定义一个http Client自动将表单值附加到所有 GET POST 请求 我天真地尝试实施http RoundTripper从另一个库复制 粘贴时使用此技术来修改每个请求的标头 type Transport struct Trans
  • 如何在 IntelliJ IDEA 中自动完成 lambda?

    I m using IntelliJ IDEA 13 with Java 8 and wonder how to autocomplete lambdas Before Java 8 I used anonymous inner class
  • 循环遍历模型并在视图中为每个属性创建文本框

    我有一个具有 5 6 个属性的模型 是否可以循环遍历模型中的所有属性 公共属性 并在每次迭代的视图中创建一个文本框 而不是繁琐地编写一行代码来在视图中创建文本框 Thanks 是的 你可以使用 Html EditorForModel 或者
  • Emacs:持续突出显示一个区域

    Emacs 扩展markerpen el 链接文本 http www emacswiki org emacs MarkerPens 允许您突出显示缓冲区中的任意区域 使用此扩展 一旦您终止缓冲区 添加的突出显示就会丢失 然而 如果能够以 持
  • 是否可以向我没有源代码的类添加断点?

    我想在 Eclipse 中的类中添加断点 但我没有它的源代码 是否可以在其中添加断点 就我而言 我实际上只需要知道何时调用方法 附带说明 有人有 j2ee api 1 3 jar 的源代码吗 如果打开大纲视图 您可以选择一种方法 右键单击并
  • IntelliJ 社区找不到 Web 应用程序 Artifact 来生成 WAR

    我在用着IntelliJ IDEA 社区版生成一个war来自 Maven 项目的文件 当谈到生成这个战争文件时 我在工件中找不到战争选项 我尝试过 1 前往文件 gt 项目结构 gt 工件 gt 类型 但是没有提到WAR 2 右键单击项目模
  • 绑定 Span 的内容

    我有一个显示文本的窗口 文本有两部分 第一部分是固定的 而第二部分需要是在窗口上声明的 DependencyProperty 的内容 我考虑使用包含两个 Span 的 TextBlock 第一个包含固定内容 第二个包含可变内容 但我在 Sp
  • SQL Server 2008存储过程结果作为列默认值

    首先 谢谢各位 当我什至找不到词语来解释我到底想做什么时 你总是知道如何指导我 我的几个表上的列的默认值需要等于其他表中其他列上的一些复杂计算的结果 我的第一个想法是简单地让列默认值等于存储过程的结果 我还会从调用表的列中提取一个或多个参数
  • 在 CakePHP 应用程序中启用 CORS

    我正在尝试为 CakePHP 中内置的 API 启用 CORS 以便可以通过 AppController 中的以下内容访问所有请求 public function beforeFilter header Access Control All
  • 尽管文件可访问,但“Lighthouse 无法下载 robots.txt 文件”

    我有一个NodeJS NextJS应用程序运行于http www schandilla com http www schandillia com 该项目有一个机器人 txt文件可访问于http www schandillia com rob