2012-11-10 39 views
2

我在http中的「接受」頭中遇到問題。我寫了http客戶端,當我設置「Accept:image/png」時,我可以讀取任何文件(如txt,html等)。 我想我應該是不可能的,如果我設置標頭「接受」像上面...HTTP中的頭接受

我試圖檢查我的Firefox的行爲....我寫了「about:config」,我設置了「network.http。 accept.default「as」image/png「...我可以像往常一樣上網。

難道我不明白這個標題的含義嗎?我認爲我只能打開文件* .png。

任何人都可以解釋這一點嗎?

(對不起,我的英語)

請幫助我。

回答

0

正如你猜想,設置接受,不能接受別人比媒體的這些指定的手段,服務器應該返回一個406響應代碼。 它的做法是,服務器沒有正確實現,並始終發送響應。

所有細節RFC 2616

+0

您的消息暗示這一點,但只是爲了明確說明,以備日後用戶:服務器**不REQUIRED **兌現客戶端'Accept'頭。規範具體規定:*「如果服務器不能發送根據組合的Accept字段值可接受的響應,則服務器應該發送406」* ...這意味着它們應該發送406,但是, **不需要**這樣做,並且在技術上允許發送他們所需的任何內容。 – rdlowrey

0

的接受頭是不好的瀏覽器中實現,並在公共網站,爬蟲提出請求過使用時會導致奇怪的錯誤。

這就是爲什麼,接受頭是忽視大部分時間像在Rail framework

3

接受可並不是強制性的;服務器可以(並且經常)不執行它,或者決定返回其他東西。

如果請求中存在[Accept]頭字段,且響應的可用表示都沒有被列爲可接受的媒體類型,則源服務器可以通過發送406 (不可接受)響應,或者通過將響應視爲不受內容協商處理,忽略標題字段。

Source - RFC 7231 5.3.2. Accept

1

實際上,前者是正常現象。讓我舉一個例子。

如果給定的URL指向一個PDF文件,並Accept頭只接受DOCX,那麼服務器會盲目地忽略它,因爲服務器沒有設置PDF等文件之間做出選擇發送PDF文件。

如果有可用的多種格式,那麼服務器會考慮「接受」標題,並嘗試發送相應的響應,如果沒有,那麼它會忽略「接受」頭。