【问题标题】:Tomcat probably sending GET request which I am unable to handleTomcat 可能发送我无法处理的 GET 请求
【发布时间】:2012-06-30 07:08:54
【问题描述】:

我的客户端在 Tomcat 服务器上运行,我无权访问客户端代码。所以我必须建立这个服务器来处理来自客户端的请求。为此,我正在端口上读取字节流,如下所示:

ServerSocket ss = new ServerSocket(8999);
Socket s = ss.accept();
InputStreamReader in = new InputStreamReader(s.getInputStream());

cbuf = new char[buf_length];
int char_read = in.read(cbuf,0,10000);

inputLine = new String(cbuf);

我应该从客户端获取 SOAP POST 请求,我可以处理这些请求,但在这些客户端请求之间,我收到如下所示的 GET 请求:

GET / HTTP/1.1
User-Agent: Java/1.6.0_21
Host: localhost:8999
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

所以用户代理不是客户端(它可能是 Tomcat),它接受一切。所以我的服务器代码无法处理这个。所以我尝试关闭套接字,重新打开并尝试读取,但它再次读取相同的 GET 请求。

我是否需要为此请求发送特定响应以继续我的程序,以便客户端能够向我发送下一个请求?

谢谢

【问题讨论】:

  • 为什么不使用现有的 Web 服务器作为解决方案的基础?它们以多种形状和形式存在。现在,您正在为一些非常基本的事情浪费时间和精力,并且在此过程中还会有更多这样的陷阱。顺便说一句,他想要默认文档,所以它可能只是某种活着的测试。返回一个空文档,您应该可以继续。
  • Tomcat 接收请求,但不会发出请求。不是 Tomcat 本身发出请求。

标签: java tomcat


【解决方案1】:

如果你的意思是问题在于你不能用Accept 标头中列出的任何类型进行响应,那么正确的 HTTP 响应代码是 406。你用这个状态代码构造一个 HTTP 响应,发送它,然后关闭。

但是,你的意思是你不能处理它?因为请求说它会接受任何东西!

至于客户端将如何响应 406,这取决于客户端。如果它想重试,它将重试,尽管它不应该响应具有相同 Accept 标头的 406。

您甚至不清楚向您发出请求的是什么(不是 Tomcat)——这肯定是您的大部分问题,对吧?弄清楚。然后你可以弄清楚你应该做什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多