ServerXMLHTTP及XMLHTTP的差別

暫時將這個分類放在 asp 中.
一般在 client side 的 ajax 會用到這個 component (for IE) Microsoft.XMLHTTP, 若是在 server 端的 asp 程式碼使用這組 code, 來訪問其他站台的內容時, 可以利用程式碼如下:

Set xmlhttp = Server.CreateObject("Microsoft.XMLHTTP")
xmlhttp.Open "GET", "https://diary.tw/tim/", False
xmlhttp.Send
Response.Write xmlhttp.ResponseTEXT
Set xmlhttp = Nothing

不過這個有一些些問題, 因為 XMLHTTP 本身的工作行為是綁在 IE API 上, 當然是有好有壞, 根據微軟的文件, 這組元件是適合用在客戶端而非 server 端, 在使用上會有一些穩定及效能的問題, 不過更有趣的還有一個地方, 就是他會增進效能而在本機的檔案系統上存入訪問的內容, 路徑如下:

C:\WINDOWS\Temp\Temporary Internet Files\Content.IE5

也就是說, 會佔用掉部分的空間, 但實際觀察又不全然是這種 cache 的狀況, 因為相同的網頁, 被重覆 reload 時, 該 cache 用的目錄居然也會成長, 也就是說, 原來設計為 cache 的功能, 也有可能用不到, 但用不到還沒關係, 會一直佔用空間成長(無上限), 這個就比較麻煩了.

之前筆者在追蹤一個案例(c:碟佔用空間持續成長的狀況), 原來就是這個元件的毛病, 實際再測, 若是訪問的網頁是非 xml 時, 似乎就沒有這種狀況, 不過大多數的應用環境, 資料都會選 xml 的方式來傳送, 所以仍會有這個問題存在.

為了解決這個問題, 還有另一組元件可供使用, MSXML2.ServerXMLHTTP, 這組元件提供了更穩定的方式來執行前述功能, 而且幾乎完全相容語法, 並提供了更多的功能, 也不會產生大量的cache 暫存檔案, 我們來看看微軟官網上對此二者的比較:

http://support.microsoft.com/kb/290761

主要差異點如下:

XMLHTTP is designed for client applications and relies on URLMon, which is built upon Microsoft Win32 Internet (WinInet). ServerXMLHTTP is designed for server applications and relies on a new HTTP client stack, WinHTTP. ServerXMLHTTP offers reliability and security and is server-safe. For more information, see the MSXML Software Development Kit (SDK) documentation.

如此一來便可以很清楚地了解在 asp 程式內, 使用 XMLHTTP 及 ServerXMLHTTP 的差異了, 將上面的程式碼改為:

Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
xmlhttp.Open "GET", "https://diary.tw/tim/", False
xmlhttp.Send
Response.Write xmlhttp.ResponseTEXT
Set xmlhttp = Nothing

這樣就完成囉!

其他相關資料可以參考:
程式筆記本 – XMLHTTP 與 ServerXMLHTTP
ServerXMLHTTP与XMLHTTP区别和介绍

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *