java - HTTP 标头结束
问题描述
我正在尝试构建一个程序来识别标题的结尾。现在我知道 http 标头以空行结尾,如Detect end of http get request header (java)中所述,但是,据我了解,情况并非总是如此。
例如,在多部分中,您有一个带有边界的内容类型,并且在该边界中有一个空白空间,例如
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 中解析消息,但是如果您粘贴任何代码,我不介意其他语言的示例,但是,我试图从理论上理解它,我相信我可以管理其余的。
提前致谢!
解决方案
HTTP 标头可以按任何顺序排列。每个标题都以 CRLF 结尾,在最后一个标题之后有一个 CRLF 创建一个空行。这表明没有更多的标题。其余的是 HTTP 消息体。有关 HTTP 协议规范,请参阅RFC 2616。
您的最后一个 HTTP 标头是Connection
标头。下面的正文数据(大小为 498 字节)是multipart/form-data
格式的 MIME 数据。MIME 看起来类似于 HTTP,因为它也有由空行分隔的标头和正文。但 MIME 也有分隔 MIME 数据不同部分的边界,每个部分都有自己的标题和正文。请参阅 RFC 2045 - 2047、7578和其他与MIME 相关的 RFC。
推荐阅读
- android - 如何更改地图的“地点自动完成”搜索的字体系列?
- html - 在 3party 页面中集成 JSF 页面
- java - AsyncTask 在后台方法中执行 try/catch 都被执行
- flutter - crossAxisAlignment.stretch 使一切不可见
- android - 如何从android中的选择器对话框更改项目的文本颜色?
- python - 解释相机校准结果?
- c - 在 C99 中的函数之间共享变量
- unit-testing - CakePHP 3 - 在集成测试中模拟 HTTP\Client()
- python - 如何使用训练有素的分类器预测新数据集
- php - Wordpress 库函数在 echo 执行时不返回任何内容