Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

Ticket #951 (defect)

Opened 7 months ago

Last modified 7 months ago

Content-Length breaks curl on 100-Continue

Status: closed (fixed)

Reported by: jasapp@gmail.com Assigned to: fumanchu
Priority: normal Milestone: 3.2
Component: wsgiserver Keywords: 100 continue content-length curl
Cc:

Using Python 2.5.2, curl 7.19.5 and CherryPy 3.1.2. My code is the example taken from the top of wsgiserver.py.

Curl is exiting with 18, and the error you can see below. Some files given to curl with the --data option let curl exit with 0, while others cause curl to exit with a status of 18. If I tell curl to use http1.0 instead of 1.1, then curl exits successfully regardless of the file. The CherryPy wsgiserver appears to stop sending data after the "Server" header.

Preventing the simple_response function from sending the Content-Length header on 100-Continue seems to resolve this problem.

def my_crazy_app(environ, start_response):
          status = '200 OK'
          response_headers = [('Content-type','text/plain')]
          start_response(status, response_headers)
          return ['Hello world!\n']
if __name__=='__main__':
          from cherrypy.wsgiserver import CherryPyWSGIServer
          server = CherryPyWSGIServer((host, port), my_crazy_app)
          server.start()
192% cat config/curl
      --header "User-Agent: POSC WITSML Client"
      --header "Connection: close"  
      --header "Pragma: no-cache"  
      --header "Cache-Control: no-cache"  
      --header "Content-Type: text/xml; charset='utf-8'"  
      --max-time 300
      --max-redirs 5

    
192% curl --config config/curl --data @requests/GetFromStore_myWells.xml --trace-ascii test/GetFromStore_myWells.xml/trace.ascii.txt --header "Host: 192.168.11.28" --header "Port: 8080" --header "SoapAction: http://www.witsml.org/action/120/Store.WMLS_GetFromStore" --header "EndPointURL: /" http://192.168.11.28:8080/

== Info: About to connect() to 192.168.11.28 port 8080 (#0)

== Info:   Trying 192.168.11.28... == Info: connected

== Info: Connected to 192.168.11.28 (192.168.11.28) port 8080 (#0)

=> Send header, 330 bytes (0x14a)

      0000: POST / HTTP/1.1

      0011: Accept: */*

      001e: User-Agent: POSC WITSML Client

      003e: Connection: close

      0051: Pragma: no-cache

      0063: Cache-Control: no-cache

      007c: Content-Type: text/xml; charset='utf-8'

      00a5: Host: 192.168.11.28

      00ba: Port: 8080

      00c6: SoapAction: http://www.witsml.org/action/120/Store.WMLS_GetFromS

      0106: tore

      010c: EndPointURL: /

      011c: Content-Length: 3036

      0132: Expect: 100-continue

      0148:

<= Recv header, 14 bytes (0xe)

      0000: HTTP/1.1 100

<= Recv header, 19 bytes (0x13)

      0000: Content-Length: 0

<= Recv header, 26 bytes (0x1a)

      0000: Content-Type: text/plain

<= Recv header, 17 bytes (0x11)

      0000: HTTP/1.1 200 OK

<= Recv header, 26 bytes (0x1a)

      0000: Content-type: text/plain

<= Recv header, 28 bytes (0x1c)

      0000: Transfer-Encoding: chunked

<= Recv header, 19 bytes (0x13)

      0000: Connection: close

<= Recv header, 37 bytes (0x25)

      0000: Date: Tue, 04 Aug 2009 22:04:09 GMT

<= Recv header, 36 bytes (0x24)

      0000: Server: CherryPy/3.1.2 WSGI Server

<= Recv header, 2 bytes (0x2)

      0000:

== Info: we are done reading and this is set to close, stop send

== Info: transfer closed with outstanding read data remaining

== Info: Closing connection #0

curl: (18) transfer closed with outstanding read data remaining

zsh: exit 18    curl --config config/curl --data @requests/GetFromStore_myWells.xml

Change History

08/04/09 18:55:29: Modified by fumanchu

  • status changed from new to assigned.
  • description changed.
  • milestone set to 3.2.

Reformatted.

08/04/09 19:24:20: Modified by fumanchu

  • status changed from assigned to closed.
  • resolution set to fixed.

Fixed in 3.2/python3 in [2487]. Fixed in 3.0, 3.1, and 3.2/trunk in [2488].

Hosted by WebFaction

Log in as guest/cpguest to create tickets