1

我开发了一个 HTTP API 服务器(旨在由第三方应用程序调用,不一定由 Web 浏览器调用),它通过在查询字符串中get传递一个参数来对(下载)任何和所有类型的文件进行通用调用name请求的文件。所有调用,无论是针对哪个文件,都在我的同一个自定义请求处理程序中处理Get(不要与标准 HTTP 混淆get)。查询字符串包括一个属性,该属性name标识要获取的唯一文件。

所以一个请求可能看起来像:

http://MyServerURL.com/Get?Key=SomeAPIKeyForAuthentication&Name=SomeUniqueIdentifier

首先,我知道我显然可以让服务器仅使用 URI 获取文件,例如......

http://MyServerURL.com/SomeUniqueIdentifier?Key=SomeAPIKeyForAuthentication

...但是该设计专门用于使用这个通用get命令,因此我需要将这个唯一标识符保留在查询字符串中。连接到此 API 的实际应用程序永远不需要知道此文件名,但是当手动提供 URL 以供某人在浏览器中打开以下载文件时,可能会发生事件。

但是,每当通过 Web 浏览器下载文件时,由于调用是get,因此保存的文件名最终也只是get.

HTTP 中有什么技巧可以在我的服务器上实现,这将强制下载的文件名成为唯一标识符,而不仅仅是get? 比如一些方法比如使用re-direct?

TIdHTTPWebBrokerBridge在 Delphi XE2 中使用 Indy 10 作为 Web 服务器。TWebModule当它处理这个请求时,我正在这个组件中寻找一种方法(技术上是在它相应的处理程序中) get,以使响应的文件名成为我想要的任何字符串(在这种情况下,SomeUniqueIdentifier)。我听说过“URL 重写”这个词,但这是一个相当不同的话题,我认为这不是我需要的,但它可能。

4

1 回答 1

8

这似乎是一种相当冗长的说法,即您想为 HTTP 下载设置文件名,而不是用于获取它的 URL。在这种情况下,您只需发送一个 Content-Dispositon 标头,指定所需的文件名。请参阅rfc 2616 的第 19.5.1 节

例如

 Content-Disposition: attachment; filename="stackoverlow.ans"
于 2013-03-16T23:46:31.733 回答