国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 肇东市| 平远县| 卢氏县| 横山县| 嘉峪关市| 泗洪县| 博野县| 河北区| 尉氏县| 渝中区| 亳州市| 崇阳县| 江油市| 嘉峪关市| 达日县| 颍上县| 富裕县| 保定市| 马山县| 德安县| 东丽区| 东宁县| 平湖市| 东明县| 横山县| 和硕县| 浙江省| 抚顺市| 徐闻县| 朝阳区| 泗洪县| 延寿县| 福州市| 吉林省| 皋兰县| 闸北区| 九龙坡区| 噶尔县| 太仓市| 孙吴县| 依安县|