天天看點

IE 11 請求語言zh-Hans-CN所引發的問題及解決方案

寫在前面

首先感謝問題最終解決人:田志輝(音泰思公司【日本】)、白軍(北京音泰思)

感謝常先魏(上海辛諾)、王銘孜(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 。