2009-06-17 33 views
6

有很多種方法可以寫一個HTTP狀態標題:語法HTTP狀態頭

HTTP/1.1 404 Not Found 
Status: 404 
Status: 404 Not Found 

,但它是語義正確和規範兼容的方式是什麼?

編輯:通過狀態標題我的意思是this,使用函數,如PHP的header()

回答

1

最接近的事我已經找到一個答案是Fast CGI spec,這狀態通過狀態和位置標題設置狀態代碼。

4

稍後添加一些信息,因爲我在研究相關問題時遇到了這個問題。

相信Status頭域最初發明的CGI規範的一部分,RFC 3875:

https://tools.ietf.org/html/rfc3875#section-6.3.3

引述:

The Status header field contains a 3-digit integer result code that 
indicates the level of success of the script's attempt to handle the 
request. 

    Status   = "Status:" status-code SP reason-phrase NL 
    status-code = "200" | "302" | "400" | "501" | extension-code 
    extension-code = 3digit 
    reason-phrase = *TEXT 

它允許CGI腳本返回狀態代碼到覆蓋HTTP狀態行中顯示的默認值的Web服務器。通常,服務器會緩存腳本的結果併爲客戶端發出新的標頭。這是一個有效的HTTP頭,它以修改後的HTTP狀態行開頭,並省略腳本「​​Status:」頭字段(以及RFC規定的其他一些轉換)。

因此,您的所有示例都是從CGI腳本開始生效,但只有第一個示例在HTTP標頭中真正有效。後兩者僅來自CGI腳本(或者可能是FastCGI應用程序)。

當CGI腳本生成一個完整且有效的HTTP標頭時,CGI腳本也可以在「非分析標頭」(NPH)模式下運行,該標頭將逐字傳遞給客戶端。因此,它不應該包含Status:標題字段。

請注意,我感興趣的是哪些狀態應該贏得,如果一個NPH腳本得到它有點錯誤,併發出狀態:頭字段,可能除了HTTP狀態行。我找不到任何明確的指示,所以我懷疑它留給執行解析輸出的任何東西,無論是客戶端還是服務器。