2011-05-05 87 views
2

想象一下,您已經在頁面上獲得了一個表單,並且可以用AJAX的方式將該表單的數據發佈到服務器上。 jQuery.post()。服務器判斷數據無效,因爲電子郵件地址不包含'@'符號。是否可以在非HTTP-200響應中返回HTML標記?

我認爲HTTP的精神說服務器應該返回一個「HTTP 400錯誤請求」狀態碼與它的響應,以向客戶端表明它不能處理請求。 原因(數據未驗證)應在響應的正文中。

但我正在一個傳統上實現「部分視圖」的ASP.NET MVC環境中 - HTML片段作爲響應發送,意味着當從AJAX請求收到時代入客戶端的DOM。在這種模式下,服務器通常會構建表單的替代版本,填充(無效)提交的值,並用紅色突出顯示和警告來指示電子郵件地址無效並應予以糾正。客戶端將該表單替換爲其DOM,並且用戶看到問題。

這是MVC世界中足夠普遍的模式,但我沒有看到有人照顧設置適當的HTTP狀態代碼。我無法弄清楚爲什麼。

是否可以在非HTTP-200響應中包含HTML標記以便客戶端可以顯示驗證?我找不到任何表示不是的東西。

+0

「*我不明白爲什麼。*」只想對此發表評論:出於同樣的原因,有時候所有的錯誤狀態代碼都映射到狀態代碼'200'作爲一般安全問題的一部分你不希望攻擊者看到堆棧跟蹤,有時你也不希望你的錯誤代碼傳達,如果請求破壞或內部服務器錯誤破壞它,或任何'詳細'。 (續) – pinkgothic 2011-05-25 09:48:07

+0

因此,您將允許範圍外的所有內容全部映射到'200'。 '200'常常被挑選出來的原因有兩個:(1)因爲選擇一個可以用作'4xx' /'5xx'的覆蓋包裝的錯誤代碼並不是很簡單; (2)因爲它強制自動攻擊工具分析郵件正文以查看它們是否觸及了某些內容。 (續) – pinkgothic 2011-05-25 09:48:20

+0

當然,這是安全的,但我相當普遍,據我所知。所以也許這就是人們的「動機」。雖然(狀態碼映射通常在網絡服務器級別完成,所以應用程序本身可以發送任何想要的內容),但他們也可能不會考慮它。 – pinkgothic 2011-05-25 09:48:47

回答

0

如果您知道可以解析響應,請發送包含正確MIME類型和信息的json/xml文檔。否則只發送一個人類可讀的HTML內容。在這兩種情況下,顯然都要設置正確的HTTP狀態碼。

1

取決於正在返回的狀態代碼以及您打算如何使用它,但通常您可以。

相關問題