带有 302 重定向的内容处置 [英] Content-Disposition with 302 redirect

查看:28
本文介绍了带有 302 重定向的内容处置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是昨晚工作的,但我一定是不小心改变了一些东西,因为现在不是.

This was working last night, but I must have accidentally changed something, because it isn't now.

从这些标题中应该清楚我想要做什么:

What I am trying to do should be clear from these headers:

Content-Disposition: attachment;filename=english_customizable.xml
Location: http://tortoisewrath.com/files/2.xml

但是,当发送此标头时,Content-Disposition 部分在重定向后不起作用.

However, when this header is sent, the Content-Disposition part doesn't work after the redirect.

...为什么?

推荐答案

你试图做的是不明智的检查这个问题;标头位置 + 内容处置

What you're trying to do is inadvisable check this question; Header Location + Content Disposition

Content-Disposition + Location 标头

但是您可以做到,要使其正常工作,您必须在发送之前缓冲整个响应.您可以通过输出缓冲来做到这一点

But you can do it, to make it work you will have to buffer your whole response before sending it. You can do this with output buffering

否则浏览器可能会在下载文件之前解释 Location 标头.无论哪种方式都很粗略,所以你不应该这样做.

Else the browser may interpret the Location header before the file is downloaded. It's sketchy either way, so you shouldn't want to do this.

请注意使用 Content-Disposition: attachment; 强制另存为"将确保客户端不会去/导航任何地方,所以下面的方法无论如何,它自己应该没问题.

Please note that forcing 'save as' using Content-Disposition: attachment; will make sure the client doesn't go/navigate anywhere, so the method below on its own should be fine in any case.

在 php 中流式传输文件

仅引用 一个聪明的人:

// To use header() with 'content-type', why don't you use mime_content_type() function rather than checking the type on the basis of extension? 
// Example code: 

<?php 
$file="test.docx"; 
header("Pragma: public"); 
header('Content-disposition: attachment; filename='.$file); 
header("Content-type: ".mime_content_type($file)); 
header('Content-Encoding: identity'); 
ob_clean(); 
flush(); 
readfile($file); 
?> 

// Use $file to map to whichever type of file. 
// Note: the mime types should already be defined in apache settings

来源:http://www.php.net/manual/zh/function.header.php#107581

请注意,原始答案使用了 HTTP 中实际上不存在的 Content-Transfer-Encoding.该来源下方的评论对此进行了解释:http://www.php.net/manual/en/function.header.php#107044

Note that the original answer used Content-Transfer-Encoding which doesn't actually exist in HTTP. The comment below that source explains it: http://www.php.net/manual/en/function.header.php#107044

这篇关于带有 302 重定向的内容处置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆