[英]Default content being added to 301 headers with PHP 5.3.5 / IIS7
在http://www.hesa.ac.uk上 ,我們使用自定義404處理腳本將用戶從http://www.hesa.ac.uk/press (例如)重定向到實際網址,該網址是丑陋的CMS之一: http : //www.hesa.ac.uk/index.php? option=com_content&task = category§ionid=1& id= 1& Itemid=161
我們正在運行fast-cgi。
先發送301標頭,然后發送位置標頭。
它對我們99%的用戶來說效果很好,但其中一些報告的加載時間為5到6秒。 我們認為,這是由於重定向中出現了一些雜散內容:
<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="http://www.hesa.ac.uk/index.php?option=com_content&task=category&sectionid=1&id=1&Itemid=161">here</a></body>
這在我們可以看到的代碼中沒有輸出。 這是實際執行重定向的方法:
/**
* Do the actual redirection to the win URL
*
*/
function doRedirection() {
//start output buffering to trap any content that is output by default by the headers
@ob_start();
//permanently moved header
//header( 'HTTP/1.1 301 Moved Permanently' );
//fast-cgi, so use this:
header('Status: 301 Moved Permanently', true);
@ob_end_clean(); // clear output buffer
//location header
header( "Location: ". $this->winUrl );
@ob_end_clean(); // clear output buffer
die();
}
我似乎找不到任何資源來指示如何停止輸出這些額外的內容。 我已經嘗試了上述方法的各種變體來進行重定向。
有人遇到過類似的問題嗎? 有人有什么想法嗎?
干杯,
G
編輯:我們已經意識到,這是IIs7的預期行為,但是IIS6從未使用相同的代碼來完成它,並且無論是否預期,我們的用戶都在抱怨,這似乎是問題所在。
編輯2:似乎唯一可行的解決方案是放棄此方法,而轉而使用IIS7的url重寫功能,這需要編寫一個C#類,該類將克隆PHP類的功能,然后將其插入IIS。
編輯3:但是,設置content-length:0標頭可能會有所幫助。 尚未測試。
事實證明,問題實際上是在重定向代碼中使用了內置PHP函數getHostByAddr()。 沒有正確設置其DNS記錄的客戶端主機會從getHostByAddr()經歷5到6秒的延遲(在IIS7下,IIS6從未遇到此問題)。 如果找到替代功能並將其換出,問題就會消失。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.