1.http協(xié)議
? ? HTTP協(xié)議躺彬,它規(guī)定了在網(wǎng)絡(luò)中發(fā)布餐胀,傳輸和接收html頁(yè)面的方法晌块。大家都遵循這個(gè)協(xié)議,就能實(shí)現(xiàn)信息傳輸徊件。
? ? HTTP請(qǐng)求(Request)消息:客服端發(fā)送給服務(wù)器的消息
? ? HTTP響應(yīng)(Response)消息:服務(wù)端返回客戶端的消息
2.http協(xié)議的工作流程
? ? (1)客戶端連接到web服務(wù)器
? ? 一個(gè)HTTP客戶端晤硕,通常是瀏覽器,與web服務(wù)器的HTTP端口(默認(rèn)80)建立一個(gè)TCP套接字連接庇忌,如舞箍,
? http://www.baidu.com
? ? ? ? (2)發(fā)送http請(qǐng)求
? ? ? ?通過(guò)TCP套接字,客戶端向Web服務(wù)器發(fā)送一個(gè)文本的請(qǐng)求報(bào)文皆疹,一個(gè)請(qǐng)求報(bào)文由請(qǐng)求行疏橄、請(qǐng)求頭部、空行和請(qǐng)求數(shù)據(jù)4部分組成略就。
? ? ? ? (3)服務(wù)器接受請(qǐng)求并返回HTTP響應(yīng)
? ? ? ? web服務(wù)器解析請(qǐng)求捎迫,定義請(qǐng)求資源,服務(wù)器講資源復(fù)本寫到TCP套接字表牢,由客戶端讀取窄绒,一個(gè)響應(yīng)由狀態(tài)、響應(yīng)頭部崔兴、空行彰导、和響應(yīng)數(shù)據(jù)組成。
? ? ? ? (4)釋放連接TCP連接
? ? 客戶端和服務(wù)端建立建立連接敲茄,客戶端沿著建立好的連接發(fā)送請(qǐng)求位谋,服務(wù)端返回響應(yīng)消息信息再斷開(kāi)連接。
? ? ? ? (5)客戶端瀏覽器解析HTML內(nèi)容
? ? ? ? 客戶端瀏覽器首先解析狀態(tài)行堰燎,查看表明是否成功的狀態(tài)碼掏父,然后解析每一個(gè)響應(yīng)頭,響應(yīng)頭告知以下為若干字節(jié)的HTML文檔和文檔的字符集秆剪∩奘纾客戶端瀏覽器讀取響應(yīng)數(shù)據(jù)HTML爵政,根據(jù)HTMl語(yǔ)法對(duì)其進(jìn)行格式化,并在瀏覽器窗口顯示陶缺。
? ? ? ? 例如:在瀏覽器地址欄輸入U(xiǎn)RL钾挟,按下回車之后會(huì)經(jīng)歷以下流程:
? ? ? ? 1、瀏覽器向DNS服務(wù)器請(qǐng)求解析該URL中的域名所對(duì)應(yīng)的IP地址组哩;
? ? ? ? 2等龙、解析出IP地址后,根據(jù)該IP地址和默認(rèn)端口80伶贰,和服務(wù)器建立TCP連接蛛砰;
? ? ? ? 3、瀏覽器發(fā)出讀取文件(URL中域名后面部分對(duì)應(yīng)的文件)HTTP請(qǐng)求黍衙,請(qǐng)求該報(bào)文作為TCP三次握手的第三個(gè)報(bào)文數(shù)據(jù)發(fā)送給服務(wù)器泥畅;
? ? ? ? 4、服務(wù)器對(duì)瀏覽器請(qǐng)求作出響應(yīng)琅翻,并把對(duì)應(yīng)的HTML文本發(fā)送給瀏覽器位仁;
? ? ? ? 5、釋放TCP連接方椎;
? ? ? ? 6聂抢、瀏覽器將該HTML文本并顯示內(nèi)容;
3.? ? HTTP請(qǐng)求的狀態(tài)碼
? ? ? ? 1xx? ? 指示信息--表示請(qǐng)求已接收棠众,繼續(xù)處理
? ? ? ? 2xx? ? 成功--表示請(qǐng)求已被成功接收琳疏,理解,接受
? ? ? ? 3xx? ? 重定向--要完成請(qǐng)求必須進(jìn)行更進(jìn)一步操作
? ? ? ? 4xx? ? 客戶端錯(cuò)誤--請(qǐng)求有語(yǔ)法錯(cuò)誤或請(qǐng)求無(wú)法實(shí)現(xiàn)
? ? ? ? 5xx? ? 服務(wù)器端錯(cuò)誤--服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求
? ? ?常見(jiàn)的狀態(tài)碼
? ? ? ?200? ? OK? ? 客戶端請(qǐng)求成功
? ? ? ? 400? ? Bad Request? ? 客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤闸拿,不能被服務(wù)器所理解
? ? ? ? 401? ? Unauthorized? ? 請(qǐng)求未經(jīng)授權(quán)空盼,這個(gè)狀態(tài)碼必須和WWW-Authenticate報(bào)頭域一起使用
? ? ? ? 403? ? Forbidden? ? 服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)
? ? ? ? 404? ? Not? ? Found? ? 請(qǐng)求資源不存在新荤,輸入了錯(cuò)誤的URL
? ? ? ? 500? ? Internal? ?Server? ? Error? ? 服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
? ? ? ? 503? ? Server? ? Unavailable????服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求揽趾,一段時(shí)間后可能恢復(fù)正常?
.jQuery 的AJAX請(qǐng)求
? ??$.ajax({
????????????????????type: "GET", //GET/POST/PUT/DELETE/HEAD
????????????????????url: "URL", //請(qǐng)求URL地址
????????????????????data: "k=v"或{k:v} //要提交的請(qǐng)求數(shù)據(jù)
????????????????????beforeSend: fn, //請(qǐng)求發(fā)送之前的回調(diào)函數(shù)
????????????????????success: fn, //響應(yīng)成功的回調(diào)函數(shù)
????????????????????error: fn, //響應(yīng)失敗的回調(diào)函數(shù)
????????????????????complete: fn //響應(yīng)完成的回調(diào)函數(shù),不論成功與失敗
})
????????????????響應(yīng)成功回調(diào)順序:
????????????????????beforeSend => success => complete
????????????????響應(yīng)失敗回調(diào)順序:
????????????????????beforeSend => error => complete苛骨;
4.? ? axios
? ? ? ? axios是一個(gè)基于promise用于瀏覽器和node.js的HTTP客戶端篱瞎;
? ? axios的特點(diǎn):
? ? (1)從瀏覽器中創(chuàng)建 XMLHttpRequest
????(2)從node.js中發(fā)出http請(qǐng)求
? ? (3)支持promise API
? ? (4)攔截請(qǐng)求和響應(yīng)
? ? (5)轉(zhuǎn)換請(qǐng)求和響應(yīng)數(shù)據(jù)
? ? (6)取消請(qǐng)求
? ? (7)自動(dòng)轉(zhuǎn)換json數(shù)據(jù)
? ? (8)客戶端支持防止CSRF/XSRF
? ? ? ? vue中axios的ajax請(qǐng)求:
? ? ? ? ? let axios = require('axios')
? ? axios.type(請(qǐng)求方式)('url',{params:{id:12345}//通過(guò)parmas傳遞進(jìn)來(lái)的參數(shù)}).then(function(response)智袭;
? ? ? ? console.log(response)奔缠;
) .catch(function(error){
console.log(error);
})吼野;
5. 微信小程序的ajax請(qǐng)求
? ? wx.request({
? ? url://路徑
? ? method://請(qǐng)求方式
? ? dataType://? ? 請(qǐng)求數(shù)據(jù)類型
? ? data://傳遞的參數(shù)
? ??header: {
????????????'Content-Type':?'xxxx'
}
? ? success:function(res){
? ??????
}
})