【问题标题】:minimum http server reply最小 http 服务器回复
【发布时间】:2022-02-10 19:55:33
【问题描述】:

我正在尝试使用 AVR + ESP8266 构建一个 http 服务器。

我可以通过 telnet 来回发送命令,但现在我想实现一个 Web 界面

作为起点,我试图建立一个输出“文本”的网站 但是,浏览器显示一个空白页面。有人可以告诉我将页面解释为 html 的最低要求吗?

远程登录 192.168.2.26 81 正在尝试 192.168.2.26... 连接到 192.168.2.26。 转义字符是'^]'。

GET / HTTP/1.1

AVR 答案如下

HTTP/1.1 200 OK
Content-Type: text/html
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>Zeitschaltuhr</title></head>
<body>
Text
</body></html>
Connection closed by foreign host.

【问题讨论】:

  • 在浏览器中查看页面源代码时看到了什么? (ctrl-u)
  • 空白页,只有第一行前面有一个“1”
  • 问题不在于您的 HTML 语法。如果您只是返回没有任何 HTML 标记的“文本”,浏览器会显示它。问题是您的浏览器什么也没有收到。
  • 这有点奇怪,因为它在同一个机器上工作,使用 telnet。顺便说一句:如果我从回复中删除第一行,则会显示 html,但不会解释
  • 您的网络服务器正在监听哪个端口?你在浏览器中放了什么网址?

标签: http webserver


【解决方案1】:

最小的http回答:

HTTP/1.1 404 
Content-Length: 0

最少的文字答案:

HTTP/1.1 200 OK
Content-Length: 13
Content-Type: text/plain; charset=utf-8

Hello World!

它对您不起作用的原因是您忘记了 Content-Length: 标头

【讨论】:

  • 实际上,如果您使用程序并且可以控制终止连接并且您通过chrome浏览器客户端进行连接,则不需要指定长度。通常,在连接 chrome 浏览器时,您也不需要指定 Content-Type,尽管同时指定两者可能是一种好习惯。
  • 是的@yosefrow 添加它是为了浏览器兼容性的好习惯
  • 为什么长度是 13 而不是 12?到底有没有换行?
【解决方案2】:

您的 HTTP 响应缺少响应标头字段和消息正文之间的空行(如 here 所述):

HTTP/1.1 200 OK
Content-Type: text/html

<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>Zeitschaltuhr</title></head>
<body>
Text
</body></html>

【讨论】:

  • 而您的缺少 Content-Length: 标头:P
【解决方案3】:

重要的是在内容之前提供两次 CR,LF。

HTTP/1.1 200 OK\r\nContent-Length: 13\r\nContent-Type: text/html\r\n\r\nHello World!

【讨论】:

    猜你喜欢
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多