HTTP/1.1服务器应如何处理含空值Content-Length的请求?
终端服务器如何处理空值Content-Length的HTTP请求?
首先看RFC 9110对Content-Length的ABNF定义:
Content-Length = 1*DIGIT
即值必须是1个或多个ASCII数字。
RFC 9110同时规定:
发送者不得转发Content-Length头字段值不符合上述ABNF规则的消息,仅有一种例外情况:若接收方收到的Content-Length头字段值为重复的十进制值以逗号分隔的列表(例如"Content-Length: 42, 42"),则可选择将消息视为无效予以拒绝,或将该无效字段值替换为单个十进制值,因为这通常表明上游消息处理器产生或合并了重复值。
基于此,代理收到如下请求时,不应原样转发带该Content-Length头的请求:
GET / HTTP/1.1 Host: whatever Content-Length:
那么终端服务器遇到这类请求时,到底该直接拒绝,还是接受并做特定解读?
我对HTTP生态系统就该问题做了广泛调研,发现各实现方案差异很大,希望了解支持接受与拒绝两种处理方式的依据。
编辑补充:
RFC 9112还有相关规定:
当仅监听HTTP请求消息的服务器,或处理看似为HTTP请求消息的起始行时,收到不符合HTTP消息语法(上述健壮性例外情况除外)的字节序列,服务器应返回400(Bad Request)响应并关闭连接。
这一表述似乎弱化了ABNF的严格约束,为接受空值Content-Length提供了依据,但如果语法匹配只是软性要求,那HTTP标准存在的意义又是什么?
内容的提问来源于stack exchange,提问作者kenballus
相关产品推荐
相关产品推荐

