0

我正在设计一个与我的 iPhone 应用程序相关联的 Web 应用程序。它向网络服务器发送大量 URL(大约 15000 个)。我使用的是NearlyFreeSpeech.net,但它们只支持最多 2000 个字符的 URL。我想知道是否有人知道将支持非常大的 URL 的网络托管?谢谢,艾萨克

编辑:我的程序需要在 Safari 中打开一张图片。我可以通过两种方式做到这一点:

  • 将其发送到 URL 中编码的 base64 并仅回显查询参数。
  • 首先将它发布到我的应用程序中的服务器,然后服务器将在将照片存储在数据库中后发回一个唯一 ID,我会将其附加到我将在 Safari 中打开的 URL,该 URL 从数据库中检索照片并将其删除从数据库。

你看,我很懒,而且我知道 Mobile Safari 最多可以支持 URI 的 80 000 个字符,所以我认为这是一个不错的方法。如果这真的有什么问题,请告诉我。

编辑:我最终以正确的 POST 方式进行操作。谢谢。

4

3 回答 3

19

如果您要发送 15,000 个字符长的 URL,则很可能:

替代文字 http://img16.imageshack.us/img16/3847/youredoingitwronga.jpg

改用 HTTP POST 之类的东西。

您遇到的限制并不是主机的问题 - 更重要的是 Web 服务器对 URL 的长度有限制。根据此页面,Apache 将您限制在 4k 左右的字符,而 IIS 默认将您限制在 16k。

于 2009-04-05T02:09:01.467 回答
3

虽然它没有直接回答您的问题,并且没有官方的 URL 最大长度,但浏览器和服务器有实际限制 - 有关详细信息,请参阅http://www.botell.com/newfaq/misc/urllength.html。简而言之,由于 IE(至少正在使用的某些版本)不支持超过 2,083 个字符的 URL,因此保持在该长度以下可能是明智的。

于 2009-04-05T02:06:54.340 回答
2

如果您只需要在 Safari 中打开它,并且不需要涉及服务器,为什么不使用data:URI呢?

通过网络发送长 URI 基本上从来都不是正确的做法。正如您所注意到的,一些 Web 主机不支持长 URI。一些代理服务器也可能会阻塞长 URL,这意味着您的应用可能不适用于这些代理背后的用户。如果您需要将您的应用程序移植到不同的浏览器,其他浏览器可能不支持那么长的 URI。

如果您需要将数据上传到服务器,请使用 POST。是的,这是一个额外的往返,但它会更可靠。

此外,如果您使用 GET 请求将数据上传到服务器,那么您很容易受到各种跨站点请求伪造攻击;基本上,攻击者可以通过让用户点击链接(可能被TinyURL或其他 URL 缩短服务隐藏,或者只是在他们不这样做时将其作为链接嵌入网页中)来欺骗用户上传,比如说,goatse 到他们的帐户'不要仔细查看他们点击的 URL)。

除了实际上不会更改服务器上任何内容的查询参数之外,您永远不应该使用 GET 向服务器发送数据。

于 2009-04-05T03:06:17.273 回答