国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > AJAX > 正文

關(guān)于使用ajax在IE瀏覽器下通過POST方式提交到后臺(tái)的一

2024-09-01 08:30:39
字體:
供稿:網(wǎng)友
這個(gè)問題只存在客戶端是IE或IE內(nèi)核的情況,但是你無法控制客戶端使用什么瀏覽器,所以仍然會(huì)給你的應(yīng)用造成很大的性能問題。

以下討論的是和瀏覽器 POST提交 后臺(tái)BUG 相關(guān)的關(guān)于使用ajax在IE瀏覽器下通過POST方式提交到后臺(tái)的一些BUG解析教程文章,內(nèi)容是本站精心挑選整理的教程,希望對(duì)廣大的網(wǎng)友給到幫助,下面是詳細(xì)內(nèi)容:

這個(gè)問題只存在客戶端是IE或IE內(nèi)核的情況,但是你無法控制客戶端使用什么瀏覽器,所以仍然會(huì)給你的應(yīng)用造成很大的性能問題。
我們先說現(xiàn)象:
服務(wù)端:我們只用一個(gè)靜態(tài)的HTML頁面ok.html,內(nèi)容只返OK.
然后我們寫一個(gè)ajax調(diào)用的html在客戶端訪問:
<script>
function send_request(method,url,param) {
    http_request = false;
    if (window.XMLHttpRequest) {
        http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
            }
        }
    }
    if (!http_request) {
        return;
    }
    http_request.open(method, url,true);
    http_request.send(param);
}
function get(){
    var url = "http://myhost/ok.html?name=axman&test=123";
    for(var i=0;i<1000;i++){
        send_request("GET",url,null);
    }
}
function post(){
    var url = "http://myhost/ok.html";
    for(var i=0;i<1000;i++){
        send_request("POST",url,'name=axman&test=123');
    }
}
</script>
<input type="button" name="b1" value="get" onclick="get()">
<input type="button" name="b2" value="post" onclick="post()">
這個(gè)頁面上兩種方式訪問和傳遞的參數(shù)完全一致,當(dāng)我按下get按鈕后,服務(wù)端收到了1000個(gè)訪問記錄。
[admin@vm-platform access_log]$ cat apache_access.log.4 wc -l
1000
然后我統(tǒng)計(jì)訪問時(shí)間大于1ms的記錄:
[admin@vm-platform access_log]$ cat apache_access.log.4 awk '{if($12 > 1000) print $0}'
結(jié)果是空。
現(xiàn)在我們?cè)侔聪翽OST按鈕:
[admin@vm-platform access_log]$ cat apache_access.log.4 wc -l
2000
當(dāng)服務(wù)端顯示2000時(shí),說明訪問完成。

  [admin@vm-platform access_log]$ cat apache_access.log.4 awk '{if($12 > 1000) print $0}'的結(jié)果:
10.16.14.82 - - - [24/Nov/2011:16:08:55 +0800] "POST /myhost/ok.html HTTP/1.1" 200 20 696078 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" - - "a=-; b=-; c=-" -
10.16.14.82 - - - [24/Nov/2011:16:08:55 +0800] "POST /myhost/ok.html HTTP/1.1" 200 20 696045 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" - - "a=-; b=-; c=-" -
10.16.14.82 - - - [24/Nov/2011:16:08:55 +0800] "POST /myhost/ok.html HTTP/1.1" 200 20 695776 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" - - "a=-; b=-; c=-" -
10.16.14.82 - - - [24/Nov/2011:16:08:55 +0800] "POST /myhost/ok.html HTTP/1.1" 200 20 695332 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" - - "a=-; b=-; c=-" -
10.16.14.82 - - - [24/Nov/2011:16:08:55 +0800] "POST /myhost/ok.html HTTP/1.1" 200 20 696500 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" - - "a=-; b=-; c=-" -
10.16.14.82 - - - [24/Nov/2011:16:08:55 +0800] "POST /myhost/ok.html HTTP/1.1" 200 20 696484 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" - - "a=-; b=-; c=-" -
10.16.14.82 - - - [24/Nov/2011:16:08:55 +0800] "POST /myhost/ok.html HTTP/1.1" 200 20 696215 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" - - "a=-; b=-; c=-" -
10.16.14.82 - - - [24/Nov/2011:16:08:55 +0800] "POST /myhost/ok.html HTTP/1.1" 200 20 696235 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" - - "a=-; b=-; c=-" -
10.16.14.82 - - - [24/Nov/2011:16:08:55 +0800] "POST /myhost/ok.html HTTP/1.1" 200 20 696182 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" - - "a=-; b=-; c=-" -
10.16.14.82 - - - [24/Nov/2011:16:08:55 +0800] "POST /myhost/ok.html HTTP/1.1" 200 20 694964 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" - - "a=-; b=-; c=-" -
10.16.14.82 - - - [24/Nov/2011:16:08:58 +0800] "POST /myhost/ok.html HTTP/1.1" 200 20 1274 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" - - "a=-; b=-; c=-" -
10.16.14.82 - - - [24/Nov/2011:16:08:59 +0800] "POST /myhost/ok.html HTTP/1.1" 200 20 1019 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" - - "a=-; b=-; c=-" -


請(qǐng)注意apache %D記錄的時(shí)間是從第一個(gè)頭域(讀到第一個(gè)換行回車開始)記時(shí)到響應(yīng)輸出(協(xié)議層,只要寫到BUFF中,不一定已經(jīng)發(fā)送到客戶端)。這個(gè)時(shí)間單位是
微秒,請(qǐng)看一下其中有10條記錄近700ms,是get方式的千倍。
因?yàn)檫@個(gè)現(xiàn)象給我們的兩個(gè)應(yīng)用帶來性能問題,我開始分析這個(gè)原因,后來從網(wǎng)上搜索到文章說IE內(nèi)核的瀏覽器在AJAX調(diào)用時(shí),對(duì)POST方式采用兩步發(fā)送,第一次發(fā)送
頭域,第二次發(fā)送BODY。中間有很大的延遲,有時(shí)還會(huì)造成BODY包丟失,我們從網(wǎng)絡(luò)抓包的情況看,確實(shí)存在只發(fā)送了HEADER,后面只有服務(wù)端超時(shí)返回的錯(cuò)誤數(shù)據(jù)包,再也沒有BODY的數(shù)據(jù)。這樣的機(jī)率大約有1%.
這個(gè)問題在apache作為proxy時(shí),proxy就不能在有效的時(shí)間內(nèi)將客戶端請(qǐng)求發(fā)送給backend,造成大量的內(nèi)部錯(cuò)誤輸出。如果是SS還會(huì)引起數(shù)據(jù)時(shí)序混亂。在發(fā)送/r/n/r/n后頭域還有尾巴沒有發(fā)送完成,這些現(xiàn)象都是從網(wǎng)絡(luò)抓包監(jiān)控到的。
如果換成fireFox,同樣的AJAX代碼執(zhí)行POST就沒有問題,關(guān)鍵是你根本無法控制用戶不使用IE。
網(wǎng)上給出的解決方案試了一下根本不起作用(也許IE6可以起作用,我用的IE8就沒有細(xì)測(cè)IE6),關(guān)鍵是只要部分瀏覽器發(fā)生這個(gè)情況,就會(huì)給應(yīng)用帶來很大的性能問題。
所以盡量少使用AJAX的POST方式提交數(shù)據(jù),但是有時(shí)服務(wù)端為了安全的原因只允許POST提交,可以動(dòng)態(tài)構(gòu)造FORM表單,而盡量少使用AJAX來調(diào)用POST。


End. 教程到這里講完了,閱讀是否有所收獲呢?本站還提供有瀏覽器 POST提交 后臺(tái)BUG 相關(guān)的內(nèi)容,歡迎繼續(xù)閱讀。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 修文县| 庆安县| 大理市| 兰州市| 汉寿县| 石景山区| 龙游县| 卓尼县| 旌德县| 陇南市| 昭苏县| 镇远县| 融水| 信宜市| 香河县| 崇文区| 潼南县| 阿鲁科尔沁旗| 吉木萨尔县| 古丈县| 伊川县| 和龙市| 江阴市| 富顺县| 齐齐哈尔市| 观塘区| 高陵县| 铁力市| 盐亭县| 罗山县| 威信县| 云南省| 东台市| 陈巴尔虎旗| 子洲县| 寻甸| 惠来县| 肃北| 卓资县| 宾川县| 灌云县|