4

问题是,当我过滤订单导出时,有时我会在 Google Chrome 中收到此错误:

Duplicate headers received from server
The response from the server contained duplicate headers. This problem is generally the result of a misconfigured website or proxy. Only the website or proxy administrator can fix this issue.
Error 349 (net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION): Multiple Content-Disposition headers received. This is disallowed to protect against HTTP response splitting attacks.

我说的是Sales > Orders屏幕。

假设我按订单号过滤它,以便我只想将 1 个实际订单导出到 .csv 文件。

在 FF、IE 等中,这似乎有效。大多数时候它也可以在 Chrome 中运行(16 - 发布时的最新版本)。

根据这篇文章:'Duplicate headers received from server' Error in Chrome 16 with EPPlus 2.9他能够推断这与“,”作为分隔符有关。

我尝试将lib/Varien/File/Csv.php分隔符更改为“;” 但这似乎不起作用......

有人有什么建议吗?

注意: Chrome 本身有一些修复(我认为),但如果可能的话,我想通过 Magento 修复它。

4

1 回答 1

8

在这种情况下,magento 似乎没有正确发送标头。

这不是“文件名中的逗号”错误,但它看起来像 Magento 两次发送相同的标题。

您可以通过更改 3 行来解决此问题app/code/core/Mage/Core/Controller/Varien/Action.php。查看_prepareDownloadResponse方法并更改以下内容:

$this->getResponse()
->setHttpResponseCode(200)
->setHeader('Pragma', 'public', true)
->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true)
->setHeader('Content-type', $contentType, true)
->setHeader('Content-Length', is_null($contentLength) ? strlen($content) : $contentLength)
->setHeader('Content-Disposition', 'attachment; filename="'.$fileName.'"')
->setHeader('Last-Modified', date('r'));

经过

$this->getResponse()
->setHttpResponseCode(200)
->setHeader('Pragma', 'public', true)
->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true)
->setHeader('Content-type', $contentType, true)
->setHeader('Content-Length', is_null($contentLength) ? strlen($content) : $contentLength, true)
->setHeader('Content-Disposition', 'attachment; filename="'.$fileName.'"', true)
->setHeader('Last-Modified', date('r'), true);

最好不要将此更改应用于核心类,而是创建此类的副本并将其放在此处:/app/code/local/Mage/core/Controller/Varien/Action.php.

看起来这个错误在 Magento 1.7 的下一个版本中修复。

于 2012-03-07T14:37:03.093 回答