Google App Engine中的网址大小

时间:2016-02-08 19:20:51

标签: java google-app-engine

我在GAE托管的应用中调用了一个servlet。我遇到的问题是我的请求网址大于 2048 字符,而我收到 400 Bad Request 错误。虽然我们提到here我们可以使用 10MB 的数据发出请求。那么我们如何发送10MB数据的请求呢?我目前正在使用免费配额。很久以前就问了类似的question,但还没有回答。

2 个答案:

答案 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推送没有多大意义。