[mod_python] strange behaviour with compressed response

m.banaouas banaouas.medialog at wanadoo.fr
Tue Jan 2 19:49:00 EST 2007


hi,
what is the difference between serving a file directly or by calling a 
script function?
case 1: http://localhost/myfile.xml
case 2: http://localhost/mydir/boo/getfile
Must I do special call to apache api when compression is activated?
With Firefox, every thing works fine in two cases.
With a http client component I'm using in my developpements, both case 1 
and case 2 works fine if I don't ask for compressed data. If I do 
(Accept-Encoding: gzip), case 1 works fine but case 2 fails.
I noticed that returning apache.OK adds unexpected extra "0" on the output.
thanks.

DocumentRoot "C:/Apache/htdocs"
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Satisfy all
    SetOutputFilter DEFLATE
</Directory>

Alias /mydir "C:/MYDIR"
<Directory C:/MYDIR>
    Allow from All
    SetHandler mod_python
    PythonHandler mod_python.publisher
</Directory>

here is the simple boo.py script:
#---------------------------
# -*- coding: ISO-8859-1 -*-
#
# boo.py
#
import os, sys
from mod_python import apache
#
def getfile(req):
  req.content_type = 'text/xml'
  req.send_http_header()
  #
  f = file('c:/apache/htdocs/myfile.xml','r')
  xmldata = f.read()
  f.close()
  req.write(xmldata)
  #return apache.OK
#
def index(req):
  return "We are in index()"
#---------------------------

and here three traces from a tcp viwer:

#--MyHttpClient/func_access/without_gzip
Resolving Remote Host
Remote Host resolved to 127.0.0.1
Local Port (8080) opened
Waiting for connections
400: Client connected; 127.0.0.1:4657
400: Connecting to Server
400: Client to Server (188 bytes)
GET /mydir/boo/getfile HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Connection: keep-alive
User-Agent: Mozilla/4.0 (compatible; ICS)
Host: localhost:80

400: Connected to Server
400: Server to Client (255 bytes)
HTTP/1.1 200 OK
Date: Wed, 03 Jan 2007 00:26:55 GMT
Server: Apache/2.2.3 (Win32) mod_python/3.3.0b Python/2.4.4
Vary: Accept-Encoding
Connection: close
Content-Type: text/xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<document>Hello</document>

400: Server disconnected
400: Disconnected from Client

#-MyHttpClient/func_access/with_gzip
Resolving Remote Host
Remote Host resolved to 127.0.0.1
Local Port (8080) opened
Waiting for connections
488: Client connected; 127.0.0.1:4665
488: Connecting to Server
488: Client to Server (211 bytes)
GET /mydir/boo/getfile HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Connection: keep-alive
Accept-Encoding: gzip
User-Agent: Mozilla/4.0 (compatible; ICS)
Host: localhost:80

488: Connected to Server
488: Server to Client (217 bytes)
HTTP/1.1 200 OK
Date: Wed, 03 Jan 2007 00:29:42 GMT
Server: Apache/2.2.3 (Win32) mod_python/3.3.0b Python/2.4.4
Vary: Accept-Encoding
Content-Encoding: gzip
Connection: close
Content-Type: text/xml

488: Server to Client (74 bytes)
0000  B3 B1 AF C8 CD 51 28 4B  2D 2A CE CC CF B3 55 32  .....Q(K-*....U2
0010  D4 33 50 52 48 CD 4B CE  4F C9 CC 4B B7 55 F2 0C  .3PRH.K.O..K.U..
0020  F6 D7 B5 B0 30 B5 D4 35  54 B2 B7 E3 B2 49 C9 4F  ....0..5T....I.O
0030  2E CD 4D CD 2B B1 F3 48  CD C9 C9 B7 D1 87 F3 B9  ..M.+..H........
0040  B8 00 86 D4 95 DA 48 00  00 00                    ......H...     
488: Server disconnected
488: Disconnected from Client

#--MyHttpClient/file_access/with_gzip
Resolving Remote Host
Remote Host resolved to 127.0.0.1
Local Port (8080) opened
Waiting for connections
428: Client connected; 127.0.0.1:4674
428: Connecting to Server
428: Connected to Server
428: Client to Server (204 bytes)
GET /myfile.xml HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Connection: keep-alive
Accept-Encoding: gzip
User-Agent: Mozilla/4.0 (compatible; ICS)
Host: localhost:80

428: Server to Client (452 bytes)
HTTP/1.1 200 OK
Date: Wed, 03 Jan 2007 00:37:41 GMT
Server: Apache/2.2.3 (Win32) mod_python/3.3.0b Python/2.4.4
Last-Modified: Tue, 02 Jan 2007 23:30:43 GMT
ETag: "f832-4b-1e6eace9"
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 87
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/xml

0187  D4 33 50 52 48 CD 4B CE  4F C9 CC 4B B7 55 F2 0C  .3PRH.K.O..K.U..
0197  F6 D7 B5 B0 30 B5 D4 35  54 B2 B7 E3 E5 B2 49 C9  ....0..5T.....I.
01A7  4F 2E CD 4D CD 2B B1 F3  48 CD C9 C9 B7 D1 87 F3  O..M.+..H.......
01B7  79 B9 78 B9 00 CB E5 71  9D 4B 00 00 00           y.x....q.K...  
428: Server disconnected
428: Disconnected from Client

#--Firefox--------------------------
Resolving Remote Host
Remote Host resolved to 127.0.0.1
Local Port (8080) opened
Waiting for connections
512: Client connected; 127.0.0.1:4669
512: Connecting to Server
512: Connected to Server
512: Client to Server (439 bytes)
GET /mydir/boo/getfile HTTP/1.1
Host: localhost:80
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.1) 
Gecko/20061204 Firefox/2.0.0.1
Accept: 
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

512: Server to Client (287 bytes)
HTTP/1.1 200 OK
Date: Wed, 03 Jan 2007 00:32:06 GMT
Server: Apache/2.2.3 (Win32) mod_python/3.3.0b Python/2.4.4
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/xml

a
512: Server to Client (85 bytes)
0000  34 61 0D 0A B3 B1 AF C8  CD 51 28 4B 2D 2A CE CC  4a.......Q(K-*..
0010  CF B3 55 32 D4 33 50 52  48 CD 4B CE 4F C9 CC 4B  ..U2.3PRH.K.O..K
0020  B7 55 F2 0C F6 D7 B5 B0  30 B5 D4 35 54 B2 B7 E3  .U......0..5T...
0030  B2 49 C9 4F 2E CD 4D CD  2B B1 F3 48 CD C9 C9 B7  .I.O..M.+..H....
0040  D1 87 F3 B9 B8 00 86 D4  95 DA 48 00 00 00 0D 0A  ..........H.....
0050  30 0D 0A 0D 0A                                    0....          
512: Server disconnected
512: Disconnected from Client




More information about the Mod_python mailing list