HTTP:クライアントがバイト範囲を要求したときに、Content-TypeとContent-Dispositionを表示するにはどうすればよいですか?
質問
昨日尋ねました PHPからのバイト範囲の提供について。今日の私の質問は、いくつかの要求されたバイト範囲を提供するときに Content-Type
および Content-Disposition
ヘッダーをどのように設定すればよいですか?すべてのバイト範囲でそれらを繰り返す必要がありますか、または最初に一度だけ出力する必要がありますか?または、クライアントが既に何を求めているかを知っている必要があるため、まったく出力すべきではありませんか?
解決
通常、リソース全体またはその一部のみを返す場合、HTTP応答ヘッダーは同じ(繰り返し)である必要があります。もちろん、Content-Rangeヘッダーは異なります。これは異なります。
HTTPはステートレスであるため、すべての応答は完全で、単独で実行できる必要があります。バイト範囲を提供する場合、実際にはエンティティタグ(ETag)も使用する必要があります。クライアントが同じリソースの異なるリビジョンに実際に属する2つの別個のバイト範囲を要求して取得する可能性はありません。
他のヒント
RFC 2616 をご覧ください(特にセクション14.16および19.2)。クライアントが単一のバイト範囲を要求する場合、応答には単一のバイト範囲が含まれている必要があり、Content-TypeおよびContent-Dispositionヘッダー値は動作を変更しません(提供されるファイルのタイプを反映する必要があります)。ただし、クライアントが1つの要求で複数のバイト範囲を要求する場合、応答では「multipart / byteranges」のContent-Typeを使用する必要があります。代わりに、本文内の各部分が独自のContent-Typeヘッダーを指定します。