Graham Dumpleton
grahamd at dscpl.com.au
Wed Sep 6 20:58:42 EDT 2006
On 07/09/2006, at 10:39 AM, David Beal wrote: > Ethan, > >> Thanks for your help. It turns out the problem was the "return >> apache.OK". I was getting that extra 0 at the end and could not >> figure >> out why. Thanks for the prompt replies. I appreciate all the help. >> > > The problem is probably not with return apache.OK, but maybe with the > client's XmlHttpRequest handler not understanding chunked encoding > markers. The 0 is for HTTP chunked encoding. Look for the header: > > Transfer-Encoding: chunked > > and the first line of the content will be a hexadecimal number of the > content-length for the first chunk. Each subsequent chunk comes > with a > chunk length marker. The 0 at the end of the file indicates that > there > are no more chunks. Chunk length markers will also appear whenever an > output flush occurs. > > To disable chunked encoding, you should specify a content length: > > req.headers_out['Content-Length']=str(len(code)) I'd suggest it isn't anything to do with chunked encoding and the original suggestion about apache.OK is going to be correct. It is an occasional problem we have to correct whereby people who move from a mod_python basic handler to mod_python.publisher keep returning apache.OK as a status when they shouldn't with result of an extra '0' appearing in response. Ie., a mod_python basic handler of: def handler(req): req.content_type = 'text/plain' req.write("content") return apache.OK can not simply be taken and then used as mod_python.publisher function as: def index(req): req.content_type = 'text/plain' req.write("content") return apache.OK This is because mod_python.publisher will always take the result of the function and convert it to a string and append it to the response, even if req.write() were used. Thus, must be written as: def index(req): req.content_type = 'text/plain' req.write("content") or for older versions of mod_python where returning None or an empty string is a problem, written as: def index(req): req.content_type = 'text/plain' req.write("content") return ' ' Graham
|