2019 iOS面試題大全---全方面剖析面試
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之HTTP協(xié)議
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之HTTPS久又、對(duì)稱加密唉堪、非對(duì)稱加密
2019 iOS面試-----一個(gè)基于UDP的簡(jiǎn)單的聊天Demo(用C語(yǔ)言槽袄、python芹关、GCDAsyncUdpSocket來實(shí)現(xiàn)UDP通信)
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之UDP的特點(diǎn)皿桑、UDP的報(bào)文結(jié)構(gòu)及差錯(cuò)檢測(cè)
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之TCP撒会、三次握手嘹朗、四次揮手、代碼實(shí)現(xiàn)
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之TCP進(jìn)階:可靠數(shù)據(jù)傳輸诵肛、流量控制(滑動(dòng)窗口)屹培、擁塞控制
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之DNS
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之Cookie和Session
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之IP協(xié)議、IP數(shù)據(jù)報(bào)分片怔檩、IPv4編址褪秀、網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之IPv6、從IPv4到IPv6的遷移
一薛训、Cookie
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之HTTP協(xié)議
這里有說到媒吗,HTTP協(xié)議是無(wú)狀態(tài)的,服務(wù)器中沒有保存客戶端的狀態(tài)许蓖,客戶端必須每次帶上自己的狀態(tài)去請(qǐng)求服務(wù)器
基于HTTP這種特點(diǎn)蝴猪,就產(chǎn)生了cookie/session
1调衰、用戶與服務(wù)器的交互:Cookie
cookie
主要是用來記錄用戶狀態(tài)膊爪,區(qū)分用戶,狀態(tài)保存在客戶端嚎莉。
- 1.首次訪問
amazon
時(shí)米酬,客戶端發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)器端 。服務(wù)器端發(fā)送一個(gè)HTTP響應(yīng)到客戶端趋箩,其中包含Set-Cookie
頭部 - 2.客戶端發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)器端赃额,其中包含
Cookie
頭部。服務(wù)器端發(fā)送一個(gè)HTTP響應(yīng)到客戶端 - 3.隔段時(shí)間再去訪問時(shí)叫确,客戶端會(huì)直接發(fā)包含
Cookie
頭部的HTTP請(qǐng)求跳芳。服務(wù)器端發(fā)送一個(gè)HTTP響應(yīng)到客戶端
如圖可知,cookie技術(shù)有4個(gè)組件:
- 1.在HTTP響應(yīng)報(bào)文中的一個(gè)
cookie
首部行 - 2.在HTTP請(qǐng)求報(bào)文中的一個(gè)
cookie
首部行 - 3.在用戶端系統(tǒng)中保留一個(gè)
cookie
文件竹勉,并由用戶的瀏覽器進(jìn)行管理 - 4.位于Web站點(diǎn)的一個(gè)后端數(shù)據(jù)庫(kù)
也就是說飞盆,cookie
功能需要瀏覽器的支持。如果瀏覽器不支持cookie
(如大部分手機(jī)中的瀏覽器)或者把cookie
禁用了次乓,cookie
功能就會(huì)失效吓歇。
2、cookie的修改和刪除
在修改cookie
的時(shí)候票腰,只需要新cookie
覆蓋舊cookie
即可城看,在覆蓋的時(shí)候,由于Cookie
具有不可跨域名性杏慰,注意name测柠、path炼鞠、domain
需與原cookie
一致
刪除cookie
也一樣,設(shè)置cookie
的過期時(shí)間expires
為過去的一個(gè)時(shí)間點(diǎn)鹃愤,或者maxAge = 0
(Cookie的有效期,單位為秒)即可
3簇搅、cookie的安全
事實(shí)上,cookie
的使用存在爭(zhēng)議软吐,因?yàn)樗徽J(rèn)為是對(duì)用戶隱私的一種侵害瘩将,而且cookie
并不安全
HTTP協(xié)議不僅是無(wú)狀態(tài)
的,而且是不安全
的凹耙。使用HTTP協(xié)議的數(shù)據(jù)不經(jīng)過任何加密就直接在網(wǎng)絡(luò)上傳播姿现,有被截獲的可能。使用HTTP協(xié)議傳輸很機(jī)密的內(nèi)容是一種隱患肖抱。
- 如果不希望
Cookie
在HTTP等非安全協(xié)議中傳輸备典,可以設(shè)置Cookie的secure
屬性為true
。瀏覽器只會(huì)在HTTPS和SSL等安全協(xié)議中傳輸此類Cookie意述。 - 此外提佣,
secure
屬性并不能對(duì)Cookie內(nèi)容加密,因而不能保證絕對(duì)的安全性荤崇。如果需要高安全性拌屏,需要在程序中對(duì)Cookie內(nèi)容加密、解密术荤,以防泄密倚喂。 - 也可以設(shè)置
cookie
為HttpOnly,如果在cookie中設(shè)置了HttpOnly屬性瓣戚,那么通過js腳本將無(wú)法讀取到cookie
信息端圈,這樣能有效的防止XSS(跨站腳本攻擊)攻擊
二、Session
除了使用Cookie
子库,Web應(yīng)用程序中還經(jīng)常使用Session來記錄客戶端狀態(tài)舱权。Session
是服務(wù)器端使用的一種記錄客戶端狀態(tài)的機(jī)制,使用上比Cookie
簡(jiǎn)單一些仑嗅,相應(yīng)的也增加了服務(wù)器的存儲(chǔ)壓力宴倍。
Session是另一種記錄客戶狀態(tài)的機(jī)制,不同的是Cookie保存在客戶端瀏覽器中无畔,而Session保存在服務(wù)器上啊楚。
客戶端瀏覽器訪問服務(wù)器的時(shí)候,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上浑彰。這就是Session
恭理。客戶端瀏覽器再次訪問時(shí)只需要從該Session
中查找該客戶的狀態(tài)就可以了郭变。
如圖:
- 當(dāng)程序需要為某個(gè)客戶端的請(qǐng)求創(chuàng)建一個(gè)
session
時(shí)颜价,服務(wù)器首先檢查這個(gè)客戶端的請(qǐng)求里是否已包含了一個(gè)session
標(biāo)識(shí)(稱為SessionId
) - 如果已包含則說明以前已經(jīng)為此客戶端創(chuàng)建過
session
涯保,服務(wù)器就按照SessionId
把這個(gè)session
檢索出來,使用(檢索不到周伦,會(huì)新建一個(gè)) - 如果客戶端請(qǐng)求不包含
SessionId
夕春,則為此客戶端創(chuàng)建一個(gè)session
并且生成一個(gè)與此session
相關(guān)聯(lián)的SessionId
,SessionId
的值應(yīng)該是一個(gè)既不會(huì)重復(fù)专挪,又不容易被找到規(guī)律以仿造的字符串及志,這個(gè)SessionId
將被在本次響應(yīng)中返回給客戶端保存。 - 保存這個(gè)
SessionId
的方式可以采用cookie
寨腔,這樣在交互過程中瀏覽器可以自動(dòng)的按照規(guī)則把這個(gè)標(biāo)識(shí)發(fā)送給服務(wù)器速侈。但cookie
可以被人為的禁止,則必須有其他機(jī)制以便在cookie
被禁止時(shí)仍然能夠把SessionId
傳遞回服務(wù)器迫卢。
三倚搬、Cookie 和Session 的區(qū)別:
1、cookie
數(shù)據(jù)存放在客戶的瀏覽器上乾蛤,session
數(shù)據(jù)放在服務(wù)器上每界。
2、cookie
相比session
不是很安全家卖,別人可以分析存放在本地的cookie
并進(jìn)行cookie
欺騙,考慮到安全應(yīng)當(dāng)使用session眨层。
3、session
會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上篡九。當(dāng)訪問增多谐岁,會(huì)比較占用你服務(wù)器的性能,考慮到減輕服務(wù)器性能方面醋奠,應(yīng)當(dāng)使用cookie
榛臼。
4、單個(gè)cookie
保存的數(shù)據(jù)不能超過4K窜司,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie
沛善。而session
存儲(chǔ)在服務(wù)端,可以無(wú)限量存儲(chǔ)
5塞祈、所以:將登錄信息等重要信息存放為session
;其他信息如果需要保留金刁,可以放在cookie
中