擁有由URL https://example.com/resource
標識的資源,接受image/svg+xml
和text/html
媒體類型(使用HTTP的Accept標頭)。如何獲取每種可能的媒體類型
客戶端怎麼能知道這些可能的媒體類型的? 我們經常提到Accept頭作爲客戶端和服務器之間的談判。但我並不真正瞭解客戶端如何向服務器提供其想要的類型,以及服務器應該如何回答。
我想可能是服務器能教給客戶的允許的類型。
擁有由URL https://example.com/resource
標識的資源,接受image/svg+xml
和text/html
媒體類型(使用HTTP的Accept標頭)。如何獲取每種可能的媒體類型
客戶端怎麼能知道這些可能的媒體類型的? 我們經常提到Accept頭作爲客戶端和服務器之間的談判。但我並不真正瞭解客戶端如何向服務器提供其想要的類型,以及服務器應該如何回答。
我想可能是服務器能教給客戶的允許的類型。
我覺得這需要拆分:
如果你是一個服務器並要通知客戶有關請求資源的替代表示,可以通過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
頭,可以發現:
Accept
頭含有*/*
,這意味着每一個可以想象的媒體類型由客戶端進行理解。從響應中提取的媒體類型,它具有重量q=0
添加到您的Accept頭,讓服務器知道服務的媒體類型是不能接受的。例如:
Accept: image/svg+xml;q=0, */*
406/Not acceptable
響應新的接受頭,你就大功告成了。如果不是:返回步驟2.您現在應該知道服務器上給定資源的所有媒體類型。
樂於助人,非常感謝! – Doug
我已更新我的答案,以包含正確的鏈接類型「alternate」,而不是無效的「alternative」類型。 cf [RFC 5988,scetion 6.2.2](http://tools.ietf.org/html/rfc5988#section-6.2.2)。 – DaSourcerer
什麼這樣的背景下?你希望'https:// example.com/resource'上有'GET',並希望讓請求客戶端知道該資源還有其他表示形式嗎? – DaSourcerer
好吧,在錯誤的內容上發送'415 Unsupported Media Type',客戶端可以讀取Accept頭,並根據它改變它的行爲。但是,如果沒有先驗知識,也沒有第一次請求,就沒有辦法事先確定資源支持什麼。 – Wrikken
但是'Accept'頭只能作爲從客戶端到服務器的請求使用,對嗎? 服務器可以返回什麼以便向客戶端提供可能的值?謝謝你的幫助。 – Doug