【问题标题】:NSURLRequest HTTPBody truncated on server sideNSURLRequest HTTPBody 在服务器端被截断
【发布时间】:2016-09-20 15:21:35
【问题描述】:

通过互联网发送NSData。发送数据长度为 8278 字节。但是接收到的数据只有8029字节。你知道为什么服务器接收到的数据会被截断吗?数据大小是否有任何 HTTP / TCP 限制?还是node.js 的限制?

let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
let path = (documentsPath.stringByAppendingPathComponent("Assets") as NSString).stringByAppendingPathComponent("\(upsert.recordName).\(field2.key)")

let url: NSURL = NSURL(string: "xxx")!
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.setValue("image/jpg", forHTTPHeaderField: "content-type")
request.setValue("\(upsert.recordName).\(field.key)", forHTTPHeaderField: "filename")
request.HTTPBody = NSData(contentsOfFile: path)

NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration()).dataTaskWithRequest(request, completionHandler: {data, urlResponse, error in }).resume()

【问题讨论】:

  • 服务器接收到的图像,是否仍然是有效的图像——即图像未损坏?
  • 如果令人惊讶地证明图像仍然有效,您可能会发现这很有趣:svn.tools.ietf.org/svn/wg/httpbis/specs/…
  • 你是对的,中间节点减小了大小,但是数据,内容不是json,而是png 我猜是导致问题的原因。

标签: ios node.js http tcp nsurlrequest


【解决方案1】:

通过删除

request.setValue("image/jpg", forHTTPHeaderField: "content-type")

行会阻止减少和转换内容。

【讨论】:

  • 您应该始终根据实际数据类型设置内容类型标头。如果您想阻止 transforming proxy 更改内容类型,您可以在请求中设置缓存控制指令,例如添加标题:Cache-Control: no-transform。但是,这可能是有代价的,因为代理可能会因为优化性能和缓存而选择这样做。
  • Cache-Control: no-transform 在我的情况下无效
  • @CouchDeveloper 你刚刚修复了我花了 3 个小时调试该评论的问题。请将其添加为答案,以便我投票!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
相关资源
最近更新 更多