0

当我请求此 URL 时:

http://www.w3.org/TR/html5/embedded-content-1.html#the-img-element

服务器以404(未找到文件)HTTP 响应进行响应。然而,片刻之后,一个不同的 URL被加载到浏览器中,即:

http://www.w3.org/TR/html5/the-img-element.html#the-img-element

服务器基本上发送第二个 HTTP 响应,其 URL 与最初请求的 URL 不同。

在此处输入图像描述

这种“重定向”怎么可能?第一个 HTTP 响应是 a 404,而不是3xx. Afaik,404响应不会触发浏览器的第二个 HTTP 请求。那么,服务器是否只是推送第二个响应而不发出任何请求?如果是,为什么浏览器允许这样做?


亲自查看:打开 Chrome 开发工具的“Net”选项卡,并确保“Preserve Log on Navigation”标志已激活。现在,加载第一个 URL(从上面)。

4

1 回答 1

1

让我在这里回答我自己的问题。

第二个 HTTP 请求由 JavaScript 代码发起,该代码作为404响应返回的页面的一部分执行。该页面包含:

<body onload="fixBrokenLink(404)">

接着:

function fixBrokenLink(is404) {
    if (window.location.hash.length < 1 && !is404)
        return;

    var fragid = window.location.hash.substr(1);
    if (fragid && document.getElementById(fragid))
        return;

    var script = document.createElement('script');
    script.src = 'fragment-links.js';
    document.body.appendChild(script);
}

我喜欢我提出问题、发表评论、然后回答的方式,所有这些都没有任何其他人参与。:)

于 2012-12-12T18:53:46.260 回答