资源解释为文档,但使用 MIME 类型 application/csv 传输

Posted

技术标签:

【中文标题】资源解释为文档,但使用 MIME 类型 application/csv 传输【英文标题】:Resource interpreted as Document but transferred with MIME type application/csv 【发布时间】:2017-01-30 13:17:07 【问题描述】:

我有一个下载 CSV 文件的按钮。 该文件似乎下载正常,但我收到以下警告。 此警告似乎只出现在 chrome 中。

资源解释为 Document,但使用 MIME 类型 application/csv 传输:

这是我设置 CSV 标头的地方。

/**
* Set the php mime header
*
* This will overwrite any previous headers
*
* @param string $header any custom headers that need to be set
*
* @return void
* @access public
*/
function setHeader($header='')

    if ($header) 
        // set custom headers
        header($header);
     else 
        header('Content-Type: application/csv');
        header('Content-Disposition: attachment; filename="'.$this->_filename.'";');

        //This is known that Internet Explorer has problems with SSL connection (https).
        //http://support.microsoft.com/default.aspx?scid=kb;en-us;812935
        //http://support.microsoft.com/default.aspx?scid=kb;en-us;316431
        // do not send no cache header in https for IE

        // get protocol information
        $url_info = parse_url(current_url());
        $protocol = (isset($url_info['scheme'])) ? $url_info['scheme'] : NULL;
        $using_ie6_8 = isset ($_SERVER['HTTP_USER_AGENT']) ? preg_match('/(MSIE\s[0-8]+\.)/', $_SERVER['HTTP_USER_AGENT']) : FALSE;
        if (!is_null($protocol) && $protocol == 'https' && $using_ie6_8) 
            header('Cache-Control: private, max-age=0, must-revalidate');
            header('Pragma: private');
            header('Expires: '.gmdate('D, d M Y H:i:s', time()-3600).' GMT');

        

    

//end setHeader()

响应标题

Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:keep-alive
Content-Disposition:attachment; filename="submission_log.csv";
Content-Type:application/csv
Date:Thu, 22 Sep 2016 04:59:06 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Pragma:no-cache
Server:openresty
Transfer-Encoding:chunked
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN

请求标头

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:6252
Content-Type:multipart/form-data; boundary=----WebKitFormBoundary4CxCF8KLzdtoGRO2
Cookie:lastSelectedLinkId=2661; lastSelectedAssetId=2151; SQ_SYSTEM_SESSION=o44hori3h2fcu5ltm29u6rv2k44bq1tu6v3364pdi8jn273scebnjm3lsuik5teasneeh664j98o3ajbur6p39kque68qgjohkktsk3; _ga=GA1.2.545099348.1472451817
Host:matrixdev.squiz.net
Origin:http://matrixdev.squiz.net
Referer:http://matrixdev.squiz.net/_admin/?SQ_BACKEND_PAGE=main&backend_section=am&am_section=edit_asset&assetid=2151&sq_asset_path=70%2C2151&sq_link_path=71%2C2661&asset_ei_screen=log
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36

【问题讨论】:

【参考方案1】:

如果您在<a> 中有下载 csv 文件的链接,请将“下载”属性添加到<a>

【讨论】:

如果您希望这样做,请确保您的目标浏览器支持 button 属性(并非所有浏览器都支持)! caniuse.com/#feat=download

以上是关于资源解释为文档,但使用 MIME 类型 application/csv 传输的主要内容,如果未能解决你的问题,请参考以下文章

CSS、.htaccess、资源解释为样式表,但使用 MIME 类型 text/html 传输

资源解释为 Document,但使用 MIME 类型 image/svg+xml 传输:

资源解释为脚本,但使用 MIME 类型 text/html 传输:JSONP

Flask:资源解释为样式表,但使用 MIME 类型 text/html 传输

Chrome 说“资源解释为脚本,但使用 MIME 类型文本/纯文本传输。”,啥给出?

Wordpress 资源解释为样式表,但使用 mime 类型 text/html 传输