HTTP标头的结尾

时间:2018-05-21 11:04:17

标签: java sockets http network-programming theory

我正在尝试构建一个程序来识别标题的结尾。现在我知道http标题以Detect end of http get request header (java)中所说的空行结尾,但据我所知,情况并非总是如此。

E.g。在multipart中你有一个带边界的内容类型,在那个边界有一个空格,例如

Reading line: POST /hello:hello HTTP/1.1
Reading line: bla: bla
Reading line: Content-Type: multipart/form-data; boundary=--------------------------276559868742390689469124
Reading line: cache-control: no-cache
Reading line: Postman-Token: be8db757-81f4-49db-9187-30d66d0dd3d5
Reading line: User-Agent: PostmanRuntime/7.1.5
Reading line: Accept: */*
Reading line: Host: localhost:8080
Reading line: accept-encoding: gzip, deflate
Reading line: content-length: 498
Reading line: Connection: keep-alive
Reading line: 
Reading line: ----------------------------276559868742390689469124
Reading line: Content-Disposition: form-data; name=""; filename="TimeComplexity.txt"
Reading line: Content-Type: text/plain

所以显然寻找一个空的空间似乎每次都不起作用。我注意到的是,Content-Type后跟一个空格似乎总是在HTTP头的末尾,这是正确的吗?如果没有,还有哪些其他解决方案?除了提取内容长度并在标题之前提取内容外,似乎......很慢。还可以提一下,我试图在java中解析这个消息,但如果你粘贴任何代码,我也不会想到其他语言中的例子,但是,我试图在理论上理解它,我相信我可以管理它其余的。

提前致谢!

1 个答案:

答案 0 :(得分:2)

HTTP标头可以是任何顺序。每个标题以CRLF结尾,在最后一个标题之后有一个CRLF创建一个空行。这标志着没有更多标题。其余的是HTTP消息体。有关HTTP协议规范,请参阅RFC 2616

您的上一个HTTP标头是Connection标头。以下正文数据(大小为498字节)是multipart/form-data格式的MIME数据。 MIME看起来类似于HTTP,因为它还有标题和正文用空行分隔。但MIME也有分隔MIME数据的不同部分的边界,每个部分都有自己的标题和正文。请参阅RFC 2045 - 20477578和其他与MIME相关的RFC。