Answered by:
HTTP Status 417: Expectation Failed

Question
-
Hi,
My vb2008 application is deployed at quite a few sites. It calls a few external webservices. From one client, the error message returned by the call to the webservice is The request failed with HTTP Status 417: Expectation failed.
It calls webservices on 2 servers - both external - it works with calls to one server but not the other (they are different functions). We don't have this problem from any other client...
Any idea ?
thanks
BruceWednesday, July 30, 2008 2:15 AM
Answers
-
HTTP protocol states that any message starting in the 4XX range is a SERVER error message. This means the server is choking on the request. Now all you have to do is find out why? For example we all know that 404 is page not found. That really is based most of the time in a client URL being wrong, however, the SERVER could have moved the page too...
The 417 is documented at W3 as follows:
10.4.18 417 Expectation Failed
The expectation given in an Expect request-header field (see section 14.20) could not be met by this server, or, if the server is a proxy, the server has unambiguous evidence that the request could not be met by the next-hop server.
Section 14.20 reads:14.20 Expect
The Expect request-header field is used to indicate that particular server behaviors are required by the client.
Expect = "Expect" ":" 1#expectation
expectation = "100-continue" | expectation-extension expectation-extension = token [ "=" ( token | quoted-string ) *expect-params ] expect-params = ";" token [ "=" ( token | quoted-string ) ]
A server that does not understand or is unable to comply with any of the expectation values in the Expect field of a request MUST respond with appropriate error status. The server MUST respond with a 417 (Expectation Failed) status if any of the expectations cannot be met or, if there are other problems with the request, some other 4xx status.
This header field is defined with extensible syntax to allow for future extensions. If a server receives a request containing an Expect field that includes an expectation-extension that it does not support, it MUST respond with a 417 (Expectation Failed) status.
Comparison of expectation values is case-insensitive for unquoted tokens (including the 100-continue token), and is case-sensitive for quoted-string expectation-extensions.
The Expect mechanism is hop-by-hop: that is, an HTTP/1.1 proxy MUST return a 417 (Expectation Failed) status if it receives a request with an expectation that it cannot meet. However, the Expect request-header itself is end-to-end; it MUST be forwarded if the request is forwarded.
Many older HTTP/1.0 and HTTP/1.1 applications do not understand the Expect header.
See section 8.2.3 for the use of the 100 (continue) status.
So what does this mean to you? Well..... what I'd do is download Wireshark and see what packet was sent that generates this, you can actually see the Header request that was made... From there you can back track in your code to see what caused it. Bottom line is that it looks like your client request was rejected by the Server as a "I can't do that"...
Javaman- Marked as answer by Mariya Atanasova [Microsoft Edge]Moderator Friday, August 8, 2008 9:36 PM
- Marked as answer by Mariya Atanasova [Microsoft Edge]Moderator Friday, August 8, 2008 9:36 PM
Friday, August 1, 2008 2:50 PM
All replies
-
Hi Bruce,
what is your application using? Is is HttpWebRequest? We are not setting the expectation header by default, unless you specifically add it yourself. If that is not the case please post a small snippet (if possible) of what your app is doing, get a System.Net trace log (or netmon capture) to see what goes on the wire to trigger the server to send this header. If you need instructions how to do this please go here:
http://blogs.msdn.com/ncl/archive/2008/07/25/how-to-troubleshoot-your-system-net-code.aspx
Thanks
MariyaThursday, July 31, 2008 3:42 PMModerator -
I had a problem like this before. I think it had something to do with asp.net writing a header called except continue. There is a static property to stop it.
System.Net.ServicePointManager.Expect100Continue = false;
Friday, August 1, 2008 4:44 AM -
HTTP protocol states that any message starting in the 4XX range is a SERVER error message. This means the server is choking on the request. Now all you have to do is find out why? For example we all know that 404 is page not found. That really is based most of the time in a client URL being wrong, however, the SERVER could have moved the page too...
The 417 is documented at W3 as follows:
10.4.18 417 Expectation Failed
The expectation given in an Expect request-header field (see section 14.20) could not be met by this server, or, if the server is a proxy, the server has unambiguous evidence that the request could not be met by the next-hop server.
Section 14.20 reads:14.20 Expect
The Expect request-header field is used to indicate that particular server behaviors are required by the client.
Expect = "Expect" ":" 1#expectation
expectation = "100-continue" | expectation-extension expectation-extension = token [ "=" ( token | quoted-string ) *expect-params ] expect-params = ";" token [ "=" ( token | quoted-string ) ]
A server that does not understand or is unable to comply with any of the expectation values in the Expect field of a request MUST respond with appropriate error status. The server MUST respond with a 417 (Expectation Failed) status if any of the expectations cannot be met or, if there are other problems with the request, some other 4xx status.
This header field is defined with extensible syntax to allow for future extensions. If a server receives a request containing an Expect field that includes an expectation-extension that it does not support, it MUST respond with a 417 (Expectation Failed) status.
Comparison of expectation values is case-insensitive for unquoted tokens (including the 100-continue token), and is case-sensitive for quoted-string expectation-extensions.
The Expect mechanism is hop-by-hop: that is, an HTTP/1.1 proxy MUST return a 417 (Expectation Failed) status if it receives a request with an expectation that it cannot meet. However, the Expect request-header itself is end-to-end; it MUST be forwarded if the request is forwarded.
Many older HTTP/1.0 and HTTP/1.1 applications do not understand the Expect header.
See section 8.2.3 for the use of the 100 (continue) status.
So what does this mean to you? Well..... what I'd do is download Wireshark and see what packet was sent that generates this, you can actually see the Header request that was made... From there you can back track in your code to see what caused it. Bottom line is that it looks like your client request was rejected by the Server as a "I can't do that"...
Javaman- Marked as answer by Mariya Atanasova [Microsoft Edge]Moderator Friday, August 8, 2008 9:36 PM
- Marked as answer by Mariya Atanasova [Microsoft Edge]Moderator Friday, August 8, 2008 9:36 PM
Friday, August 1, 2008 2:50 PM -
Did the post above answer your question? If so, please mark it as answered.
Thanks
MariyaWednesday, August 6, 2008 2:58 PMModerator