[英]How to read response from web-service with Invalid Content-Type using Spring-ws client?
[英]REST Web Service: Acceptable HTTP response content-type when responding with status 4XX (Client Error)
我一直無法在HTTP規范中找到任何文檔來管理生成HTTP響應是否可接受包括人類可讀的錯誤消息(例如content-type:text / plain),如果HTTP客戶端發出了無效的HTTP請求,並指定了一個請求標頭,使用accept標頭限制可接受的響應內容類型。
想象一下,一個REST Web服務客戶端向“http:// myhost / validpath?illegalRequestParameter = rubbish”發出無效的GET請求,並包含一個請求標題“Accept:application / xml”或“Accept:application / vnd.ms-excel” 。
服務器將使用4XX系列中的HTTP狀態代碼進行響應(在本例中為“400 Bad Request”)。 但是,該服務如何能夠向客戶傳達有關錯誤原因的信息?
我看到以下選項:
在HTTP響應內容中創建純文本錯誤消息。 設置響應標頭“Content-type:text / plain”,並在響應內容中包含描述性錯誤消息。 但是,這會破壞HTTP客戶端的“接受”限制。
不要包含HTTP響應內容。 這顯然是有效的,但對於只知道發生“客戶端錯誤”但無法知道原因(並在客戶端日志文件中報告原因)的客戶端來說,這不是很有用。
嘗試將錯誤消息強制轉換為“可接受”的MIME類型。 這很難實現。 即使錯誤消息可以構造為有效的application / xml類型,它也可能會破壞Web服務契約(例如XML Schema一致性)。
我的問題是:上述情況是否受現有HTTP規范/標准的約束?
參考文獻:
如果accept標頭是'application / xml',那么您應該將錯誤消息作為xml返回。 它會破壞客戶端,但無關緊要,客戶端無法獲取他們請求的信息。 至少客戶端能夠解析錯誤消息......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.