HTTPS请求头有区别吗?家电联网时你该知道的细节

家里新买的智能空调连不上App,老是提示“网络异常”。你检查了Wi-Fi,密码没错,信号也满格,路由器重启了好几遍还是不行。最后发现,问题出在固件升级后开启的HTTPS通信上——设备发出去的请求头跟服务器期待的对不上。

HTTPS本身不改请求头,但环境变了

很多人以为HTTPS和HTTP最大的区别是多了个“S”,所以请求头肯定不一样。其实不然。HTTPS本质上是HTTP over TLS,也就是说,HTTP那一套请求头照样用,只是传输过程被加密了。像HostUser-AgentAccept这些字段,在HTTPS里一个不少。

真正起变化的是外部环境。比如你现在用手机控制家里的智能插座,App发出的请求如果是HTTPS,那请求头里可能会多出一些安全相关的字段,像是Authorization带Token,或者Referer被严格校验。这不是HTTPS协议要求的,而是服务端为了安全主动加的限制。

智能设备常见“头”问题

有些老款扫地机器人,出厂固件只支持HTTP,后来厂商把后台升级成全HTTPS,结果设备发过去的请求没带必要的认证头,服务器直接拒绝。用户看到的就是“无法登录账号”,其实是请求头里缺了个Authorization: Bearer xxx

还有些情况是设备模拟的User-Agent太像爬虫。比如你家的空气净化器上报空气质量数据,请求头写的是Mozilla/5.0 (compatible; Bot),哪怕走的是HTTPS,服务器也可能当成恶意请求拦掉。

实际例子:热水器App连不上

张先生最近发现热水器App打不开,提示“请求无效”。用抓包工具一看,原来App更新后,所有HTTPS请求都必须带上一个叫X-Device-Sign的自定义头,用来验证设备合法性。他家那台三年前买的热水器,固件没升级,根本不知道要加这个字段,于是连接失败。

对比两个请求:

GET /status HTTP/1.1\r\nHost: api.heater.com\r\nUser-Agent: AndroidApp/2.0\r\nAccept: application/json\r\n\r\n

这是旧版,现在必须变成:

GET /status HTTP/1.1\r\nHost: api.heater.com\r\nUser-Agent: AndroidApp/3.0\r\nAccept: application/json\r\nX-Device-Sign: a1b2c3d4e5f6g7h8\r\n\r\n

看着只是多了一行,但少了这行,服务器根本不理你。

别忽视“小头”的大影响

你家的智能电视加载不了视频,可能不是网速慢,而是HTTPS请求里没带正确的Cookie;冰箱的食材提醒功能失灵,也许是固件没更新导致Content-Type写错了。这些看似细枝末节的请求头,在设备联网时就是通行证。

下次遇到家电连不上App,别急着重启路由器,先看看是不是通信协议升级了,请求头还停留在上个版本。