gpt4 book ai didi

javascript - 为什么在静音错误模式下会抛出 NetworkError?

转载 作者:行者123 更新时间:2023-12-01 00:24:33 26 4
gpt4 key购买 nike

我发现这个案例很有趣whatwg规范:

  1. If evaluationStatus is an abrupt completion, then:
    1. If rethrow errors is true and script's muted errors is false, then:
      1. Clean up after running script with settings.
      2. Rethrow evaluationStatus.[[Value]].
    2. If rethrow errors is true and script's muted errors is true, then:
      1. Clean up after running script with settings.
      2. Throw a "NetworkError" DOMException.
    3. Otherwise, rethrow errors is false. Perform the following steps:
      1. Report the exception given by evaluationStatus.[[Value]] for script.
      2. Clean up after running script with settings.
      3. Return evaluationStatus.

我感兴趣的是你如何理解:抛出一个“NetworkError”DOMException。实际上,如果我们将所有错误都静音,谁会理解为什么会在这里引发错误,以及为什么会引发此错误?她出现在这里的原因是什么?

最佳答案

TLDR:这是同源策略 (SOP) 安全限制。

该部分中的链接可带您了解更多信息。步骤 1.2 有 a link to here其中指出:

A boolean which, if true, means that error information will not be provided for errors in this script. This is used to mute errors for cross-origin scripts, since that can leak private information.

如果你看一下规范,muted errors当从被视为与加载脚本的脚本跨源的源加载给定脚本时,会为给定脚本设置标志。

核心问题是<script> (和 importScripts )可以从任意来源加载执行代码。 但是,如果您从跨源位置加载脚本,重要的是如果它加载失败,您将无法知道它失败的原因,因为安全原因。同样,如果您运行 fetch()要加载远程 URL,您对请求获得的响应数据的了解非常有限。

至于为什么,这种行为最常在使用 onerror 时遇到。处理程序。 The onerror MDN docs have a note这导致 Firefox bug 363897this blog post describing the security issue .

问题的核心是,浏览器对您可以从跨域请求中获取哪些信息以及不允许哪些信息进行严格的限制。如果您能够加载跨源 URL,然后拦截异常,则您可能会获得有关正在加载的 URL 内容的信息,这正是同源策略旨在防止的情况。那里的博客文章有更多信息。

关于javascript - 为什么在静音错误模式下会抛出 NetworkError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59132566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com