diff --git a/dlls/msxml3/httprequest.c b/dlls/msxml3/httprequest.c index 55339e1bad6..d9f3f987a8d 100644 --- a/dlls/msxml3/httprequest.c +++ b/dlls/msxml3/httprequest.c @@ -880,6 +880,7 @@ static HRESULT verify_uri(httprequest *This, IUri *uri) static HRESULT httprequest_open(httprequest *This, BSTR method, BSTR url, VARIANT async, VARIANT user, VARIANT password) { + static const WCHAR MethodHeadW[] = {'H','E','A','D',0}; static const WCHAR MethodGetW[] = {'G','E','T',0}; static const WCHAR MethodPutW[] = {'P','U','T',0}; static const WCHAR MethodPostW[] = {'P','O','S','T',0}; @@ -915,6 +916,7 @@ static HRESULT httprequest_open(httprequest *This, BSTR method, BSTR url, This->verb = BINDVERB_POST; } else if (!strcmpiW(method, MethodDeleteW) || + !strcmpiW(method, MethodHeadW) || !strcmpiW(method, MethodPropFindW)) { This->verb = BINDVERB_CUSTOM; diff --git a/dlls/msxml3/tests/httpreq.c b/dlls/msxml3/tests/httpreq.c index 55ea8b6124d..a744b951d4f 100644 --- a/dlls/msxml3/tests/httpreq.c +++ b/dlls/msxml3/tests/httpreq.c @@ -1731,6 +1731,28 @@ static void test_XMLHTTP(void) EXPECT_HR(hr, S_OK); IObjectWithSite_Release(obj_site); + + /* HEAD request */ + hr = IXMLHttpRequest_put_onreadystatechange(xhr, NULL); + ok(hr == S_OK, "Failed to reset state change handler, hr %#x.\n", hr); + + test_open(xhr, "HEAD", xmltestA, S_OK); + + V_VT(&varbody) = VT_EMPTY; + hr = IXMLHttpRequest_send(xhr, varbody); + ok(hr == S_OK, "Failed to send HEAD request, hr %#x.\n", hr); + + str = NULL; + hr = IXMLHttpRequest_get_responseText(xhr, &str); + ok(hr == S_OK, "Failed to get response text, hr %#x.\n", hr); + ok(!*str, "Unexpected text %s.\n", wine_dbgstr_w(str)); + SysFreeString(str); + + hr = IXMLHttpRequest_getAllResponseHeaders(xhr, &str); + ok(hr == S_OK, "Failed to get response headers, hr %#x.\n", hr); + ok(str && *str, "Expected response headers.\n"); + SysFreeString(str); + IXMLHttpRequest_Release(xhr); free_bstrs(); }