2016-04-29 38 views
1

使用Accept-Language頭部的區域設置處理回退的正確方法是什麼?在從語言環境中刪除任何子標記(區域等)之前,應用程序是否應嘗試完全匹配所有請求的語言環境?或者應該以相反的方式發生,即使請求中不存在這些無區域的語言環境? HTTP spec沒有提供任何跡象。如何處理接受語言回退?

+0

爲了安全起見:這裏的假設是一個基本的,未加權的談判區域列表? – DaSourcerer

+0

不一定。如果我得到像'en-US,pt-BR; q = 0.9'這樣的東西,但是'en-US'不能直接使用,是否應該在搜索'pt-BR'之前回退到'en'? – timwoj

+1

不,見下文。如果它在'en-US'中找不到表示,應用程序預計會接下來嘗試'pt-BR'。如果客戶端請求'en':它會匹配'en-US',因爲它是一個前綴。 – DaSourcerer

回答

1

早在2014年,RFC 2616已經被RFC 7230至7235所淘汰。請不要再提及它。通過新的RFC,Accept-Language標題現在受RFC 7231, section 5.3.5的管理。所述部分指的是RFC 4647, section 3.3,它已經通過RFC 2616進行了授權。此外,RFC 7231明確指出要使用「基本過濾」匹配策略,其在RFC 4647, section 3.3.1中有詳細描述。

基本過濾或多或少是前綴搜索。但請注意,此搜索正在尋找一個句法前綴,而不是詞彙之一。預計應用程序將按照質量降序(如果沒有提供質量,這是客戶提供的訂單)通過請求的語言標籤列表,並查看每個標籤是否可以進行統計。如果沒有可statisfied,RFC 7231點的狀態是:

如果頭域出現在請求並沒有可用的 表示爲響應有一個相匹配的語言標記,則 源服務器可以忽略通過將 響應看作是不受內容協商的約束或通過發送406 (Not Acceptable)響應來承認 標頭字段來處理標題字段。

相關部分的確強調,忽略語言要求是更爲理想的事情。