我正在为我的嵌入式项目实现最低HTTPS层,我正在使用mbedTLS for TLS并使用硬编码HTTP标头与HTTPS服务器进行通信。
它适用于普通网站。但到目前为止,我的实现通过检查读取的最后一个字节是否为\n
来检测HTTPS响应的结束。
if( ret > 0 && output[len-1] == '\n' )
{
ret = 0;
output[len] = 0;
break;
}
但是,这并不总是有明显的原因。我尝试openssl s_client
,它的行为相同 - 如果HTTP响应以\n
终止,则s_client
在获取所有数据后立即返回。否则它会永远阻塞,等待更多数据。
真正的浏览器似乎能够正确处理这个问题。除了设置超时之外,还有什么可以做的吗?
答案 0 :(得分:0)
如何判断HTTP响应是否在C ...中终止 但到目前为止,我的实现通过检查读取的最后一个字节是否为
\n
...来检测HTTPS响应的结束 然而,这并不总是有明显的原因......
HTTP呼叫\r\n
,不呼叫 \n
。请参阅RFC 2616, Hypertext Transfer Protocol - HTTP/1.1和第15页:
HTTP / 1.1将序列CR LF定义为所有的行尾标记 除实体主体外的协议要素(见附录19.3) 宽容的申请)。实体主体内的行尾标记 由相关的媒体类型定义,如3.7节所述。
CRLF = CR LF
现在,各种服务器发送的是一个完全不同的球赛。将存在重复的行尾标记,缺少行尾标记和不正确的行尾标记。它是狂野的西部。