【发布时间】:2019-04-29 07:27:44
【问题描述】:
我正在使用一种物联网设备。最后,我有一个简单的 httpd 服务器可以工作,简单的 html 页面就像一个魅力,但浏览器无法识别图像。我认为这是 http 标头问题,但我不知道是什么问题。
例如,我的测试页面如下所示:
<html>
<head><title>test page</title></head>
<body>
hello world!
<img src="img.png">
</body>
</html>
如果我去http://de.vi.ce.ip/ 会生成 2 个请求:
GET / HTTP/1.1\r\n
Accept text/html, application/xhtml+xml, */*\r\n
Accept-Language: en-EN\r\n
...
GET /img.png HTTP/1.1\r\n
Accept image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5\r\n
Accept-Language: en-EN\r\n
...
为了让我的服务器响应:
HTTP/1.0 200 OK\r\n
Content-Type: text/html\r\n
Content-Length: 131\r\n
\r\n
<page data>
HTTP/1.0 200 OK\r\n
Content-Type: image/png\r\n
Content-Length: 5627\r\n
\r\n
<image binary data>
结果我可以看到文字,但图像已损坏。
我尝试了更多参数,例如Connection: close, Accept-Ranges: bytes, Content-Location (path)。
我在Content-Type: image/jpeg 下尝试了 jpeg 图像,但没有成功。我确定图片发送正确。
【问题讨论】:
-
您必须发送正确的
Content-Type。即图像/JPEG -
@Holger 我做到了。我的问题是错字,对不起。就我而言,它是 image/png。
-
我认为您从文件中读取了 png。您是否以二进制模式打开文件?
-
@Holger 是的。在将其发送到 tcp 之前,我已经检查了输出缓冲区,它是正确的。二进制内容看起来应该如此。
标签: c http http-headers iot