I have a problem in a web application that I've manages to reduce to a
simple test case. I have a pylons application (a single page) running
on paste. When I submit a form via POST with a significant amount of
data IE7 and the server don't play nicely with each other. Oddly IE8
and all other browsers work well. Unfortunately my client is on IE7
for the foreseeable future.
I have verified this behavior on Ubuntu 10 under python 2.6 and Ubuntu
11 with python 2.7. In both cases I have a fresh install of the OS
and used a virtual environment to install pylons (easy_install -UZ
pylons) and its dependencies.
I follow the instructions on:
http://docs.pylonsproject.org/projects/pylons_framework/dev/gettingstarted.html
to create a hello world application. I then create a hello.mako
template in the appropriate directory that looks like this:
<!DOCTYPE HTML>
<html>
<head>
<title>Minimal test page</title>
</head>
<body>
<h1>FOO</h1>
<form name="input" action="/hello/index" method="post">
<input type="hidden" id="foo0" name="fooname0"
value="somevaluevalue0" />
<input type="hidden" id="foo1" name="fooname1"
value="somevaluevalue1" />
<input type="hidden" id="foo2" name="fooname2"
value="somevaluevalue2" />
<input type="hidden" id="foo3" name="fooname3"
value="somevaluevalue3" />
<input type="hidden" id="foo4" name="fooname4"
value="somevaluevalue4" />
<input type="hidden" id="foo5" name="fooname5"
value="somevaluevalue5" />
<input type="hidden" id="foo6" name="fooname6"
value="somevaluevalue6" />
<input type="hidden" id="foo7" name="fooname7"
value="somevaluevalue7" />
<input type="hidden" id="foo8" name="fooname8"
value="somevaluevalue8" />
<input type="hidden" id="foo9" name="fooname9"
value="somevaluevalue9" />
<input type="hidden" id="foo10" name="fooname10"
value="somevaluevalue10"/>
<input type="hidden" id="foo11" name="fooname11"
value="somevaluevalue11"/>
<input type="hidden" id="foo12" name="fooname12"
value="somevaluevalue12"/>
<input type="hidden" id="foo13" name="fooname13"
value="somevaluevalue13"/>
<input type="hidden" id="foo14" name="fooname14"
value="somevaluevalue14"/>
<input type="hidden" id="foo15" name="fooname15"
value="somevaluevalue15"/>
<input type="hidden" id="foo16" name="fooname16"
value="somevaluevalue16"/>
<input type="hidden" id="foo17" name="fooname17"
value="somevaluevalue17"/>
<input type="hidden" id="foo18" name="fooname18"
value="somevaluevalue18"/>
<input type="hidden" id="foo19" name="fooname19"
value="somevaluevalue19"/>
<input type="hidden" id="foo20" name="fooname20"
value="somevaluevalue20"/>
<input type="hidden" id="foo21" name="fooname21"
value="somevaluevalue21"/>
<input type="hidden" id="foo22" name="fooname22"
value="somevaluevalue22"/>
<input type="hidden" id="foo23" name="fooname23"
value="somevaluevalue23"/>
<input type="hidden" id="foo24" name="fooname24"
value="somevaluevalue24"/>
<input type="hidden" id="foo25" name="fooname25"
value="somevaluevalue25"/>
<input type="hidden" id="foo26" name="fooname26"
value="somevaluevalue26"/>
<input type="hidden" id="foo27" name="fooname27"
value="somevaluevalue27"/>
<input type="hidden" id="foo28" name="fooname28"
value="somevaluevalue28"/>
<input type="hidden" id="foo29" name="fooname29"
value="somevaluevalue29"/>
<input type="hidden" id="foo30" name="fooname30"
value="somevaluevalue30"/>
<input type="hidden" id="foo31" name="fooname31"
value="somevaluevalue31"/>
<input type="hidden" id="foo32" name="fooname32"
value="somevaluevalue32"/>
<input type="hidden" id="foo33" name="fooname33"
value="somevaluevalue33"/>
<input type="hidden" id="foo34" name="fooname34"
value="somevaluevalue34"/>
<input type="hidden" id="foo35" name="fooname35"
value="somevaluevalue35"/>
<input type="hidden" id="foo36" name="fooname36"
value="somevaluevalue36"/>
<input type="hidden" id="foo37" name="fooname37"
value="somevaluevalue37"/>
<input type="hidden" id="foo38" name="fooname38"
value="somevaluevalue38"/>
<input type="hidden" id="foo39" name="fooname39"
value="somevaluevalue39"/>
<input type="hidden" id="foo40" name="fooname40"
value="somevaluevalue40"/>
<input type="hidden" id="foo41" name="fooname41"
value="somevaluevalue41"/>
<input type="hidden" id="foo42" name="fooname42"
value="somevaluevalue42"/>
<input type="hidden" id="foo43" name="fooname43"
value="somevaluevalue43"/>
<input type="hidden" id="foo44" name="fooname44"
value="somevaluevalue44"/>
<input type="hidden" id="foo45" name="fooname45"
value="somevaluevalue45"/>
<input type="hidden" id="foo46" name="fooname46"
value="somevaluevalue46"/>
<input type="hidden" id="foo47" name="fooname47"
value="somevaluevalue47"/>
<input type="hidden" id="foo48" name="fooname48"
value="somevaluevalue48"/>
<input type="hidden" id="foo49" name="fooname49"
value="somevaluevalue49"/>
<input type="hidden" id="foo50" name="fooname50"
value="somevaluevalue50"/>
<input type="hidden" id="foo51" name="fooname51"
value="somevaluevalue51"/>
<input type="hidden" id="foo52" name="fooname52"
value="somevaluevalue52"/>
<input type="hidden" id="foo53" name="fooname53"
value="somevaluevalue53"/>
<input type="hidden" id="foo54" name="fooname54"
value="somevaluevalue54"/>
<input type="hidden" id="foo55" name="fooname55"
value="somevaluevalue55"/>
<input type="hidden" id="foo56" name="fooname56"
value="somevaluevalue56"/>
<input type="hidden" id="foo57" name="fooname57"
value="somevaluevalue57"/>
<input type="hidden" id="foo58" name="fooname58"
value="somevaluevalue58"/>
<input type="hidden" id="foo59" name="fooname59"
value="somevaluevalue59"/>
<input type="hidden" id="foo60" name="fooname60"
value="somevaluevalue60"/>
<input type="hidden" id="foo61" name="fooname61"
value="somevaluevalue61"/>
<input type="hidden" id="foo62" name="fooname62"
value="somevaluevalue62"/>
<input type="hidden" id="foo63" name="fooname63"
value="somevaluevalue63"/>
<input type="hidden" id="foo64" name="fooname64"
value="somevaluevalue64"/>
<input type="hidden" id="foo65" name="fooname65"
value="somevaluevalue65"/>
<input type="hidden" id="foo66" name="fooname66"
value="somevaluevalue66"/>
<input type="hidden" id="foo67" name="fooname67"
value="somevaluevalue67"/>
<input type="hidden" id="foo68" name="fooname68"
value="somevaluevalue68"/>
<input type="hidden" id="foo69" name="fooname69"
value="somevaluevalue69"/>
<input type="hidden" id="foo70" name="fooname70"
value="somevaluevalue70"/>
<input type="hidden" id="foo71" name="fooname71"
value="somevaluevalue71"/>
<input type="hidden" id="foo72" name="fooname72"
value="somevaluevalue72"/>
<input type="hidden" id="foo73" name="fooname73"
value="somevaluevalue73"/>
<input type="hidden" id="foo74" name="fooname74"
value="somevaluevalue74"/>
<input type="hidden" id="foo75" name="fooname75"
value="somevaluevalue75"/>
<input type="hidden" id="foo76" name="fooname76"
value="somevaluevalue76"/>
<input type="hidden" id="foo77" name="fooname77"
value="somevaluevalue77"/>
<input type="hidden" id="foo78" name="fooname78"
value="somevaluevalue78"/>
<input type="hidden" id="foo79" name="fooname79"
value="somevaluevalue79"/>
<input type="hidden" id="foo80" name="fooname80"
value="somevaluevalue80"/>
<input type="hidden" id="foo81" name="fooname81"
value="somevaluevalue81"/>
<input type="hidden" id="foo82" name="fooname82"
value="somevaluevalue82"/>
<input type="hidden" id="foo83" name="fooname83"
value="somevaluevalue83"/>
<input type="hidden" id="foo84" name="fooname84"
value="somevaluevalue84"/>
<input type="hidden" id="foo85" name="fooname85"
value="somevaluevalue85"/>
<input type="hidden" id="foo86" name="fooname86"
value="somevaluevalue86"/>
<input type="hidden" id="foo87" name="fooname87"
value="somevaluevalue87"/>
<input type="hidden" id="foo88" name="fooname88"
value="somevaluevalue88"/>
<input type="hidden" id="foo89" name="fooname89"
value="somevaluevalue89"/>
<input type="hidden" id="foo90" name="fooname90"
value="somevaluevalue90"/>
<input type="hidden" id="foo91" name="fooname91"
value="somevaluevalue91"/>
<input type="hidden" id="foo92" name="fooname92"
value="somevaluevalue92"/>
<input type="hidden" id="foo93" name="fooname93"
value="somevaluevalue93"/>
<input type="hidden" id="foo94" name="fooname94"
value="somevaluevalue94"/>
<input type="hidden" id="foo95" name="fooname95"
value="somevaluevalue95"/>
<input type="hidden" id="foo96" name="fooname96"
value="somevaluevalue96"/>
<input type="hidden" id="foo97" name="fooname97"
value="somevaluevalue97"/>
<input type="hidden" id="foo98" name="fooname98"
value="somevaluevalue98"/>
<input type="hidden" id="foo99" name="fooname99"
value="somevaluevalue99"/>
<input type="submit" value="Submit" />
</form>
</body>
</html>
and I modify the hello.py controller by uncommenting the render line
and deleting the return ('hello world') line:
import logging
from pylons import request, response, session, tmpl_context as c, url
from pylons.controllers.util import abort, redirect
from helloworld.lib.base import BaseController, render
log = logging.getLogger(__name__)
class HelloController(BaseController):
def index(self):
# Return a rendered template
return render('/hello.mako')
All browsers render the /hello/index page properly. When I hit submit
most browsers properly return me to the page. IE7 however does not.
Instead it displays a "Internet Explorer cannot display the webpage"
error.
There is no exception or error that I can see in the web application.
The HelloController is called and returns data. I have watched all
this in WireShark and what happens is that after sending data the
server sends a ACK RST packet and that is what ends things for IE7.
I'm happy to post additional configuration details or even WireShark
traces. This is driving me nuts.
I've posted to the Pylons list, but as best I can tell there is not a
problem in Pylons, but lower down the software stack. Is this a paste
bug?
Any help or suggestions would be appreciated.
Best regards,
John