如何判断HTTP响应是否在C中终止

如何判断HTTP响应是否在C中终止,http,browser,https,mbed,Http,Browser,Https,Mbed,我正在为我的嵌入式项目实现一个最小的HTTPS层,在这个层中,我使用和硬编码HTTP头与HTTPS服务器进行通信 它适用于普通网站。但到目前为止,我的实现通过检查最后读取的字节是否为\n来检测HTTPS响应的结束 if( ret > 0 && output[len-1] == '\n' ) { ret = 0; output[len] = 0; break; } 然而,出于显而易见的原因,这并不总是有效的。我尝试了openssl s_客户端,其行为

我正在为我的嵌入式项目实现一个最小的HTTPS层,在这个层中,我使用和硬编码HTTP头与HTTPS服务器进行通信

它适用于普通网站。但到目前为止,我的实现通过检查最后读取的字节是否为
\n
来检测HTTPS响应的结束

if( ret > 0 && output[len-1] == '\n' )
{
    ret = 0;
    output[len] = 0;
    break;
}
然而,出于显而易见的原因,这并不总是有效的。我尝试了
openssl s_客户端
,其行为与此相同-如果HTTP响应以
\n
终止,则
s_客户端
在获取所有数据后立即返回。否则它将永远阻塞,等待更多数据

一个真正的浏览器似乎能够正确处理这个问题。除了设置超时,我还能做什么

如何判断HTTP响应是否终止于C
但到目前为止,我的实现通过检查最后读取的字节是否为
\n

然而,由于明显的原因,这并不总是有效的

HTTP调用
\r\n
,而不是
\n
。见和第15页:

HTTP/1.1将序列CR LF定义为所有 除实体实体之外的协议要素(参见附录19.3 容错应用程序)。图元主体内的线端点标记 如第3.7节所述,由其相关媒体类型定义

CRLF=CRLF

现在,不同的服务器发送的是一个完全不同的游戏。将存在重复的行尾标记、缺失的行尾标记和不正确的行尾标记。这是狂野的西部

您可能希望查看HTTP解析器的参考实现。如果是这样,请检查or的解析器以及它们如何维护其状态机

如何判断HTTP响应是否终止于C
但到目前为止,我的实现通过检查最后读取的字节是否为
\n

然而,由于明显的原因,这并不总是有效的

HTTP调用
\r\n
,而不是
\n
。见和第15页:

HTTP/1.1将序列CR LF定义为所有 除实体实体之外的协议要素(参见附录19.3 容错应用程序)。图元主体内的线端点标记 如第3.7节所述,由其相关媒体类型定义

CRLF=CRLF

现在,不同的服务器发送的是一个完全不同的游戏。将存在重复的行尾标记、缺失的行尾标记和不正确的行尾标记。这是狂野的西部

您可能希望查看HTTP解析器的参考实现。如果是这样,请检查or的解析器以及它们如何维护其状态机