Herong's Tutorial Notes on Web Service and SOAP
Dr. Herong Yang, Version 4.00

SOAP 1.1 Request - Content-Length Too Small

This section provides a tutorial example of SOAP 1.1 request to use the GetSpeech Web service provided at xmlme.com. A 'Bad Request' error is received, if Content-Length is not enough to cover the entire XML message in the request.

Now let's use my Perl socket test program to send a SOAP 1.1 request to a public Web service provided at xmlme.com.

xmlme.com provides a public Web service called GetSpeech with SOAP 1.1. GetSpeech reads a phrase from one of Shakespeare's plays from the request and returns speech, speaker, and play in the response. According to the instructions given at http://www.xmlme.com/WSShakespeare.asmx?op=GetSpeech, I prepared by first request sample, soap_1_1_GetSpeech.req:

POST /WSShakespeare.asmx HTTP/1.1
Host: www.xmlme.com
Content-Type: text/xml; charset=utf-8
Content-Length: 100
SOAPAction: "http://xmlme.com/WebServices/GetSpeech"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetSpeech xmlns="http://xmlme.com/WebServices">
      <Request>To be, or not to be</Request>
    </GetSpeech>
  </soap:Body>
</soap:Envelope>

Here is the response I got from my first test:

\herong>SocketRequestResponse.pl www.xmlme.com 80 
   soap_1_1_GetSpeech.req soap_1_1.res

\herong>type soap_1_1.res
HTTP/1.1 400 Bad Request
Connection: close
Date: ... 2009
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Length: 0

The "Bad Request" error was expected, because I put 100 as the "Content-Length" in the request. Here is my guess on what happened to this example:

  • When using the "POST" command in a HTTP request, the HTTP server reads content of the request upto the number of bytes given in the Content-Length header line. In this example, the server reads only the first 100 bytes of the XML message in request content, because of "Content-Length: 100".
  • If "text/xml" is specified in the "Content-Type" header line, the HTTP server will make sure the content is well-formed XML message. If not, the server will return the "Bad Request" error. In this example, the server stopped reading the XML after first 100 bytes. Then it checked the XML message and declared that XML is bad and the request is bad.

Now I learned that HTTP servers do pay attention to the "Content-Length" header line in the request. I will provide a better value for "Content-Length" and try again in the next tutorial.

Last update: 2009.

Sections in This Chapter

SocketRequestResponse.pl - Socket Level Testing Program

Examples of HTTP 1.0 Requests and Responses

Examples of HTTP 1.1 Requests and Responses

SOAP 1.1 Request - Content-Length Too Small

SOAP 1.1 Request - Content-Length Too Large

SOAP 1.1 Request and Response of GetSpeech

SOAP 1.2 Request and Response of GetSpeech

Dr. Herong Yang, updated in 2009
SOAP 1.1 Request - Content-Length Too Small