寫在前面
首先感謝問題最終解決人:田志輝(音泰思公司【日本】)、白軍(北京音泰思)
感謝常先魏(上海辛諾)、王銘孜(OpenText 中國)、Tarun Nagalla(OpenText)、Pavan Chilaka(OpenText)、張玉明(聯通系統內建公司)在解決、分析問題過程中所提供的幫助。
感謝CSDN部落格為技術交流提供的平台。
故事是這樣的,去年(2015年)七月份,使用者就提出将新系統(注:2014年規劃設計,2015年年初開始實施)定位使用Win10作業系統,浏覽器要支援IE11(微軟Internet Explorer 11)。而合作夥伴卻說Opentext Cordys BOP 4.3不支援IE11[1],而且沒有沒有解決方案。
由于設計方案中,界面部分采用HTML5+JS(JQuery)技術,繞開系統平台XForm技術,也能達到支援IE11要求。
但是,當去年年末,新系統上線後,當系統出現未控制到的錯誤時,将彈出XForm界面,或者,使用者偶爾通路到系統管理平台界面,将發生問題[2]。
此問題也将會給生産環境帶來隐患,也就是使用者偶爾通路到系統管理平台界面時,将短時間内造成系統性能下降。
今年5月份,将此問題送出到OpenText技術支援,此後過程大緻情況見《 IE 11 通路Cordys BOP 4.3 問題分析》
描述。
再補充一點問題分析内容:英文、日文環境都無此現象。
昨日(7月7日),我在CSDN部落格發表了《 IE 11 通路Cordys BOP 4.3 問題分析》博文,并分享到微信朋友圈。
很幸運,Intasect的白軍把此文轉給了田志輝,在這些友人的幫助下,問題得以解決。
産生問題的原因是 IE 11的HTTP RequestHeader Accept-Language 是 zh-Hans-CN,Cordys的SOAP請求不識别IE11請求中語言(language)zh-Hans-CN:
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP:Body>
<Generate xmlns="http://schemas.cordys.com/1.0/xform">
<hostname>10.64.50.153</hostname>
<parameters>organization=o=HLJ,cn=cordys,cn=defaultInst,o=hlcuc.com</parameters>
<organization>o=HLJ,cn=cordys,cn=defaultInst,o=hlcuc.com</organization>
<baseurl>http://10.64.50.153:80/home/HLJ/</baseurl>
<isIE6>false</isIE6>
<preview>false</preview>
<key lastModified="">/com/cordys/cusp/cusp.caf</key>
<language>zh-Hans-CN</language>
</Generate>
</SOAP:Body>
</SOAP:Envelope>
注意IE11将zh-CN改為了zh-Hans-CN。
解決方案是設定Web網關服務語言轉換,本系統使用Apache Http服務,是以,設定與Apache相關的配置即可。
# Cordys Apache 2.0 Configuration Settings
LoadModule deflate_module modules/mod_deflate.so
......
<LocationMatch ^/(cordys|home)>
Header set X-UA-Compatible "IE=EmulateIE8,IE=EmulateIE10"
RequestHeader set Accept-Language "zh-CN,zh;q=0.8"
</LocationMatch>
[1].《 Cordys對浏覽器支援資訊(Support information on latest browsers) 》,譯 肖永威 2016.01
[2].《 IE 11 通路Cordys BOP 4.3 問題分析》 肖永威 2016.07
[3]. 百度.Accept-Language
Accept-Language 是HTTP 請求裡面的一個屬性,用于告訴伺服器浏覽器可以支援什麼語言。 如果網站支援多語種的話,可以使用這個資訊來決定傳回什麼語言的網頁 。
Accept-Language: zh-CN,fr-FR;q=0.5這裡zh-CN 是表示中文,fr-FR 是表示法語。 這是RFC1766定義的語言表示方式。預設情況下,IE使用Windows default locale 來決定Accept-Language 屬性。Windows default locale 可以通過Win32 API函數 GetUserDefaultLCID 來取得。另外,shell API 提供 GetAcceptLanguages 函數來取得IE的Accept-Language 。