Magento - дубликаты заголовков, полученные с сервера - PullRequest
4 голосов
/ 02 февраля 2012

Проблема в том, что иногда я получаю эту ошибку в 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 - последняя версия на момент публикации).

Согласно этому сообщению: «Дублированные заголовки, полученные от сервера» Ошибка в Chrome 16 с EPPlus 2.9 , он смог сделать вывод, что это как-то связано с «,» в качестве разделителя.

Я попытался перейти на lib/Varien/File/Csv.php и изменить разделитель на ";" но, похоже, это не сработало ...

У кого-нибудь есть предложения?

Примечание: Есть некоторые исправления для самого Chrome (я думаю), но я хочу исправить это через Magento, если это возможно.

1 Ответ

8 голосов
/ 07 марта 2012

Похоже, что 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.

...