缓冲读取器HTTP POST

Hug*_*ugh 3 java post http hang bufferedreader

寻求一些帮助,我目前编写了一个HTTP服务器.它目前正在处理GET请求.然而,在使用POST时,缓冲的阅读器似乎挂了.当请求停止时,通过缓冲读取器读取其余输入流.我在谷歌上发现了一些东西.我已经尝试将CRLF和协议版本从1.1更改为1.0(浏览器自动发出请求为1.1)任何想法或帮助将不胜感激.谢谢

kar*_*rts 8

我同意汉斯的意见,你应该使用一个经过良好测试的标准库来完成这项工作.但是,如果您正在编写服务器以了解HTTP,请参阅以下有关执行您想要执行的操作的信息.

你真的不能使用BufferedReader,因为它缓冲了输入并可能从套接字读取太多字节.这就是你的代码挂起的原因,BufferedReader试图读取比套接字上可用的更多的字节(因为POST数据没有行结束),并且它正在等待更多的字节(永远不可用) .

简单地解析POST请求的过程是直接使用InputStream

  • 对于标题中的每一行,一次读取一个字节,直到得到'\n',然后是'\n'

  • 查找以"Content-Length:"开头的行,提取该行末尾的数字.

  • 当你得到一个空的标题行时,你就完成了标题.

  • 现在准确读取Content-Length标头中的#字节数.

现在你可以写下你的回复.