原始HTTP服务器:发送图像问题

时间:2018-11-27 14:14:44

标签: c http http-headers iot

我正在使用某种IoT设备。最终,我有一个简单的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图像,但没有运气。我确定图片发送正确。

2 个答案:

答案 0 :(得分:0)

请求正在请求$arr = array_merge($arr, daysinyears($d1, date_create(date('d-m-Y',strtotime('31-12-'.$year_prec)))));

png

为什么不返回正确的内容类型;

GET /img.png HTTP/1.1\r\n

答案 1 :(得分:0)

我做的完全一样-用于物联网的原始http服务器,您的回答看起来绝对正确。尝试检查以下内容:

  • 在关闭插座之前,请先正确冲洗它。如果您在send()之后立即调用close(),则可能会遇到此问题-数据未正确写入

  • 内容长度应该恰好是文件的大小。确保您没有计算http响应的\ r \ n个字节。浏览器可能仍在等待尾部字节

  • 最后,获取浏览器网络日志:)