2009-07-16 45 views
3

ISAPI篩選文檔說我可以撥打SF_REQ_SEND_RESPONSE_HEADER發送響應標題,並附加額外的標題。如何刪除ISAPI過濾器中的標題?

ISAPI也有AddResponseHeaders允許過濾器添加額外的標題發送到客戶端的響應。

有沒有一種方法,在ISAPI,刪除標題,否則將被髮送到客戶端?或者有些方法要求ISAPI運行時從響應中排除某些標題? ISAPI運行時似乎總是包含一個Server:頭,我想找到一種方法來刪除它。

我知道我可以在IIS管理器中以管理方式設置或取消設置標題,但那不是我想要的。我想在運行時在過濾器中,以編程方式並有條件地執行此操作。

編輯:BUMP。

回答

2

我寫過幾個ISAPI,其中一個具有您描述的功能。我用SF_NOTIFY_SEND_RAW_DATA - 我相信,第一個電話將是頭,所以你可以使用:

FilterContext-> ServerSupportFunction(FilterContext,SF_REQ_DISABLE_NOTIFICATIONS,0,SF_NOTIFY_SEND_RAW_DATA,0);

禁用未來原始數據的通知。然後在HTTP_FILTER_RAW_DATA結構中獲得當前頭文件pvInData,然後將其寫入到我分配的新HTTP_FILTER_RAW_DATA中(記住爲結構和pvInData使用FilterContext-> AllocMem)。完成後,將新標題寫出FilterContext-> WriteClient並返回SF_STATUS_REQ_READ_NEXT。

此外,在初始化時確保設置SF_NOTIFY_ORDER_HIGH和SF_NOTIFY_SEND_RAW_DATA。

通過查看我的舊代碼,這就是我所做的,它是專門刪除頭(加上它也添加了一個頭),所以它肯定會執行你需要做的。唯一需要注意的是,我記得有一些與IIS5中RAW_DATA有關的變化(當我寫這篇文章時)與IIS6 +有關,但我從不需要更新這個特定的ISAPI,所以我不知道是否有機會影響它的完成或者不。希望這可以幫助你,儘管你可能至少有你的問題風滾草! :)

+0

大,謝謝。一個好主意。我會試一試。 – Cheeso 2010-01-07 19:36:48

1

我用這個代碼重寫報頭(未Firefor HTML rendring B/C無頭本內容類型)

DWORD CMyAuthFilterImpl::OnSendRawData(PHTTP_FILTER_CONTEXT pfc, DWORD NotoficationType, LPVOID pvNotification) 
{ 
SF_STATUS_TYPE retStatus = SF_STATUS_REQ_NEXT_NOTIFICATION; 

if(m_bWriteHeader) 
{ 
    //rewriting response headers with correct information 
    pfc->ServerSupportFunction(pfc, SF_REQ_DISABLE_NOTIFICATIONS, 0, SF_NOTIFY_SEND_RAW_DATA, 0); 

    PHTTP_FILTER_RAW_DATA pSD = (PHTTP_FILTER_RAW_DATA)pvNotification; 
    DWORD dL = (DWORD)m_pszHeaders.length(); 
    pSD->pvInData = pfc->AllocMem(pfc, dL, 0); 

    memcpy(pSD->pvInData, (void*)m_pszHeaders.data(), dL); 
    pSD->cbInData = dL; 

    m_bWriteHeader=FALSE; 

    m_dwordHeaderLength=0; 
    m_pszHeaders.~basic_string(); 
    retStatus = SF_STATUS_REQ_NEXT_NOTIFICATION; 

} 


return retStatus; 
} 
相關問題