带有空值标​​题的Java HttpServletResponse?

时间:2011-06-24 15:02:54

标签: java grails http-headers httpserver servlets

如何使用空值响应标头使基于java的应用程序服务器回复,如下所示?

content-length:\r\n

不幸的是,当我打电话

response.setHeader("Content-Length", len)

其中len是空字符串或null,响应将不包括标题。

我已经检查了HttpServletResponse和HttpServletResponseWrapper javadocs,但无法弄清楚可以覆盖什么来提供我的自定义行为。

背景

我正在构建一个应该模拟表现不佳的HTTP服务器场景的测试应用程序。该应用程序应该回复具有预设页面和HTTP标头的请求,包括上述情况下的格式错误。 该应用程序是用grails编写的。

3 个答案:

答案 0 :(得分:1)

您可以使用Firefox扩展程序尝试SoapUIFiddler等工具。我没有尝试过用它们设置一个格式错误的标题,但如果可以,我不会感到惊讶。

答案 1 :(得分:1)

  

我正在构建一个应该模拟表现不佳的HTTP服务器场景的测试应用程序。

在这种情况下,试图让一个表现良好的服务器模仿这种行为是一个坏主意。如果您需要模拟错误的服务器或您希望测试的特定场景集,那么您可以执行以下操作之一:

  • 编写一个自定义应用程序,该应用程序侦听将使用格式错误的HTTP标头响应的特定端口(使用ServerSocket类)。使用HTTP库可能没有帮助,因为库可能有代码来检测错误的条件并自动更正它们。
  • 使用能够拦截响应的HTTP代理,并允许修改这些响应。如果你是谷歌的“http调试代理”,你会发现几个,但如果你没有听说过,我建议你看看FiddlerWebScarabBurp

答案 2 :(得分:0)

对我来说不太清楚:你的应用程序是用Grails编写的,但是你正在讨论javadocs ......好吧,我想你试着在JAVA中创建一个糟糕的服务器......

正如您所说,回答“Content-Length:\ r \ n”对于HTTP来说是不合法的。您必须输入整数值或丢弃标题。我认为setHeader()可以帮助您避免产生非法的HTTP消息。

您可以通过这种方式手动创建标题(您可以直接写入套接字而不使用setHeader块)。

其他解决方案是使用您自己的HttpServletResponse实现创建一个过滤器(除了您的servlet)。您将把此实现传递给servlet。