常見的 HTTP 響應(yīng)狀態(tài)碼
在一個(gè) HTTP 請求的響應(yīng)報(bào)文中的狀態(tài)行會有一個(gè)響應(yīng)狀態(tài)碼
這個(gè)狀態(tài)碼是用來描述本次響應(yīng)的狀態(tài)的
通常會出現(xiàn)五種狀態(tài)碼
100 ~ 199
200 ~ 299
300 ~ 399
400 ~ 499
500 ~ 599
100 ~ 199
一般我們看不到,因?yàn)楸硎菊埱罄^續(xù)
100:? 繼續(xù)請求篮绿,前面的一部分內(nèi)容服務(wù)端已經(jīng)接受到了片酝,正在等待后續(xù)內(nèi)容
101: 請求者已經(jīng)準(zhǔn)備切換協(xié)議妄壶,服務(wù)器頁表示同意
200 ~ 299
2 開頭的都是表示成功,本次請求成功了,只不過不一樣的狀態(tài)碼有不一樣的含義(語義化)
*200: 標(biāo)準(zhǔn)請求響應(yīng)成功(一般表示服務(wù)端提供的是網(wǎng)頁)
201: 創(chuàng)建成功(一般是注冊的時(shí)候出皇,表示新用戶信息已經(jīng)添加到數(shù)據(jù)庫)
203: 表示服務(wù)器已經(jīng)成功處理了請求篷朵,但是返回的信息可能來自另一源
204: 服務(wù)端已經(jīng)成功處理了請求,但是沒有任何數(shù)據(jù)返回
300 ~ 399
3 開頭也是成功的一種糠聪,但是一般表示重定向
*301: 永久重定向
*302: 臨時(shí)重定向
*304: 使用的是緩存的數(shù)據(jù)
305: 使用代理
400 ~ 499
4 開頭表示客戶端出現(xiàn)錯誤了
400: 請求的語法服務(wù)端不認(rèn)識
401: 未授權(quán)(你要登錄的網(wǎng)站需要授權(quán)登錄)
403: 服務(wù)器拒絕了你的請求
*404: 服務(wù)器找不到你請求的 URL
407: 你的代理沒有授權(quán)
408: 請求超時(shí)
410: 你請求的數(shù)據(jù)已經(jīng)被服務(wù)端永久刪除
500 ~ 599
5 開頭的表示服務(wù)端出現(xiàn)了錯誤
*500: 服務(wù)器內(nèi)部錯誤
503: 服務(wù)器當(dāng)前不可用(過載或者維護(hù))
505: 請求的協(xié)議服務(wù)器不支持
常見的 HTTP 請求方式
每一個(gè) HTTP 請求在請求行里面會有一個(gè)東西叫做請求方式
不同的請求方式代表的含義不同
GET: 一般用于獲取一些信息使用(獲取列表)
POST: 一般用于發(fā)送一些數(shù)據(jù)給服務(wù)端(登錄)
PUT: 一般用于發(fā)送一些數(shù)據(jù)給服務(wù)當(dāng)讓其添加新數(shù)據(jù)(注冊)
DELETE: 一般用于刪除某些數(shù)據(jù)
HEAD: 類似于 GET 的請求荒椭,只不過一般沒有響應(yīng)的具體內(nèi)容,用于獲取報(bào)文頭
CONNECT: HTTP/1.1 中預(yù)留的方式舰蟆,一般用于管道鏈接改變?yōu)榇淼臅r(shí)候使用
PATCH: 是和 PUT 方式類似的一個(gè)方式趣惠,一般用于更新局部數(shù)據(jù)
OPTIONS: 允許客戶端查看服務(wù)端性能
我們比較常用的就是 GET 和 POST
GET 請求
參數(shù)以 querystring 的形式發(fā)送,也就是直接拼接在 請求路徑的后面
GET 請求會被瀏覽器主動緩存
GET 請求根據(jù)不同的瀏覽器對長度是有限制的
IE: 2083 個(gè)字符
FireFox: 65536 個(gè)字符
Safari: 80000 個(gè)字符
Opera: 190000 個(gè)字符
Chrome: 8182 個(gè)字符
APACHE(server): 理論上接受的最大長度是 8192 個(gè)字符(有待商榷)
對參數(shù)的類型有限制身害,只接受 ASCII 碼的格式
POST 請求
參數(shù)以 request body的形式發(fā)送味悄,也就是放在請求體中
POST 請求不會被瀏覽器主動緩存,除非手動設(shè)置
POST 請求理論上是沒有限制的塌鸯,除非服務(wù)端做了限制
對參數(shù)類型沒有限制侍瑟,理論上可以傳遞任意數(shù)據(jù)類型,只不過要和請求頭對應(yīng)
COOKIE叫做會話技術(shù)
cookie 是瀏覽器提供的一個(gè)存儲空間
每一個(gè) HTTP 請求都會在請求頭中攜帶 cookie 到服務(wù)端
每一個(gè) HTTP 響應(yīng)都會在響應(yīng)頭中攜帶 cookie 到客戶端
也就是說丙猬,cookie 是不需要我們手動設(shè)置涨颜,就會自動在 客戶端 和 服務(wù)端之間游走的數(shù)據(jù)
我們只是需要設(shè)置一下 cookie 的內(nèi)容就可以
COOKIE 的存儲形式
cookie 是以字符串的形式存儲,在字符串中以 key=value 的形式出現(xiàn)
每一個(gè) key=value 是一條數(shù)據(jù)
多個(gè)數(shù)據(jù)之間以 ; 分割
// cookie 的形態(tài)
'a=100; b=200; c=300;'
COOKIE 的特點(diǎn)
存儲大小有限制茧球,一般是 4 KB 左右
數(shù)量有限制庭瑰,一般是 50 條左右
有時(shí)效性,也就是有過期時(shí)間抢埋,一般是 會話級別(也就是瀏覽器關(guān)閉就過期了)
有域名限制见擦,也就是說誰設(shè)置的誰才能讀取
使用方式
讀取 cookie 的內(nèi)容使用 document.cookie
constcookie=document.cookie
console.log(cookie)// 就能得到當(dāng)前 cookie 的值
設(shè)置 cookie 的內(nèi)容使用 document.cookie
// 設(shè)置一個(gè)時(shí)效性為會話級別的 cookie
document.cookie='a=100'
// 設(shè)置一個(gè)有過期時(shí)間的 cookie
document.cookie='b=200;expires=Thu, 18 Dec 2043 12:00:00 GMT";'
// 上面這個(gè) cookie 數(shù)據(jù)會在 2043 年 12 月 18 日 12 點(diǎn)以后過期钉汗,過期后會自動消失
刪除 cookie 的內(nèi)容使用 document.cookie
// 因?yàn)?cookie 不能直接刪除
// 所以我們只能把某一條 cookie 的過期時(shí)間設(shè)置成當(dāng)前時(shí)間之前
// 那么瀏覽器就會自動刪除 cookie
document.cookie='b=200;expires=Thu, 18 Dec 2018 12:00:00 GMT";'
COOKIE 操作封裝
因?yàn)?js 中沒有專門操作 COOKIE 增刪改查的方法
所以需要我們自己封裝一個(gè)方法
設(shè)置 cookie
/**
* setCookie 用于設(shè)置 cookie
* @param {STRING} key? 要設(shè)置的 cookie 名稱
* @param {STRING} value? 要設(shè)置的 cookie 內(nèi)容
* @param {NUMBER} expires? 過期時(shí)間
*/
functionsetCookie(key,value,expires) {
consttime=newDate()
time.setTime(time.getTime()-1000*60*60*24*8+expires)// 用于設(shè)置過期時(shí)間
document.cookie=`${key}=${value};expires=${time};`
}
讀取 cookie
/**
* getCookie 獲取 cookie 中的某一個(gè)屬性
* @param {STRING} key 你要查詢的 cookie 屬性
* @return {STRING} 你要查詢的那個(gè) cookie 屬性的值
*/
functiongetCookie(key) {
constcookieArr=document.cookie.split('; ')
letvalue=''
cookieArr.forEach(item=>{
if(item.split('=')[0]===key) {
value=item.split('=')[1]
?? }
? })
returnvalue
}
刪除 cookie
/**
* delCookie 刪除 cookie 中的某一個(gè)屬性
* @param {STRING} name 你要刪除的某一個(gè) cookie 屬性的名稱
*/
function delCookie(name) {
? setCookie(name, 1, -1)
}