2012-12-12 33 views
0

當我請求這個網址:這個HTTP「重定向」如何工作?

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不同。

enter image description here

這是怎麼回事 「重定向」 可能嗎?第一個HTTP響應是404,而不是3xx。 Afaik,404響應做而不是觸發瀏覽器的第二個HTTP請求。那麼,服務器是否在沒有任何請求的情況下推送第二個響應?如果是,爲什麼瀏覽器允許這樣做?


見自己:打開Chrome的開發工具的「網絡」選項卡,並確保「保留日誌在導航」標誌被激活。現在,加載第一個URL(從上方)。

+2

呃,等等... JavaScript在這裏工作嗎?那麼'''''' –

+1

他們可能會使用javascript,但它甚至不需要:發送一個'Refresh:5; url = new_url.html'標題也可以。 – Wrikken

+1

@Wrikken這裏返回的'404'頁面是通用的,所以它們不能像這樣硬編碼特定的新URL。他們所做的是,擁有一個[包含所有URL映射的大型JavaScript文件](http://www.w3.org/TR/html5/fragment-links.js)。該文件由'404'頁面加載,然後執行相應的重定向。 –

回答

0

讓我在這裏回答我自己的問題。

第二個HTTP請求由作爲由404響應返回的頁面的一部分執行的JavaScript代碼啓動。該網頁包含:

<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); 
} 

我愛怎麼我問過的問題,就可以做一個註釋,然後回答了這個問題,都沒有從任何其他人蔘與。 :)