數(shù)據(jù)交互

概述

  • 客戶(hù)端和服務(wù)器之間交互的時(shí)候傀蓉,客戶(hù)端不僅可以發(fā)送請(qǐng)求給服務(wù)器撩幽,還可以把一些內(nèi)容傳遞給服務(wù)器;服務(wù)器接收到請(qǐng)求后退唠,也會(huì)把一些內(nèi)容返回給客戶(hù)端鹃锈; 客戶(hù)端 <----> 服務(wù)器
  • [HTTP報(bào)文] 客戶(hù)端和服務(wù)器之間傳輸?shù)膬?nèi)容統(tǒng)稱(chēng)為HTTP報(bào)文
  • 首部(頭):通用首部、請(qǐng)求頭瞧预、響應(yīng)頭屎债、自定義頭
  • 主體:請(qǐng)求主體仅政、響應(yīng)主體

AJAX的四步

  • 1、 創(chuàng)建AJAX對(duì)象
    var xhr=new XMLHttpRequest;
  • 2盆驹、打開(kāi)請(qǐng)求的URL地址(配置一些基礎(chǔ)參數(shù))
    xhr.open([http method],[Request url and parameters],[sync/async],[user name],[user pass]);
  • 3圆丹、綁定事件,用來(lái)監(jiān)聽(tīng)AJAX狀態(tài)的改變,在不同狀態(tài)做不同的事情
    xhr.onreadystatechange=function(){
    if(xhr.readyState===4 && /^2\d{2}$/.test(xhr.status)){
    xhr.responseText;//->獲取響應(yīng)主體內(nèi)容
    }
    }
  • 4、發(fā)送AJAX請(qǐng)求
    xhr.send([post data]);

細(xì)節(jié):

  • 1躯喇、創(chuàng)建AJAX對(duì)象使用XMLHttpRequest在IE6瀏覽器中不兼容辫封,我么需要使用ActiveXObject來(lái)做處理

  • 2、http method ->HTTP請(qǐng)求方式
    不管使用哪一種方式廉丽,客戶(hù)端都可以把數(shù)據(jù)傳遞給服務(wù)器倦微,服務(wù)器也會(huì)把數(shù)據(jù)返回給客戶(hù)端

  • Request url 請(qǐng)求的URL地址,我們通過(guò)這個(gè)地址就可以找到對(duì)應(yīng)的服務(wù)器以及對(duì)應(yīng)的服務(wù)正压,再以及對(duì)應(yīng)的目錄地址(我們想要的). 真實(shí)項(xiàng)目中欣福,這個(gè)地址后臺(tái)開(kāi)發(fā)提供給前端的(API文檔).

  • async/sync 同步或者異步,不寫(xiě)默認(rèn)是true->異步焦履,寫(xiě)成false是同步
    同步:AJAX請(qǐng)求沒(méi)有完成劣欢,其它事情做不了
    異步:AJAX請(qǐng)求沒(méi)有完成,繼續(xù)可以做其它的事情

HTTP方法以及GET系列請(qǐng)求和POST系列請(qǐng)求的區(qū)別:

  • 本質(zhì):get系列的一般應(yīng)用于給服務(wù)器的少裁良,從服務(wù)器拿的多這種需求,而post系列的一般應(yīng)用于校套,給服務(wù)器的多价脾,從服務(wù)器拿的少。在真實(shí)項(xiàng)目中笛匙,GET系列的話(huà)侨把,我們傳遞給服務(wù)器內(nèi)容一般都通過(guò)問(wèn)號(hào)傳參的方式,而POST系列一般都把數(shù)據(jù)放在請(qǐng)求主體中傳遞給服務(wù)器(約定俗成的規(guī)范)妹孙。

  • GET 從服務(wù)器獲取資源
    POST 往服務(wù)器發(fā)送資源
    HEAD 服務(wù)器響應(yīng)報(bào)文只需包含起始行和首部秋柄,不需要返回響應(yīng)主體。
    DELETE 告訴服務(wù)器刪除某個(gè)資源
    PUT 往服務(wù)器發(fā)送資源

  • GET請(qǐng)求沒(méi)有POST請(qǐng)求傳遞給服務(wù)器的內(nèi)容多
    GET: xhr.open('get','/getAll?name=zf&age=7');
    POST: xhr.open('post'.'/register');
    xhr.send('{"name":"劉曉洋","age":8...}');//->在SEND中傳遞的內(nèi)容就是通過(guò)請(qǐng)求主體的方式把數(shù)據(jù)傳遞給服務(wù)器,我們一般都用JSON格式的字符串給服務(wù)器傳遞對(duì)應(yīng)的內(nèi)容蠢正。
    每一個(gè)瀏覽器對(duì)于URL的長(zhǎng)度都是由大小限制的(谷歌8KB骇笔、火狐7KB、IE2KB)嚣崭,所以使用GET請(qǐng)求我們不會(huì)給服務(wù)器傳遞太多的內(nèi)容笨触,因?yàn)槌^(guò)限制的部分瀏覽器就會(huì)自己把它截了;而POST理論上不會(huì)受到限制的雹舀。

  • GET請(qǐng)求會(huì)出現(xiàn)緩存(這里的緩存我們無(wú)法控制),POST不會(huì)
    不想要緩存的話(huà),我們?cè)诿恳淮握?qǐng)求的時(shí)候在URL的末尾追加一個(gè)隨機(jī)數(shù)即可
    xhr.open('get','/getAll?name=zf&age=7&_='+Math.random());

  • GET請(qǐng)求沒(méi)有POST請(qǐng)求安全

  • GET特點(diǎn):
    1芦劣、html中所有的href和src以及通過(guò)地址欄訪(fǎng)問(wèn)的資源,都是get方法
    2说榆、沒(méi)有請(qǐng)求主體
    3虚吟、因?yàn)樵摲椒](méi)有請(qǐng)求主體寸认,所以需要把參數(shù)格式為請(qǐng)求參數(shù),拼接到URL后面
    4串慰、對(duì)發(fā)送的數(shù)據(jù)有大小限制(因?yàn)闉g覽器對(duì)URL的長(zhǎng)度有大小限制 ie 2k偏塞,chrome 8k,ff 7k)
    5模庐、可以被瀏覽器緩存(通過(guò)響應(yīng)首部實(shí)現(xiàn))

  • POST特點(diǎn):
    1烛愧、有請(qǐng)求主體
    2、沒(méi)有大小限制
    3掂碱、永遠(yuǎn)不會(huì)被瀏覽器緩存
    4怜姿、數(shù)據(jù)即可以放在請(qǐng)求主體中,也可以放在請(qǐng)求參數(shù)中

  • HEAD特點(diǎn):
    1疼燥、和GET特點(diǎn)一模一樣
    2沧卢、沒(méi)有響應(yīng)主體
    3、該方法既沒(méi)有請(qǐng)求主體醉者,也沒(méi)有響應(yīng)主體

  • DELETE特點(diǎn):
    1但狭、和GET特點(diǎn)一模一樣
    2、響應(yīng)成功的狀態(tài)碼為202

  • PUT特點(diǎn):
    1撬即、和POST特點(diǎn)一模一樣
    2立磁、該方法有冪等性,而POST沒(méi)有
    冪等性= X^n===X

AJAX這件事的開(kāi)始和結(jié)束:

  • 從執(zhí)行SEND后才發(fā)送的請(qǐng)求,AJAX這件事才開(kāi)始;到xhr.readyState===4的時(shí)候剥槐,服務(wù)器才把所有的內(nèi)容返回給客戶(hù)端唱歧,此時(shí)AJAX這件事才結(jié)束。
  • userName/userPass:一般不用
  • xhr.onreadystatechange:AJAX的一個(gè)事件,當(dāng)AJAX狀態(tài)發(fā)生改變的時(shí)候就會(huì)觸發(fā)這個(gè)事件,如果給這個(gè)事件綁定了方法,那么方法也會(huì)被執(zhí)行
  • xhr.readyState:
    0 UNSEND 未發(fā)送粒竖,執(zhí)行完成new XMLHttpRequest的時(shí)候狀態(tài)就為0了
    1 OPENED 已打開(kāi)颅崩,執(zhí)行完成xhr.open狀態(tài)變?yōu)?了
    2 HEADERS_RECEIVED 響應(yīng)頭信息已經(jīng)接收
    3 LOADING 響應(yīng)主體內(nèi)容正在加載
    4 DONE 響應(yīng)主體內(nèi)容加載完成
  • xhr.timeout=3000 ->設(shè)置超時(shí)時(shí)間 xhr.ontimeout=function(){}
    xhr.abort() ->終止AJAX執(zhí)行
    getAllResponseHeaders() ->獲取響應(yīng)頭中的所有信息
    getResponseHeader([key]) ->獲取響應(yīng)頭中的指定信息 xhr.getResponseHeader('Date') ->獲取響應(yīng)頭中存儲(chǔ)的服務(wù)器時(shí)間
    setRequestHeader([key],[value]) ->設(shè)置請(qǐng)求頭信息

URL內(nèi)容

  • URI 統(tǒng)一資源標(biāo)識(shí)符
  • URL 統(tǒng)一資源定位符
  • 作用:標(biāo)識(shí)該資源在整個(gè)互聯(lián)網(wǎng)上的唯一位置。
  • 格式:
    http://zhangyatao:123456@www.baidu.com:80
    http://www.baidu.com/s?wd=a&b=2&c=3
    <方案>://<<用戶(hù)名>>:<<密碼>>@<域名>:<端口>/<請(qǐng)求路徑>?<請(qǐng)求參數(shù)>#<hash>hash
  • 名詞解釋?zhuān)?br> 方案:標(biāo)識(shí)該請(qǐng)求使用什么協(xié)議去請(qǐng)求蕊苗,如果不填寫(xiě)沿后,瀏覽器設(shè)置默認(rèn)方案為http
    端口:指定與服務(wù)器交互的端口。如果不填寫(xiě)會(huì)根據(jù)方案選擇默認(rèn)端口朽砰。
    默認(rèn)端口:
    http -> 80
    https -> 443
    ftp -> 21
    請(qǐng)求路徑:指定請(qǐng)求的資源路徑
    請(qǐng)求參數(shù)的格式是固定的:?key=value&key1=value1&key2=value2
    請(qǐng)求參數(shù):針對(duì)該次請(qǐng)求的過(guò)濾條件
    錨點(diǎn):高級(jí)功能->實(shí)現(xiàn)前端路由
    URI是URL的超集->URI包括URL URN

網(wǎng)址訪(fǎng)問(wèn)的流程

1尖滚、解析URL
2、DNS解析(domain naming service) 把域名解析為ip地址
3瞧柔、使用URL指定的協(xié)議熔掺,通過(guò)ip和端口去連接服務(wù)器
4、等待服務(wù)器響應(yīng)
5非剃、連接成功之后置逻,發(fā)送請(qǐng)求
6、等到服務(wù)器響應(yīng)
7备绽、接收服務(wù)器響應(yīng)
8券坞、渲染收到的數(shù)據(jù)并斷開(kāi)連接

http協(xié)議:
原因:全世界90%的互聯(lián)網(wǎng)流量都是通過(guò)http協(xié)議傳輸鬓催;ajax的內(nèi)部原始就是操作的http協(xié)議;每一個(gè)前端開(kāi)發(fā)人員必須掌握該協(xié)議恨锚;
超文本傳輸協(xié)議

作用:負(fù)責(zé)連接并傳輸http客服端和http服務(wù)器之間的數(shù)據(jù)宇驾。

請(qǐng)求:http客戶(hù)端發(fā)送給http服務(wù)器
響應(yīng):http服務(wù)器返回給http客戶(hù)端

順序是固定的:先請(qǐng)求 后響應(yīng)
請(qǐng)求和響應(yīng)中的數(shù)據(jù),統(tǒng)稱(chēng)為報(bào)文猴伶。

事務(wù):事務(wù)包含[1,無(wú)限大)個(gè)事件课舍,只有當(dāng)包含的所有事件都完成,那么這個(gè)事務(wù)才算完成他挎,否則失敗筝尾。

http協(xié)議是一個(gè)事務(wù),包含請(qǐng)求和響應(yīng)兩個(gè)事件办桨。當(dāng)請(qǐng)求和響應(yīng)都完成之后筹淫,http才算完成,否則失敗呢撞。

報(bào)文的結(jié)構(gòu):

請(qǐng)求報(bào)文:
  • 1损姜、起始行(請(qǐng)求行)
    作用:標(biāo)識(shí)該請(qǐng)求基本信息
    http方法、請(qǐng)求地址殊霞、http版本號(hào)

  • 2摧阅、首部(附屬信息)
    cookie
    user-agent
    PC:
    Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2679.0 Safari/537.36
    mobile:
    Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1

  • 3、主體(存放數(shù)據(jù))
    文件上傳绷蹲、注冊(cè)用戶(hù)

響應(yīng)報(bào)文:
  • 1逸尖、起始行(響應(yīng)的基本信息)
    http版本號(hào)、服務(wù)器響應(yīng)碼瘸右、狀態(tài)碼描述符
  • 2、首部
    date
    content-length
  • 3岩齿、主體

xhr.status:服務(wù)器響應(yīng)的狀態(tài)碼

  • 1xx http協(xié)議正在初始化
    101 切換協(xié)議 websocket
  • 2xx http客戶(hù)端請(qǐng)求成功
    200 成功
    202 服務(wù)器接受該請(qǐng)求
  • 3xx 重定向和緩存
    301 永久移動(dòng)
    302 臨時(shí)移動(dòng)
    站點(diǎn)或者頁(yè)面之前的跳轉(zhuǎn)太颤,需要設(shè)置Location響應(yīng)首部,來(lái)指定跳轉(zhuǎn)的地址
    301會(huì)降低搜索引擎權(quán)重盹沈,而302不會(huì)龄章。
    304 請(qǐng)求的靜態(tài)資源未改變(緩存)
    需要使用2個(gè)響應(yīng)首部和2請(qǐng)求首部
    響應(yīng)首部:
    last-modified 標(biāo)識(shí)請(qǐng)求的靜態(tài)資源在服務(wù)器上最后一次修改的時(shí)間(GMT格式)
    etag 實(shí)體標(biāo)簽,服務(wù)器會(huì)給每個(gè)靜態(tài)資源打上一個(gè)標(biāo)簽乞封,只要這個(gè)靜態(tài)資源已修改做裙,那么將會(huì)生成一個(gè)新標(biāo)簽。
    請(qǐng)求首部:
    if-modified-since 該靜態(tài)資源上一次請(qǐng)求時(shí)在服務(wù)器最后一次修改的時(shí)間
    if-none-match 該靜態(tài)資源上一次請(qǐng)求時(shí)再服務(wù)器中的實(shí)體標(biāo)簽
    強(qiáng)緩存
    expire
    過(guò)期時(shí)間肃晚,單位是GMT锚贱。過(guò)期時(shí)間沒(méi)有到期之前,一直使用不會(huì)去服務(wù)器請(qǐng)求該資源关串。
    缺點(diǎn):因?yàn)槊看涡r?yàn)該資源有沒(méi)有到期拧廊,都是根據(jù)瀏覽器時(shí)間去校驗(yàn)监徘,而瀏覽器時(shí)間是可以更改的。所以該緩存方案有一定的誤差吧碾。
    cache-control:max-age 緩存多少秒
  • 4xx http客戶(hù)端請(qǐng)求失敗
    400 錯(cuò)誤的請(qǐng)求
    缺少參數(shù)凰盔、方案錯(cuò)誤、端口錯(cuò)誤倦春、url長(zhǎng)度過(guò)長(zhǎng)
    401 未認(rèn)證
    403 禁止訪(fǎng)問(wèn)
    404 未找到該資源
  • 5xx http服務(wù)器錯(cuò)誤
    只要出現(xiàn)5xx的狀態(tài)碼户敬,一定是服務(wù)器的錯(cuò)誤,和前端沒(méi)有任何關(guān)系睁本。
    MIME Type
    多用途因特網(wǎng)郵件擴(kuò)展
    作用:標(biāo)識(shí)請(qǐng)求或響應(yīng)數(shù)據(jù)的格式
    MIME Type在http協(xié)議是通過(guò)通用首部Content-Type來(lái)標(biāo)識(shí)尿庐。
    html text/html
    css text/css
    js text/javascript
    json application/json
    png image/png
    jpg image/jpeg
    jpeg image/jpeg
    gif image/gif
    格式:父類(lèi)型/子類(lèi)型
    注意事項(xiàng):當(dāng)內(nèi)容為文本時(shí),可以通過(guò)content-type來(lái)指定內(nèi)容的編碼格式
    返回UTF-8格式的html
    content-type: text/html; charset=utf-8

http版本號(hào)之間的區(qū)別:

  • http的版本號(hào) 0.9添履、 1.0屁倔、 1.1、 2.0
  • 1.1和2.0的區(qū)別
    1暮胧、多路復(fù)用
    2锐借、首部壓縮
    3、服務(wù)器推送
    4往衷、數(shù)據(jù)格式從字符串改為數(shù)據(jù)幀
    表單提交有一個(gè)專(zhuān)門(mén)的Content-Type application/x-ww-form-urlencoded
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末钞翔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子席舍,更是在濱河造成了極大的恐慌布轿,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件来颤,死亡現(xiàn)場(chǎng)離奇詭異汰扭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)福铅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)萝毛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人滑黔,你說(shuō)我怎么就攤上這事笆包。” “怎么了略荡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵庵佣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我汛兜,道長(zhǎng)巴粪,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮验毡,結(jié)果婚禮上衡创,老公的妹妹穿的比我還像新娘。我一直安慰自己晶通,他們只是感情好璃氢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著狮辽,像睡著了一般一也。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喉脖,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天椰苟,我揣著相機(jī)與錄音,去河邊找鬼树叽。 笑死舆蝴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的题诵。 我是一名探鬼主播洁仗,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼性锭!你這毒婦竟也來(lái)了赠潦?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤草冈,失蹤者是張志新(化名)和其女友劉穎她奥,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體怎棱,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哩俭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拳恋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凡资。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诅岩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情带膜,我是刑警寧澤吩谦,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站膝藕,受9級(jí)特大地震影響式廷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芭挽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一滑废、第九天 我趴在偏房一處隱蔽的房頂上張望蝗肪。 院中可真熱鬧,春花似錦蠕趁、人聲如沸薛闪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)豁延。三九已至,卻和暖如春腊状,著一層夾襖步出監(jiān)牢的瞬間诱咏,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工缴挖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袋狞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓映屋,卻偏偏與公主長(zhǎng)得像苟鸯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秧荆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對(duì)象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,188評(píng)論 0 7
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理倔毙,服務(wù)發(fā)現(xiàn),斷路器乙濒,智...
    卡卡羅2017閱讀 134,638評(píng)論 18 139
  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族陕赃,HTTP屬于它內(nèi)部的一個(gè)子集。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,441評(píng)論 0 20
  • 數(shù)據(jù)交互: 1.http協(xié)議 2.form 3.ajax——官方颁股、不能跨域 單向 4.jsonp——民...
    joe_qh閱讀 86評(píng)論 0 0
  • “你看看我有沒(méi)有繪畫(huà)天賦甘有?要是沒(méi)有的話(huà)诉儒,我就不浪費(fèi)那個(gè)時(shí)間了】飨疲” 最近常有人向我咨詢(xún)學(xué)畫(huà)的問(wèn)題忱反,問(wèn)得最多一個(gè)是關(guān)于...
    Rose的肉絲兒閱讀 5,754評(píng)論 19 54