2013-12-16 52 views
0

擁有由URL https://example.com/resource標識的資源,接受image/svg+xmltext/html媒體類型(使用HTTP的Accept標頭)。如何獲取每種可能的媒體類型

客戶端怎麼能知道這些可能的媒體類型的? 我們經常提到Accept頭作爲客戶端和服務器之間的談判。但我並不真正瞭解客戶端如何向服務器提供其想要的類型,以及服務器應該如何回答。

我想可能是服務器能教給客戶的允許的類型。

+0

什麼這樣的背景下?你希望'https:// example.com/resource'上有'GET',並希望讓請求客戶端知道該資源還有其他表示形式嗎? – DaSourcerer

+1

好吧,在錯誤的內容上發送'415 Unsupported Media Type',客戶端可以讀取Accept頭,並根據它改變它的行爲。但是,如果沒有先驗知識,也沒有第一次請求,就沒有辦法事先確定資源支持什麼。 – Wrikken

+0

但是'Accept'頭只能作爲從客戶端到服務器的請求使用,對嗎? 服務器可以返回什麼以便向客戶端提供可能的值?謝謝你的幫助。 – Doug

回答

0

我覺得這需要拆分:

如果你是一個服務器並要通知客戶有關請求資源的替代表示,可以通過Link頭做,以便在RFC 5988描述。一個可能的反應可能是這樣的:

HTTP/1.1 200 Ok 
Content-Type: image/svg+xml 
Link: <https://example.com/resource>; rel="alternate"; type="image/png" 
Link: <https://example.com/resource>; rel="alternate"; type="image/jpeg" 

如果客戶獲取資源,並想知道哪些備選表示是可用的,這是要走的路,如果沒有Link頭,可以發現:

  1. 抓取資源和發送Accept頭含有*/*,這意味着每一個可以想象的媒體類型由客戶端進行理解。
  2. 從響應中提取的媒體類型,它具有重量q=0添加到您的Accept頭,讓服務器知道服務的媒體類型是不能接受的。例如:

    Accept: image/svg+xml;q=0, */*

  3. 發出對同一資源的新請求,在步驟2中
  4. 創建如果您收到406/Not acceptable響應新的接受頭,你就大功告成了。如果不是:返回步驟2.

您現在應該知道服務器上給定資源的所有媒體類型。

+0

樂於助人,非常感謝! – Doug

+0

我已更新我的答案,以包含正確的鏈接類型「alternate」,而不是無效的「alternative」類型。 cf [RFC 5988,scetion 6.2.2](http://tools.ietf.org/html/rfc5988#section-6.2.2)。 – DaSourcerer

相關問題