内容长度的最大允许长度

3

我在编写ObjectiveC程序。我猜所有OC程序员都在使用发布常用的标准代码:

NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];

目前我收到了一个警告,说不应该使用NSUInteger作为格式参数。警告建议进行类型转换(unsigned long),并将%d替换为%lu。这听起来很合理。

在HTTP定义中,我找不到Content-Length可能实际上有多长的信息。只有相当模糊的Octet。那是8位吗?我找不到答案!

2个回答

7

Content-Length 没有具体的最大值限制。

https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13

14.13 Content-Length
Any Content-Length greater than or equal to zero is a valid value.

此外,苹果公司针对NSMutableURLRequest类的setValue:forHTTPHeaderField:方法的文档还指出:

此外,如果你上传的数据长度可以自动确定(例如,如果你通过NSData对象提供了请求体内容),那么Content-Length的值将被自动设置。


-2

这个rfc很糟糕,因为它说content-length必须是“十进制数”,但它也说它是八位字节的数量(所以它不能是十进制数)。

这取决于你的实现。例如在Java中,最大的content-length是Integer.MAX_VALUE,但是你可以通过直接读取头部来绕过它(HTTP头部是字符串)。

在那里没有真正的HTTP限制。


它说的是“一个八位字节的十进制数”; 有什么不清楚的吗? - Julian Reschke
1
一个十进制数不是整数。因此它不能是字节数。 - Clem
1
“Decimal”数是用十进制系统表示的数字。 - Julian Reschke
据说这也可以用数字表示。数字的位数是自然数。http://upload.wikimedia.org/wikipedia/commons/0/07/NumberSetinR.svg - Clem
1
“Number of octets” 的定义是一个整数。此外,ABNF 不允许使用除 0..9 以外的任何字符。 - Julian Reschke
在这个上下文中,“十进制数”意味着以10为基数。与此相比,HTTP分块编码使用十六进制数(以16为基数)。 - MSalters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接