Ios HTTP状态代码411-需要长度
我尝试从服务器获取数据。我使用NSURLConnectionLegate、NSURLConnectionDataDelegate。有代码(目标-C) 当我使用Ios HTTP状态代码411-需要长度,ios,objective-c,nsurlconnection,nsurlrequest,http-status-code-411,Ios,Objective C,Nsurlconnection,Nsurlrequest,Http Status Code 411,我尝试从服务器获取数据。我使用NSURLConnectionLegate、NSURLConnectionDataDelegate。有代码(目标-C) 当我使用 [request setHTTPBodyStream:stream]; [request setHTTPBody:reqData]; 我试过了 [request setHTTPBodyStream:stream]; NSString *postLength = [NSString stringWithFormat:@"%d", [re
[request setHTTPBodyStream:stream];
[request setHTTPBody:reqData];
我试过了
[request setHTTPBodyStream:stream];
NSString *postLength = [NSString stringWithFormat:@"%d", [reqData length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
但还是“HASH(someAdddress)”
我做错了什么?
对不起我的英语。谢谢:)
我做错了什么
没什么
无论出于何种原因,当服务器拒绝接受没有内容长度头的消息时,HTTP状态代码411(需要长度)作为响应发送
服务器可能只接受也可能不接受没有内容长度头的内容
当您通过属性为请求设置NSInputStream
对象作为请求正文时,NSURLConnection
无法再计算正文本身的长度。(流没有属性length
)。因此,NSURLConnection
使用某种“传输模式”,即“分块传输编码”。此传输模式应能成功传输任何正文,且不需要Content Legth标头(实际上不得包含标头)。唉,服务器根本不接受这种类型的传输
另见:(维基)
要解决客户端的问题,请执行以下操作:
- 自己确定正文的长度(如果可能的话),并为请求设置“contentlength”头字段。如果此输入流是从文件或
对象创建的,则可以轻松确定长度。但一定要设置与实际流内容完全相同的长度(以字节为单位)NSData
- 不要使用
,而是使用NSInputStream
对象作为主体,并通过属性NSData
进行设置。将正文设置为HTTPBody
对象时,NSData
可以确定内容长度本身,它将自动添加长度正确的内容长度标题,除非您在请求中自行设置NSURLConnection
POST
时遇到了同样的错误,而我本应该做GET
[request setHTTPBodyStream:stream];
NSString *postLength = [NSString stringWithFormat:@"%d", [reqData length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];