Непостоянная проблема: POST-запросы повреждены - PullRequest
5 голосов
/ 14 марта 2011

В последние несколько месяцев я сталкиваюсь со странной периодической проблемой, которую схожу с ума, пытаясь изолировать.

У меня на сайте запущен Flash-фильм, который генерирует данные XML, а затем отправляетэто через запрос POST к сценарию PHP.Целостность этого файла является ключом для функционирования моего приложения, поэтому я должен убедиться, что оно поступает в такт.Для этого я генерирую хеш MD5 и отправляю его вместе с этим.На принимающей стороне мой PHP-скрипт примет данные, обработает их MD5 и сравнит два хэша.Если они совпадают, то я предполагаю, что файл в порядке, и сохраните его для дальнейшего использования.Если хеши MD5 отличаются, я отправляю себе электронное письмо и делаю копию файла для ручной проверки.

В большинстве случаев (> 99%) это работает прекрасно, и я не вижу проблем с загруженными данными.Тем не менее, время от времени я обнаруживаю, что некоторые дополнительные символы вставляются в файл XML, что приводит к его повреждению.Когда это происходит, файл также выглядит усеченным.Вот фрагмент того, что я вижу в поврежденных файлах - похоже, что это какой-то параметр, связанный с веб-сервером:

... begin XML data ...

     <scale>1.7</scale>
     <rotation>0</rotation>
     <popdelay>0.7290036325342953</popdelay>
    Proxy-Connection: keep-alive
Cache-Control: max-age=0

0<poptime>0.6</poptime>
     <popangle>90</popangle>
     <shadowvis>true</shadowvis>
     <backingcolor>0xFF222222</backingcolor>

.... продолжить XML-данные ...

Я обнаружил, что проблема будет продолжать возникать после того, как она возникла на определенном компьютере - то есть, если пользователь постоянно пытается загрузить свой файл, ошибка будет обрезатьсядо 100% времени для них.Я видел, как это происходит на нескольких браузерах / платформах (перечислены ниже):

Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMNTDF; InfoPath.3; .NET4.0C)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1)
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.16) Gecko/20101130 Firefox/3.5.16 (.NET CLR 3.5.30729)
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMNTDF; InfoPath.3; .NET4.0C)

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3

Доступ к моему серверу приложений осуществляется через другой сервер apache2, на котором запущен mod_proxy, хотя я не уверен, играет ли это рольтак как эта процедура, кажется, работает почти все время на других машинах.Я пытался настроить мои настройки apache2, но они, кажется, не имеют никакого значения (я могу опубликовать их позже, если вы считаете, что это актуально / полезно)

Если у кого-то есть какие-либо идеи, что происходит или какначать заниматься этим я бы очень, очень признателен.Я пытался исследовать это несколько месяцев и ничего не придумал.

Большое вам спасибо за потраченное время!

1 Ответ

0 голосов
/ 31 марта 2011

Похоже, ваш прокси-сервер выполняет загрузку, поскольку клиент не отправил заголовок Content-Length.http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#request-bodies

Попробуйте включить proxy-sendcl, который заставит прокси-сервер буферизировать загрузку, чтобы определить длину контента, и прекратит разбивать загрузку при попадании на ваш сервер.

...