【发布时间】:2013-03-16 22:51:49
【问题描述】:
我开发了一个 HTTP API 服务器(旨在由第三方应用程序调用,不一定由 Web 浏览器调用),它通过传递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之类的一些方法?
我在 Delphi XE2 中使用 Indy 10 TIdHTTPWebBrokerBridge 作为 Web 服务器。当它处理此get 请求时,我正在此组件中寻找一种方法(技术上在其相应的TWebModule 处理程序中),以使响应的文件名成为我想要的任何字符串(在本例中为SomeUniqueIdentifier)。我听说过“URL 重写”这个词,但这是一个完全不同的话题,我认为这不是我需要的,但它可能会。
【问题讨论】:
标签: delphi http delphi-xe2 indy indy10