假设我们有一个客户端(实际上是服务器端PHP脚本)和一个服务器(也是服务器端PHP脚本)。
客户端通过cURL
向服务器发出 HTTP 请求。客户端接受text/csv
,因此设置了相应的标头,并且客户端希望将响应保存到文件中,因此正确设置了CURLOPT_FILE
选项。
问题是服务器在处理请求并发回 CSV "编码"内容时,是否应该使用inline
或attachment
作为Content-Disposition
标头的值?
一个非常简单的测试伪代码:服务器执行以下操作:
if (file_exists($attachment_location)) {
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
header("Cache-Control: public"); // needed for internet explorer
header("Content-Type: text/csv");
header("Content-Length:".filesize($attachment_location));
header("Content-Disposition: inline");
readfile($attachment_location);
die();
} else {
header($_SERVER["SERVER_PROTOCOL"] . " 404 Not found");
}
或者应该是这样的:
<?php
$attachment_location = "./c3m.csv";
if (file_exists($attachment_location)) {
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
header("Cache-Control: public"); // needed for internet explorer
header("Content-Type: text/csv");
header("Content-Transfer-Encoding: Binary");
header("Content-Length:".filesize($attachment_location));
header("Content-Disposition: attachment; filename=c3m.csv");
readfile($attachment_location);
die();
} else {
header($_SERVER["SERVER_PROTOCOL"] . " 404 Not found");
}
cURL 不关心内容处置,所以它应该与你赋予它的值无关。