HTTP (HyperText Transfer Protocol) 是一种应用层协议用于在Web上传输超文本和其他数据。核心特点 -无状态每个请求独立服务器不保存客户端状态 -请求/响应模型客户端发送请求服务器返回响应 -文本协议使用可读的文本格式 -基于TCP运行在TCP协议之上默认端口80 -灵活扩展支持多种内容类型和编码设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法通过 HTTP 或者 HTTPS 协议请求的资源由统一资源标识符Uniform Resource IdentifiersURI来标识。HTTP 的请求-响应HTTP 的基本工作原理是客户端通常是 web 浏览器向服务器发送请求服务器接收到请求后返回相应的资源。这些资源可以是网页、图像、音频文件、视频等。HTTP 使用了客户端-服务器模型其中客户端发送请求服务器返回响应。HTTP 的请求-响应模型通常由以下几个步骤组成建立连接客户端与服务器之间建立连接。在传统的 HTTP 中这是基于 TCP/IP 协议的。最近的 HTTP/2 和 HTTP/3 则使用了更先进的传输层协议例如基于 TCP 的二进制协议HTTP/2或基于 UDP 的 QUIC 协议HTTP/3。发送请求客户端向服务器发送请求请求中包含要访问的资源的 URL、请求方法GET、POST、PUT、DELETE 等、请求头例如Accept、User-Agent以及可选的请求体对于 POST 或 PUT 请求。处理请求服务器接收到请求后根据请求中的信息找到相应的资源执行相应的处理操作。这可能涉及从数据库中检索数据、生成动态内容或者简单地返回静态文件。发送响应服务器将处理后的结果封装在响应中并将其发送回客户端。响应包含状态码用于指示请求的成功或失败、响应头例如Content-Type、Content-Length以及可选的响应体例如HTML 页面、图像数据。关闭连接在完成请求-响应周期后客户端和服务器之间的连接可以被关闭除非使用了持久连接如 HTTP/1.1 中的 keep-alive。HTTP请求方法HTTP状态码状态码分为五类1xx信息性状态码表示接收的请求正在处理。2xx成功状态码表示请求正常处理完毕。3xx重定向状态码需要后续操作才能完成这一请求。4xx客户端错误状态码表示请求包含语法错误或无法完成。5xx服务器错误状态码服务器在处理请求的过程中发生了错误。HTTPS vs HTTPHTTPS (HTTP Secure)是HTTP的安全版本使用TLS/SSL加密通信RESTful APIREST (Representational State Transfer) 是一种Web服务架构风格核心原则 -资源导向一切皆资源使用URL标识 -统一接口使用标准HTTP方法操作资源 -无状态每个请求包含完整信息 -可缓存响应可被缓存提高性能URL设计示例GET /api/sensors # 获取所有传感器列表 GET /api/sensors/1 # 获取ID为1的传感器 POST /api/sensors # 创建新传感器 PUT /api/sensors/1 # 更新ID为1的传感器 DELETE /api/sensors/1 # 删除ID为1的传感器HTTP 消息结构HTTP 是基于客户端/服务端C/S的架构模型通过一个可靠的链接来交换信息是一个无状态的请求/响应协议。HTTP 消息是客户端和服务器之间通信的基础它们由一系列的文本行组成遵循特定的格式和结构。HTTP消息分为两种类型请求消息和响应消息。问题1HTTP请求超时可能原因- 网络连接不稳定 - 服务器响应慢 - DNS解析失败(找不到要访问的网站) - 防火墙阻止解决方法// 设置超时时间 http.setTimeout(15000); // 15秒 // 检查DNS解析“查电话簿”动作 IPAddress serverIP; if (WiFi.hostByName(api.example.com, serverIP)) { Serial.print(服务器IP: ); Serial.println(serverIP); } /*拿着一个“网址域名”跑去问路由器/DNS服务器“这个网址对应的真实IP地址是多少”如果问到了就把IP打印出来如果没问到说明网络或DNS出问题了。*/问题2JSON解析失败可能原因 - JSON格式错误 - 内存不足 - 响应被截断解决方法// 增加JSON文档容量 DynamicJsonDocument doc(2048); // 增加到2KB // 检查解析错误 DeserializationError error deserializeJson(doc, payload); if (error) { Serial.print(解析失败: ); Serial.println(error.c_str()); Serial.println(原始数据:); Serial.println(payload); }问题3HTTPS证书验证失败可能原因 - 证书过期 - 证书不匹配 - 时间不同步 - 根证书错误解决方法// 1. 同步时间HTTPS需要正确的时间 configTime(0, 0, pool.ntp.org, time.nist.gov); // 2. 使用正确的根证书 // 从浏览器导出或使用openssl获取 // 3. 临时跳过验证仅测试 client.setInsecure();问题4Web服务器无响应可能原因 - 未调用server.handleClient()- 路由配置错误 - 端口被占用 - 防火墙阻止解决方法void loop() { server.handleClient(); // 必须在loop中调用 delay(2); // 给系统一些时间处理 } // 检查服务器状态 Serial.print(服务器运行在: http://); Serial.print(WiFi.localIP()); Serial.println(:80);参考HTTP 教程 | 菜鸟教程
阅读完成 · 觉得有帮助?