Необработанный http-сервер: отправка изображения - PullRequest
0 голосов
/ 27 ноября 2018

Я работаю с устройством 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).Я попробовал изображение JPEG под Content-Type: image/jpeg без удачи.Я уверен, что изображение отправлено правильно.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Я сделал точно так же - необработанный http-сервер для IoT, и ваш ответ выглядит абсолютно правильно.Попробуйте проверить следующее:

  • Вы правильно промойте розетку перед тем, как закрыть ее.Если вы позвоните close() сразу после send (), вы, скорее всего, столкнетесь с этой проблемой - данные записаны неправильно

  • Длина содержимого должна точно соответствовать размеру вашего файла.Убедитесь, что вы не учитываете \ r \ n байтов ответа HTTP.Браузер может все еще ждать хвостовых байтов

  • Наконец, получите журналы сети браузера:)

0 голосов
/ 27 ноября 2018

Запрос запрашивает png

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

Почему бы не вернуть правильный тип контента;

Content-Type: image/png\r\n
...