著手做當(dāng)下最難搞的事,是解決焦慮與迷茫最好的良方。
http
https://mp.weixin.qq.com/s/WQpxfwLArltKEjEAdOO2Pw
http1.0秉撇,支持get,post骗随,每次請(qǐng)求都要建立連接轰豆。
http1.1,添加了put弓千,delete等方法支持衡便,鏈接復(fù)用,加入管道概念洋访,客戶(hù)端可以同時(shí)發(fā)多個(gè)次請(qǐng)求镣陕,但是服務(wù)端是串行執(zhí)行。加入了分塊傳輸姻政,提升了大文件傳輸效率呆抑。
http2.0,不修改http語(yǔ)義汁展,添加spdy協(xié)議鹊碍,提高性能厌殉。
二進(jìn)制編碼,提高壓縮率侈咕,減少數(shù)據(jù)大小公罕,數(shù)據(jù)分的快兒更小,每一塊都有流標(biāo)識(shí)耀销。服務(wù)端可以組裝楼眷,并發(fā)處理請(qǐng)求。服務(wù)端可以push树姨。
RESTFUL API
- 方法名不帶動(dòng)詞
http
協(xié)議増post
刪delete
改put patch
(部分更新) 查get
- 路徑
/v1/dog?id=1
- 返回?cái)?shù)據(jù)用
json摩桶,status
用http
的狀態(tài)碼桥状。
瀏覽器請(qǐng)求 www.baidu.com 時(shí)帽揪,背后都干了些啥?
https://mp.weixin.qq.com/s/dVAPIv7toJLv06P8feUOUw
https://mp.weixin.qq.com/s/rqa_YoBkkavJ12GAXZHTYA
- dns域名解析出ip辅斟,子網(wǎng)掩碼做與處理转晰,判斷是否是和本機(jī)一個(gè)內(nèi)網(wǎng)。
- 不是內(nèi)網(wǎng)士飒,開(kāi)始拼接數(shù)據(jù)查邢,按照應(yīng)用層->傳輸層->網(wǎng)絡(luò)層進(jìn)行分包。
數(shù)據(jù)發(fā)到路由器酵幕,轉(zhuǎn)到對(duì)方的路由器扰藕。
應(yīng)用層 http請(qǐng)求頭+首行+請(qǐng)求體
傳輸層 tcp頭+端口
網(wǎng)絡(luò)層 ip數(shù)據(jù)
數(shù)據(jù)鏈路層 1500字節(jié)分包 mac地址
具體發(fā)包還有擁塞控制,流量控制芳撒,3次握手建立連接邓深。 - 對(duì)方機(jī)器會(huì)層層的拆包,把http協(xié)議部分交給tomcat 進(jìn)行處理
(connection(endPoint+process+adpter)-> container(host+path)-> springmvc)
笔刹。
get芥备,post
- 默認(rèn)表單的實(shí)現(xiàn),get是把參數(shù)拼接到
url
上舌菜,而post
是放到請(qǐng)求體里萌壳,然后請(qǐng)求體里的數(shù)據(jù),后端會(huì)根據(jù)content_type去解析日月。 -
postman
和idea
自帶的httpclint
就比較靈活袱瓮,就是參數(shù)放哪兒都行和get,post
無(wú)關(guān)爱咬。 -
瀏覽器限制
- url不同瀏覽器會(huì)有不同的限制尺借。
- 一般瀏覽器post的實(shí)現(xiàn)會(huì)發(fā)2個(gè)請(qǐng)求,第一個(gè)不發(fā)數(shù)據(jù)返回100后台颠,第二次發(fā)數(shù)據(jù)褐望,所以會(huì)比get慢一點(diǎn)勒庄。
csrf
http://www.reibang.com/p/64a413ada155
cross-site request forgery
- 有些網(wǎng)站get方式去修改數(shù)據(jù)。這種情況下瘫里,如果a用戶(hù)正在登陸实蔽,b發(fā)給他一個(gè)惡意發(fā)禮物連接。只要a用戶(hù)點(diǎn)擊直接就把禮物給發(fā)了谨读。
- post也會(huì)有問(wèn)題 b可以做一個(gè)網(wǎng)站局装,里面寫(xiě)js只要a用戶(hù)打開(kāi)頁(yè)面,還是可以把禮物給發(fā)了劳殖,所以就有了
csrf
跨域保護(hù)铐尚,驗(yàn)證HTTP
的Referer
。
識(shí)別跨域:
協(xié)議+域名(2級(jí)也算)+端口
項(xiàng)目里取消跨域限制:
- 返回新的CorsFilter
- 重寫(xiě)WebMvcConfigurer
- 使用注解@CrossOrigin
- 前端 jsonp
xss
跨站腳本攻擊(Cross Site Scripting
)
- 轉(zhuǎn)碼為html實(shí)體哆姻,這樣html實(shí)體可以正常顯示宣增,但是不會(huì)當(dāng)做js執(zhí)行。
- HttpOnly Cookie js不可以獲取cookie矛缨。
常見(jiàn)http狀態(tài)碼
2XX 說(shuō)明請(qǐng)求被正常處理了
- 200 請(qǐng)求正常處理
- 204 請(qǐng)求正常處理 但是沒(méi)有返回信息
3XX 資源重定向
- 304 表明直接用緩存
請(qǐng)求中有上次資源的更新時(shí)間 說(shuō)明緩存有效是最新的資源
- 301 302 303 307幾乎所有的瀏覽器都會(huì)把POST改成GET爹脾,并刪除請(qǐng)求報(bào)文內(nèi)的主體,之后請(qǐng)求會(huì)自動(dòng)再次發(fā)送箕昭。
- 301 永久性重定向
短鏈跳轉(zhuǎn)長(zhǎng)鏈灵妨,會(huì)緩存,忽略短鏈訪(fǎng)問(wèn)
- 302 臨時(shí)性重定向
短鏈跳轉(zhuǎn)長(zhǎng)鏈落竹,會(huì)緩存泌霍,不會(huì)忽略短鏈訪(fǎng)問(wèn)
redirect方法
- 303 和302有相同的功能 不夠303會(huì)指定用get來(lái)獲取新的資源
- 307同302
- 301 永久性重定向
4XX 表明客戶(hù)端請(qǐng)求錯(cuò)誤
- 400 服務(wù)端說(shuō)你發(fā)的什么玩意..報(bào)文有錯(cuò)誤 服務(wù)端理解不了
requestBody中的參數(shù) java接收對(duì)象 沒(méi)有這個(gè)參數(shù)
- 401 說(shuō)明你這個(gè)http需要認(rèn)證
Unauthorized錯(cuò)誤,在項(xiàng)目里的usm中直接ip+端口訪(fǎng)問(wèn),提示401.因?yàn)橛衧ecurity做了攔截需要在url上加用戶(hù)名@密碼
- 403 說(shuō)明你訪(fǎng)問(wèn)的資源 你沒(méi)有權(quán)限
- 404 說(shuō)明你訪(fǎng)問(wèn)的資源 沒(méi)有找到
- 405 你訪(fǎng)問(wèn)資源 用的方法不對(duì)
- 413
get請(qǐng)求體太大,或者nginx設(shè)置的上傳文件大小限制了
- 415 格式不對(duì)
要求requestBody 但是傳遞的param
5XX 表明服務(wù)端發(fā)生錯(cuò)誤
https://segmentfault.com/a/1190000012595322
- 500 代碼出現(xiàn)問(wèn)題了 拋異常了
- 502
tomcat沒(méi)啟動(dòng) 正在啟動(dòng)
- 503 說(shuō)明正在 維護(hù) 或者超負(fù)載了 暫時(shí)不能對(duì)外服務(wù)
超出nginx最大并發(fā)數(shù) vue項(xiàng)目分包js 文件太多 請(qǐng)求太多 報(bào)這個(gè)錯(cuò)誤
- 504 超時(shí) 后端的服務(wù)器
負(fù)載太高了 配置錯(cuò)了 mysql負(fù)載高 內(nèi)存運(yùn)行不過(guò)來(lái)了運(yùn)行超出了nginx的超時(shí)時(shí)間
參考:https://blog.csdn.net/u011001084/article/details/79635162