我有一个 isapi 扩展,它通过 WriteClient() 返回一个图像文件。
我需要在标题中返回“Content-Type:image/jpeg”(否则调用应用程序将不会处理图像)
所以,我创建了一个HSE_SEND_HEADER_EX_INFO
结构并拥有成员pszHeader = "Content-Type: image/jpeg\r\n\r\n"
在我发出 WriteClient() 之前,我打电话给
ecb->ServerSupportFunction( ecb->ConnID, HSE_REQ_SEND_RESPONSE_HEADER_EX, &newHeader, NULL, NULL );
调用 ServerSupportFunction() 的返回值为 TRUE(无需调用 GetLastError())
但是,我的标头信息被放入正文中,默认标头被发送到客户端。这是发送给客户端的标头:
X-Cache: MISS from ip-172-18-8-226
Server: Microsoft-IIS/8.5
X-Cache-Lookup: HIT from ip-172-18-8-226:3128
Content-Length: NNN
Date: Thu, 21 Sep 2017 14:32:38 GMT
X-Powered-By: ASP.NET
Content-Type text/html
请注意,它不会将“Content-Type:”更改为“image/jpeg”,而是保留"Content-Type: text/html"
. 奇怪的是,它将我的标题信息放入(即正文的第一行是“Content-Type:image/jpeg”......后面是实际的图像数据)。
注 1:我已经尝试HSE_SEND_HEADER_INFO
和 HSE_REQ_VECTOR_SEND
. 两者都给出相同的行为。
注意 2:如果我删除 WriteClient() 调用并只调用 ecb->ServerSupportFunction(),我的返回数据是我似乎无法更改的默认标头,后跟一行(现在是内容正文) “内容类型:图像/JPEG”)。因此,此行为不是由通过调用 WriteClient() 发送标头数据引起的
如何修改响应标头以便发送修改后的“Content-Type:”?