Uploaded image for project: 'Bamboo Data Center'
  1. Bamboo Data Center
  2. BAM-5182

Agent upload of artifacts fails to set Content-Length in HTTP/1.1 (on lighthttpd or nginx)

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Fix
    • Icon: Low Low
    • 2.6 rc1, 2.6
    • 2.5
    • Artifacts
    • None

      Bamboo Agent upload of artifacts fails to set Content-Length:, causes problems when using a proxy that implements strict HTTP/1.1

      Our preferred reverse proxy solution is Lighttpd. However, use of Lighttpd resulted in failure of Bamboo Agents to upload artifacts to the Bamboo Server.

      Upon investigation, we discovered the following error in the Lighttpd error logs:

      2010-01-08 13:50:26: (request.c.1115) POST-request, but content-length missing -> 411

      HTTP/1.1 - http://www.ietf.org/rfc/rfc2616.txt - Section 4.4:

      ...
      For compatibility with HTTP/1.0 applications, HTTP/1.1 requests
      containing a message-body MUST include a valid Content-Length header
      field unless the server is known to be HTTP/1.1 compliant. If a
      request contains a message-body and a Content-Length is not given,
      the server SHOULD respond with 400 (bad request) if it cannot
      determine the length of the message, or with 411 (length required) if
      it wishes to insist on receiving a valid Content-Length.

      And below in section 10.4.12:

      10.4.12 411 Length Required

      The server refuses to accept the request without a defined Content-
      Length. The client MAY repeat the request if it adds a valid
      Content-Length header field containing the length of the message-body
      in the request message.

      And further below in section :

      14.13 Content-Length

      The Content-Length entity-header field indicates the size of the
      entity-body, in decimal number of OCTETs, sent to the recipient or,
      in the case of the HEAD method, the size of the entity-body that
      would have been sent had the request been a GET.

      Content-Length = "Content-Length" ":" 1*DIGIT

      An example is

      Content-Length: 3495

      Applications SHOULD use this field to indicate the transfer-length of
      the message-body, unless this is prohibited by the rules in section
      4.4.

      Any Content-Length greater than or equal to zero is a valid value.
      Section 4.4 describes how to determine the length of a message-body
      if a Content-Length is not given.

      Note that the meaning of this field is significantly different from
      the corresponding definition in MIME, where it is an optional field
      used within the "message/external-body" content-type. In HTTP, it
      SHOULD be sent whenever the message's length can be determined prior
      to being transferred, unless this is prohibited by the rules in
      section 4.4.

      According to my research, both Microsoft IIS and Lighttpd are strict on this. I have confirmed that Lighttpd does not have a configuration option to disable this level of strictness. Apache, however, is lax about enforcing this rule. As a result, Apache works and Lighttpd fails.

      Please correct the Bamboo Agent upload of artifacts to specify a Content-Length according to the specification defined above so we can switch back to Lighttpd.

              kbrazulewicz Krystian Brazulewicz
              ukuhnhardt Ulrich Kuhnhardt [Atlassian]
              Votes:
              1 Vote for this issue
              Watchers:
              5 Start watching this issue

                Created:
                Updated:
                Resolved:

                  Estimated:
                  Original Estimate - 4h Original Estimate - 4h
                  4h
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 10h
                  10h