Nice programing

Chrome, pdf 디스플레이, 서버에서 수신 된 중복 헤더

nicepro 2020. 12. 8. 20:02
반응형

Chrome, pdf 디스플레이, 서버에서 수신 된 중복 헤더


웹 사이트에 라이트 박스 안에 pdf를 표시하는 섹션이 있습니다. 최근 크롬 업그레이드로 인해 다음과 같은 표시가 깨졌습니다.

오류 349 (net :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION) : 여러 Content-Disposition 헤더가 수신되었습니다. 이는 HTTP 응답 분할 공격으로부터 보호하기 위해 허용되지 않습니다.

이것은 IE에서 여전히 올바르게 작동합니다.

IIS6에서 ASP.NET MVC3을 사용하고 있습니다.

파일을 생성하는 데 사용하는 코드는 다음과 같습니다.

인라인 문을 제거하면 파일이 다운로드되지만 라이트 박스 기능이 손상됩니다.

문제 코드

public FileResult PrintServices()
{
    //... unrelated code removed
    MemoryStream memoryStream = new MemoryStream();
    pdfRenderer.PdfDocument.Save(memoryStream);
    string filename = "ServicesSummary.pdf";

    Response.AppendHeader("Content-Disposition", "inline;");

    return File(memoryStream.ToArray(), "application/pdf", filename);
}

수정

풀다

Response.AppendHeader("Content-Disposition", "inline;");

그런 다음 변경

return File(memoryStream.ToArray(), "application/pdf", filename);

...에

return File(memoryStream.ToArray(), "application/pdf");

위의 솔루션은 파일 이름을 지정할 필요가없는 경우 괜찮지 만 사용자에 대해 지정된 파일 이름 기본값을 유지하고 싶었습니다.

우리의 솔루션은 쉼표가 포함 된 파일 이름 자체가되었습니다. 쉼표를 ""로 바꾸었고 이제 파일이 Chrome에서 예상대로 문서를 전달합니다.

FileName = FileName.Replace(",", "")

Response.ContentType = "application/pdf"
Response.AddHeader("content-disposition", "attachment; filename=" & FileName)    
Response.BinaryWrite(myPDF)

@roryok의 주석을 사용하여 파일 이름을 따옴표로 묶었습니다.

Response.AddHeader("content-disposition", "attachment; filename=\"" + FileName + "\"")

@a 코더의 작은 따옴표 사용에 대한 답변이 IE에서 예상대로 작동하지 않았습니다. 이름에 여전히 작은 따옴표를 사용하여 다운로드 한 파일입니다.


오늘이 문제가 있었다. Roryok과 다른 사람들의 해결책은 파일 이름을 따옴표로 묶는 것입니다.

이전, Chrome 실패 :

header("Content-Disposition: attachment; filename=$file");

현재, Chrome OK :

header("Content-Disposition: attachment; filename='$file'");

주위의 따옴표에 유의하십시오 $file.


동일한 문제가 발생하여 return 문에서 파일 이름을 제거하여 문제를 해결했습니다.

변화:

 return File(outStream.ToArray(), "application/pdf", "Certificate.pdf");

에:

 return File(outStream.ToArray(), "application/pdf");

그리고 유지 :

Response.AddHeader("content-disposition", "attachment;filename=\"" + "Certificate.pdf" + "\"");

다운로드 한 파일의 이름은 그대로 유지됩니다.


사용자 정의 파일 이름을 가진 모든 파일 유형에 대해이 문제를 해결하려면 (또는 유사한 헤더)를 제거하십시오.

Response.AppendHeader("Content-Disposition", "inline;");

그리고 추가

string fileName = "myfile.xlsx"
return File(fileStream, System.Web.MimeMapping.GetMimeMapping(Path.GetFileName(filePath)), fileName);

you can also use the filepath instead of a stream in the first parameter


My issue was due to the double quote as shown below:

var encoding = System.Text.Encoding.UTF8;

*Response.AddHeader("Content-Disposition", string.Format("attachment; filename=**\"{0}\"**", HttpUtility.UrlEncode(file, encoding)));*

Changing the above to this worked!

*Response.AddHeader("Content-Disposition", string.Format("attachment; filename=**{0}**", HttpUtility.UrlEncode(file, encoding)));*

참고URL : https://stackoverflow.com/questions/8588818/chrome-pdf-display-duplicate-headers-received-from-the-server

반응형