C 假设(单个HTTP消息的)所有HTTP头到达同一个SSL/TLS记录是否合理?
C 假设(单个HTTP消息的)所有HTTP头到达同一个SSL/TLS记录是否合理?,c,http,ssl,https,openssl,C,Http,Ssl,Https,Openssl,openssl的SSL\u read()调用的手册页说明: SSL_read()基于SSL/TLS记录工作。数据以记录形式接收(SSLv3/TLSv1的最大记录大小为16kB)。只有在完全接收到记录后,才能对其进行处理(解密和完整性检查)。因此,在上一次调用SSL_read()时未检索到的数据仍然可以在SSL层内进行缓冲,并将在下一次调用SSL_read()时检索到 鉴于: 单个传出消息的HTTP头始终可以一次性发送 一条SSL/TLS记录显然可以保存16KB的数据,这对每个人(或者至少对任何
openssl
的SSL\u read()
调用的手册页说明:
SSL_read()基于SSL/TLS记录工作。数据以记录形式接收(SSLv3/TLSv1的最大记录大小为16kB)。只有在完全接收到记录后,才能对其进行处理(解密和完整性检查)。因此,在上一次调用SSL_read()时未检索到的数据仍然可以在SSL层内进行缓冲,并将在下一次调用SSL_read()时检索到
鉴于:
- 单个传出消息的HTTP头始终可以一次性发送
- 一条SSL/TLS记录显然可以保存16KB的数据,这对每个人(或者至少对任何非异常HTTP请求)都应该足够了
SSL\u read()
调用填充的单个读取缓冲区解析整个HTTP头集,那就太好了。如果这意味着拒绝少数几个请求(例如,如果只有0.0000X%的请求),那对我来说可能是值得的
编辑:提出了一个有效的观点,即cookies可以非常长。但是,让我们考虑cookie从未被特定服务器设置或期望的场景。
edit2:这个问题有点过早。同时,我还编写了代码,可以高效地存储每个客户机状态,以便在解析时接受任意数量的SSL记录,而不会导致任何严重的性能损失。在这样做之前,我想知道我是否可以走捷径,但普遍的共识似乎是,我最好照本宣科。不,单是饼干就可能远远超过16K 根据,每个域的cookie大小的建议最小限制为80K RFC 2109第6.3节“实施限制”:
- 每个cookie至少4096个字节(根据 在语法中构成cookie非终端的字符 设置Cookie标头的说明)
- 每个唯一主机或域名至少20个cookie
不,单是饼干就可能远远超过16K 根据,每个域的cookie大小的建议最小限制为80K RFC 2109第6.3节“实施限制”:
- 每个cookie至少4096个字节(根据 在语法中构成cookie非终端的字符 设置Cookie标头的说明)
- 每个唯一主机或域名至少20个cookie
你不能做出这样的假设。就像
recv()
可以返回比请求更少的字节一样,SSL\u read()
也可以。缓冲入站数据是您的责任,无论需要多少记录,您都要读取这些数据,然后只有在您完成了预期接收的所有内容后,才处理缓冲后的数据。在收到标头末尾的
序列之前,您不应该处理HTTP标头。您不能这样假设。就像recv()
可以返回比请求更少的字节一样,SSL\u read()
也可以。缓冲入站数据是您的责任,无论需要多少记录,您都要读取这些数据,然后只有在您完成了预期接收的所有内容后,才处理缓冲后的数据。在收到标题末尾的
序列之前,您不应该处理HTTP标题。也许更谨慎的说法是,假设是错误的,但我希望在大多数情况下,对于一般情况,您会得到您想要的行为。我不知道确切的答案,但可以做实验来找出答案
我完全支持黑客无视规则,滥用协议以获取学习、乐趣和利润,但除此之外,我看不到限制自己阅读单个SSL记录的好处。如果你不介意详细说明的话,我很好奇。也许更谨慎的说法是假设是错误的,但我希望在大多数情况下,对于一般情况,你会得到你想要的行为。我不知道确切的答案,但可以做实验来找出答案 我完全支持黑客无视规则,滥用协议以获取学习、乐趣和利润,但除此之外,我看不到限制自己阅读单个SSL记录的好处。如果你不介意详细说明的话,我很好奇 浏览器几乎没有理由将标头划分为多个SSL 唱片,对吗?还是有那么激进的浏览器 至于延迟,他们甚至会切碎这类 将小有效载荷转换为多个记录 可能有一些原因导致将数据拆分为多个记录。其中一个是 您通常不能假设数据不会被分割成多个记录 我这样问是因为能够解析一个完整的 来自单个读取缓冲区的HTTP头集,该缓冲区由单个 SSL_read()调用成功。如果这意味着拒绝少数人(例如,如果 只有0.0000X%的请求),这对我来说可能是值得的 这不仅仅是一个SSL/TLS问题,这也适用于TCP:不将传入数据作为流处理只会导致错误和错误代码 浏览器几乎没有理由将标头划分为多个SSL 唱片,对吗?还是有那么激进的浏览器 至于延迟,他们甚至会切碎这类 小型有效载荷