Why is Microsoft-HTTPAPI Returning 404 to My Network Switch?
Client (IE) requests to a static html keep_alive page seem to be working just fine but the network switch doing load balancing can't seem to request the same page when using the same EXACT URL. HTTPERR log entries coming from the switch give 404-NotFound -
. Its obviously not making it to IIS but why would HTTPAPI be rejecting this? Where can I see the reason code or error message, or something? Please help :|
Excerpt from HTTPERR: Failed requests by the Network Switch (IP's Removed)
2013-02-14 18:34:55 X.X.X.X 38676 X.X.X.X 80 HTTP/1.1 HEAD /keep_alive.html 404 - NotFound -
This repeats every few seconds as the switch attempts to get the page.
Captured network frames from my troubleshooting:
NETWORK SWITCH
- HTTP: Request, HEAD /keep_alive.html
Command: HEAD
- URI: /keep_alive.html
Location: /keep_alive.html
ProtocolVersion: HTTP/1.1
Host: X.X.X.X
Connection: Close
HeaderEnd: CRLF
- HTTP: Response, HTTP/1.1, Status: Not found, URL:
ProtocolVersion: HTTP/1.1
StatusCode: 404, Not found
Reason: Not Found
ContentLength: 315
- ContentType: text/html; charset=us-ascii
+ MediaType: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 15 Feb 2013 16:52:52 GMT
Connection: close
HeaderEnd: CRLF
DESKTOP
- HTTP: Request, GET /keep_alive.html
Command: GET
- URI: /keep_alive.html
Location: /keep_alive.html
ProtocolVersion: HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: en-US
UserAgent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: X.X.X.X
Connection: Keep-Alive
- Cookie: ...
- Http: Response, HTTP/1.1, Status: Ok, URL: /keep_alive.html
ProtocolVersion: HTTP/1.1
StatusCode: 200, Ok
Reason: OK
- ContentType: text/html
MediaType: text/html
ContentEncoding: gzip
Last-Modified: Fri, 26 Feb 2010 05:11:00 GMT
Accept-Ranges: bytes
ETag: "0aca15a2b6ca1:0"
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
XPoweredBy: ASP.NET
Date: Fri, 15 Feb 2013 17:15:13 GMT
ContentLength: 1514
HeaderEnd: CRLF
- payload: HttpContentType = text/html
HtmlElement: ...
Found a resolution.
The issue was with the binding configuration in IIS. The network switch generates a request based on IP address. In the request frame from the network switch (as seen above) you will notice that the Host
value is being passed as IP Address. A lack of appropriate binding apparently returns a 404 of this nature in the HTTPERR log only. Our IIS configuration only contained a binding for the DNS name.
TL;DR
Make sure your IIS bindings contain an entry for both IP & DNS or you will have a bad time.