1

私はHTTPAPIサーバー(サードパーティのアプリケーションによって呼び出されることを意図しており、必ずしもWebブラウザーによって呼び出される必要はありません)を開発しました。このサーバーはgetname要求されたファイル。どのファイルに関係なく、すべての呼び出しは、呼び出された私の同じカスタム要求ハンドラーで処理Getされます(標準のHTTPと混同しないでくださいget)。クエリ文字列には、name取得する一意のファイルを識別するプロパティが含まれています。

したがって、リクエストは次のようになります。

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

まず第一に、私は明らかに、たとえば、URIのみを使用してサーバーにファイルをフェッチさせることができることを知っています...

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

...しかし、このデザインはこの1つのユニバーサルgetコマンドを使用することを特に意図しているため、クエリ文字列にこの一意の識別子を保持する必要があります。このAPIに接続する実際のアプリケーションは、このファイル名を知る必要はありませんが、誰かがブラウザで開いてファイルをダウンロードするためにURLが手動で提供される場合があります。

ただし、ファイルがWebブラウザーを介してダウンロードされる場合は常に、呼び出しがgetであるため、保存されたファイル名もになりますget

ダウンロードしたファイル名を単なる識別子ではなく一意の識別子にするためにサーバーに実装できるHTTPのトリックはありますgetか?たとえば、リダイレクトを使用するなどの方法はありますか?

TIdHTTPWebBrokerBridgeDelphiXE2のIndy10をWebサーバーとして使用しています。TWebModuleこのコンポーネントがこのリクエストを処理するときに、このコンポーネント(技術的には対応するハンドラー)でget、応答のファイル名を必要な文字列(この場合は)にする方法を探していますSomeUniqueIdentifier。「URL書き換え」という言葉を聞いたことがありますが、それはかなり別のトピックであり、私が必要としているものではないと思いますが、それでもそうかもしれません。

4

1 に答える 1

8

これは、HTTPダウンロードのファイル名をフェッチに使用されたURLとは別に設定したいという、かなり長い言い方のようです。この場合、目的のファイル名を指定するContent-Dispositonヘッダーを送信するだけです。rfc2616のセクション19.5.1を参照してください

例えば

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