想象一下,您已经在页面上获得了一个表单,并且可以用AJAX的方式将该表单的数据发布到服务器上。 jQuery.post()。服务器判断数据无效,因为电子邮件地址不包含'@'符号。是否可以在非HTTP-200响应中返回HTML标记?
我认为HTTP的精神说服务器应该返回一个“HTTP 400错误请求”状态码与它的响应,以向客户端表明它不能处理请求。 原因(数据未验证)应在响应的正文中。
但我正在一个传统上实现“部分视图”的ASP.NET MVC环境中 - HTML片段作为响应发送,意味着当从AJAX请求收到时代入客户端的DOM。在这种模式下,服务器通常会构建表单的替代版本,填充(无效)提交的值,并用红色突出显示和警告来指示电子邮件地址无效并应予以纠正。客户端将该表单替换为其DOM,并且用户看到问题。
这是MVC世界中足够普遍的模式,但我没有看到有人照顾设置适当的HTTP状态代码。我无法弄清楚为什么。
是否可以在非HTTP-200响应中包含HTML标记以便客户端可以显示验证?我找不到任何表示不是的东西。
+0
“*我不明白为什么。*”只想对此发表评论:出于同样的原因,有时候所有的错误状态代码都映射到状态代码'200'作为一般安全问题的一部分你不希望攻击者看到堆栈跟踪,有时你也不希望你的错误代码传达,如果请求破坏或内部服务器错误破坏它,或任何'详细'。 (续) –
2011-05-25 09:48:07
+0
因此,您将允许范围外的所有内容全部映射到'200'。 '200'常常被挑选出来的原因有两个:(1)因为选择一个可以用作'4xx' /'5xx'的覆盖包装的错误代码并不是很简单; (2)因为它强制自动攻击工具分析邮件正文以查看它们是否触及了某些内容。 (续) –
2011-05-25 09:48:20
+0
当然,这是安全的,但我相当普遍,据我所知。所以也许这就是人们的“动机”。虽然(状态码映射通常在网络服务器级别完成,所以应用程序本身可以发送任何想要的内容),但他们也可能不会考虑它。 –
2011-05-25 09:48:47