web-dev-qa-db-ja.com

サーバーから受信したヘッダーが重複しています

サーバーから受信したヘッダーが重複しています

サーバーからの応答に重複したヘッダーが含まれていました。この問題は通常、Webサイトまたはプロキシの構成が誤っているために発生します。 Webサイトまたはプロキシ管理者のみがこの問題を修正できます。

エラー349(net :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION):複数の異なるContent-Dispositionヘッダーを受信しました。これは、HTTP応答分割攻撃から保護するために許可されていません。

ChromeでPDFにエクスポート中にこのエラーが見つかりました。

Response.Buffer = false;
Response.ClearHeaders();
string ext = objProp.PACKAGEFILENAME.Substring(objProp.PACKAGEFILENAME.LastIndexOf("."));
string ext1 = ext.Substring(1);
Response.ContentType = ext1;
Response.AddHeader("Content-Disposition", "target;_blank,attachment; filename=" + objProp.PACKAGEFILENAME);
const int ChunkSize = 1024;
byte[] binary = objProp.PACKAGEDOCUMENT;
System.IO.MemoryStream ms = new System.IO.MemoryStream(binary);
int SizeToWrite = ChunkSize;

for (int i = 0; i < binary.GetUpperBound(0) - 1; i = i + ChunkSize)
{
    if (!Response.IsClientConnected) return;
    if (i + ChunkSize >= binary.Length) SizeToWrite = binary.Length - i;
    byte[] chunk = new byte[SizeToWrite];
    ms.Read(chunk, 0, SizeToWrite);
    Response.BinaryWrite(chunk);
    Response.Flush();
}
Response.Close();

これを修正する方法は?

110
Purvesh Desai

これは少し古いですが、Googleランキングで高かったので、 Chrome、pdf表示、サーバーから受信したヘッダーが重複しています

基本的に私の問題は、ファイル名にカンマが含まれていることでもありました。それらを削除するにはコンマで置換を実行します。有効なファイル名を作成するための私の機能は次のとおりです。

    public static string MakeValidFileName(string name)
    {
        string invalidChars = Regex.Escape(new string(System.IO.Path.GetInvalidFileNameChars()));
        string invalidReStr = string.Format(@"[{0}]+", invalidChars);
        string replace = Regex.Replace(name, invalidReStr, "_").Replace(";", "").Replace(",", "");
        return replace;
    }
219
Bryan Roberts

サーバーSHOULDは、@ cusmanと@Toukoの返信で言及されているように、ファイル名を二重引用符で囲みます。

例えば:

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
89
tomc

私にとっては、問題はファイル名ではなくコンマに関するものでしたが、以下のとおりです。-

Response.ok(streamingOutput、MediaType.APPLICATION_OCTET_STREAM_TYPE).header( "content-disposition"、 "attachment、filename= your_file_name")。build();

添付後に誤ってカンマを入れました。コンマをセミコロンに置き換えることで解決しました。

5
Deepak Agrawal

次のように、ファイル名を二重引用符で囲みます。

this.Response.AddHeader( "Content-disposition"、$ "attachment; filename = \" {outputFileName}\"");

2
user3578181

MDN web docs。 によると、ヘッダー内のファイル名を囲む二重引用符は標準です。引用符を省略すると、ファイル名の文字に起因する問題が複数発生する可能性があります。

0