我在GAE托管的应用中调用了一个servlet。我遇到的问题是我的请求网址大于 2048 字符,而我收到 400 Bad Request 错误。虽然我们提到here我们可以使用 10MB 的数据发出请求。那么我们如何发送10MB数据的请求呢?我目前正在使用免费配额。很久以前就问了类似的question,但还没有回答。
答案 0 :(得分:1)
在请求中发送兆字节的数据宁愿保证POST or PUT作为请求方法。通过这种方式,您可以发送总计高达10兆字节的请求,如您在引用文章中所注意到的那样。
您在urlfetch errors模块API文档中获得400错误的原因是outlined;允许的最大URL长度为2048个字符。
目前有一个feature request来增加这个长度;虽然这不太可能在不久的将来改变。你可以成为明星'在评论中获得进一步更新和/或提供用例的问题。
答案 1 :(得分:1)
除了AppEngine限制之外,在URL中放入10MB数据没有多大意义。
当您查看HTTP协议时,GET
- 请求看起来像这样
GET /path/to/resource?possibleParam=value HTTP/1.1
Host: www.example.com
POST
- 这样的请求
POST /path/to/resource?possibleParam=value HTTP/1.1
Host: www.example.com
Content-Type: */*; charset=utf-8
Content-Length: 4242
here come the actual data with a length of 4242 bytes
因此,如果您在GET
请求的URI中允许大量数据,则意味着服务器不知道必须分配多少内存才能接收整个uri。因此,为了获得更好的性能,我们很自然会限制GET
请求的长度,并迫使您使用POST
请求而不是在实际发送批量之前必须知道Content-Length
信息。
让我们看一下其他Stackoverflow用户的评论
tx802说:
发布您的数据?
Alex Martelli,参考允许的最大网址长度,说:
它永远不会扩展到10 MB - 显然需要POST 或PUT(数据在正文中,而不是URL!)
现在应该有意义,因为协议方面将数兆字节的数据作为URI推送没有多大意义。