2011-04-14 83 views
95

據我知道有兩個地方設置內容類型:我需要http獲取請求的內容類型嗎?

  1. 客戶端設置的內容類型的身體,他被髮送到服務器(例如,用於交)
  2. ,服務器設置響應的內容類型。

這是否意味着我不必或不應該爲我的所有請求(客戶端)設置內容類型。如果我可以或應該使用什麼類型的內容?

另外我在幾篇文章中看到客戶端的內容類型指定了客戶端想要接收的內容類型。所以也許我的觀點1是不正確的?

回答

57

按照RFC 7231 section 3.1.5.5

生成包含一個有效載荷體應在該消息除非的預期介質類型產生一個Content-Type首部字段的消息發送方封閉表示對發送者是未知的。 如果不存在內容類型標題字段,則接收者可以採用媒體類型「application/octet-stream」([RFC2046], Section 4.5.1)或檢查數據以確定其類型。

這意味着Content-Type HTTP頭應僅用於PUTPOST請求進行設置。

+27

這實際上並不意味着這一點。確切地說,它表示Content-Type頭應該(但不必)用於具有正文的請求,並且如果在這些情況下缺少,那麼收件人可能會嘗試猜測或退回到應用程序/八位字節流,如果它不能。即使沒有內容,也可以包含Content-Type。在說「必須爲......設置」時,「必須」和「唯一」都是錯誤的。 – 2013-09-01 19:47:33

+2

@Epoc,引用的信息最好是隱含的。它**實際上並沒有說**沒有entity-body的消息「SHOULD NOT」不包含內容類型。我們有明確的報價嗎? – Pacerier 2014-12-10 11:53:20

+0

@Prier請不要在別人的答案中排除核心結論,即使它是錯誤的。我同意Epoc的回答是錯誤的 - 他引用的部分沒有任何內容支持他的答案的結論,並且它值得被低估。但這並不意味着你應該編輯答案來消除其核心前提,從而徹底改變其含義。 – 2017-10-19 12:57:15

58

獲取請求不應該有內容的類型,因爲他們沒有請求實體(即身體)

+18

@Dmitry,**需要引用**,否則它代表一個假設,而不是一個事實。 – Pacerier 2014-12-10 11:50:45

+1

儘管我同意規範沒有說你不能在GET上擁有Content-Type,但.Net似乎在它的HttpClient中強制執行它。請參閱https://stackoverflow.com/questions/10679214/how-do-you-set-the-content-type-header-for-an-httpclient-request – Adam 2018-02-02 13:55:25

12

接受的答案是錯誤的。引用是正確的,斷言PUT和POST必須有它是不正確的。沒有要求PUT或POST實際上有額外的內容。也沒有禁止GET實際上擁有內容。

RFC正確地說出他們的意思。IFF您的方(客戶端或原始服務器)將發送額外的內容,除了HTTP標頭之外,它應該指定一個Content-Type標頭。但是請注意,可以省略Content-Type並且仍然包含內容(比如使用Content-Length標頭)。