一、HTTP請(qǐng)求方式
HTTP超文本傳輸協(xié)議:是短連接,是客戶端主動(dòng)發(fā)送請(qǐng)求,服務(wù)器作出響應(yīng),響應(yīng)之后服務(wù)器斷開。HTTP屬于應(yīng)用層面向?qū)ο髤f(xié)議,HTTP有兩類報(bào)文:請(qǐng)求報(bào)文和相應(yīng)報(bào)文。
請(qǐng)求報(bào)文包含:請(qǐng)求行、請(qǐng)求頭、空行、請(qǐng)求數(shù)據(jù)四部分組成。
響應(yīng)報(bào)文包含:狀態(tài)行、消息報(bào)文、響應(yīng)正文三部分組成。
通常,HTTP請(qǐng)求方式有三種,分別是:POST、GET、HEAD。其中POST和GET用于數(shù)據(jù)發(fā)送。
1、POST:它將發(fā)送的數(shù)據(jù)單獨(dú)放在一個(gè)流中進(jìn)行發(fā)送,而不是附加到URL地址后面,這樣做的好處是這些數(shù)據(jù)不會(huì)出現(xiàn)在URL地址中。
2、GET:它將發(fā)送的數(shù)據(jù)直接添加到URL后面,用&鏈接,這樣的好處是不用另外的數(shù)據(jù)流來發(fā)送這些數(shù)據(jù),但是缺點(diǎn)是將用戶信息暴露出來了,不安全。
3、HEAD:它是請(qǐng)求資源的元數(shù)據(jù)方法。
二、HTTP定義了與服務(wù)器交互的不同的方法,最基本的方法有?
1、URL全程是資源描述符,我們可以這樣認(rèn)為:一個(gè)URL地址,它用于一個(gè)網(wǎng)絡(luò)上的資源,而HTTP中的GET、POST、PUT、DELETE就對(duì)應(yīng)著這個(gè)資源的查、改、增、刪四個(gè)操作。
2、GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息。
三、socket簡(jiǎn)介
1、socket是基于TCP/IP協(xié)議,它是一個(gè)可以連通網(wǎng)絡(luò)上不同計(jì)算機(jī)程序之間的管道,把數(shù)據(jù)從管道A端放進(jìn)去,則會(huì)從管道B、C......等端冒出來。管道的端口由機(jī)器的IP和程序所使用的端口號(hào)來確認(rèn)。
2、socket可以支持?jǐn)?shù)據(jù)的發(fā)送和接收,它會(huì)定義一種稱為套接字的變量,發(fā)送數(shù)據(jù)的時(shí)候首先創(chuàng)建套接字,然后使用該套接字的send to等方法對(duì)準(zhǔn)某個(gè)IP/端口,進(jìn)行數(shù)據(jù)發(fā)送;接收端口也首先創(chuàng)建套接字,然后將該套接字綁定到一個(gè)IP/端口上,所有發(fā)向此端口的數(shù)據(jù)會(huì)被該套接字的recv等函數(shù)讀出。和讀出文件中的數(shù)據(jù)一樣。
3、TCP/IP的socket提供三種套接字:流式套接字、數(shù)據(jù)報(bào)式套接字、原始套接字。
4、常用的第三方庫:AsyncScoket。
四、APP需要加載大量的數(shù)據(jù),給服務(wù)器發(fā)送請(qǐng)求,但是服務(wù)器卡住了,請(qǐng)問怎么解決?
1、設(shè)置請(qǐng)求超時(shí)。
2、給用戶提示請(qǐng)求超時(shí)。
3、根據(jù)用戶操作再次請(qǐng)求數(shù)據(jù)。
五、HTTP通信的發(fā)送請(qǐng)求、接收相應(yīng)包含哪些內(nèi)容?
一個(gè)請(qǐng)求包含請(qǐng)求行、請(qǐng)求頭、請(qǐng)求體。
1、請(qǐng)求行:包含HTTP協(xié)議版本、狀態(tài)碼、狀態(tài)英文名稱HTTP/1.1 200 ok
2、請(qǐng)求頭:對(duì)客戶端的環(huán)境描述、客戶端請(qǐng)求的主機(jī)地址等信息。
3、請(qǐng)求體:客戶端發(fā)送給服務(wù)器的具體數(shù)據(jù),比如文件數(shù)據(jù)。
一個(gè)響應(yīng)包括:狀態(tài)行、響應(yīng)頭、實(shí)體內(nèi)容。
1、狀態(tài)行:包含HTTP協(xié)議版本、狀態(tài)碼、狀態(tài)英文名:HTTP/1.1 200 ok
2、響應(yīng)頭:包含對(duì)服務(wù)器的描述、對(duì)返回?cái)?shù)據(jù)的描述。(服務(wù)器類型、返回?cái)?shù)據(jù)類型、返回?cái)?shù)據(jù)長(zhǎng)度、響應(yīng)時(shí)間)
3、實(shí)體內(nèi)容:服務(wù)器返回給客戶端的具體數(shù)據(jù),比如文件數(shù)據(jù)。
六、TCP和UDP的區(qū)別
1、UDP是用戶數(shù)據(jù)報(bào)協(xié)議:主要用在實(shí)時(shí)性相對(duì)較高以及對(duì)質(zhì)量相對(duì)較弱的地方,但面對(duì)現(xiàn)在高質(zhì)量的線路,不容易丟包除非是在一些擁塞的情況下,如流媒體。
七、什么是三次握手和四次揮手
更好地回答:
1、初始狀態(tài):剛開始客戶端處于close狀態(tài),服務(wù)店處于listen狀態(tài)。
2、然后,第一次握手,客戶端給服務(wù)端發(fā)送一個(gè)SYN報(bào)文,并指明客戶端的初始化序列號(hào)ISN(c),此時(shí)客戶端進(jìn)入SYN_Send狀態(tài)。
3、第二次握手,服務(wù)端收到客戶端的SYN報(bào)文之后,會(huì)以自己的SYN報(bào)文作為應(yīng)答,并且指定了自己的初始化序列號(hào)ISN(c),同時(shí)會(huì)把客戶端的ISN+1作為ACK的值,表示自己收到了客戶端的SYN,此時(shí)服務(wù)器處于SYN_REVD的狀態(tài)。
4、第三次握手,客戶端收到SYN報(bào)文之后,會(huì)發(fā)送一個(gè)ACK 報(bào)文,當(dāng)然,也一樣把服務(wù)器的ISN+1作為ACK的值,標(biāo)識(shí)已經(jīng)收到了服務(wù)端的SYN報(bào)文,此時(shí)客戶端處于establised(已建立)狀態(tài)。
5、服務(wù)器收到客戶端的ACK報(bào)文之后,也處于establised狀態(tài)。
三次握手的作用:
1、確認(rèn)雙方的接受能力、發(fā)送能力是否正常。
2、制定自己的初始化序列號(hào),為后面的可靠傳輸做準(zhǔn)備。
3、如果是HTTPS協(xié)議的話,三次握手過程中還會(huì)有數(shù)字證書的驗(yàn)證和加密密鑰的生成。
初始化序列號(hào)ISN是非固定的,防止攻擊者猜出來。
什么是半連接隊(duì)列?
第一次握手之后,服務(wù)端處于SYN_RCVD狀態(tài),此時(shí)雙方還沒有完全建立連接,服務(wù)器會(huì)把此種狀態(tài)下的請(qǐng)求連接放到一個(gè)隊(duì)列里,我們把這種隊(duì)列稱之為半連接隊(duì)列。
握手期間是否可以攜帶數(shù)據(jù)?
第一次第二次握手不可以攜帶數(shù)據(jù),防止有人惡意攻擊。
第三次握手可以攜帶數(shù)據(jù)。因?yàn)橐呀?jīng)建立連接了
1、三次握手實(shí)現(xiàn)過程
第一次握手:建立連接時(shí),客戶端發(fā)送同步序列編號(hào)到服務(wù)器,并進(jìn)入發(fā)送狀態(tài),等待服務(wù)器的確認(rèn)。
第二次握手:服務(wù)器收到同步序列編號(hào),確認(rèn)并同時(shí)自己也發(fā)送一個(gè)同步序列編號(hào)+確認(rèn)標(biāo)志,此時(shí)服務(wù)器進(jìn)入等待狀態(tài)。
第三次握手:客戶端收到服務(wù)器發(fā)送的包,并向服務(wù)器發(fā)送確認(rèn)標(biāo)志,隨后連接成功。
注意:是在鏈接成功之后再進(jìn)行數(shù)據(jù)傳輸。
2、四次揮手
第一次:客戶端向服務(wù)器發(fā)送一個(gè)帶有結(jié)束標(biāo)記的報(bào)文。
第二次:服務(wù)器收到報(bào)文之后,向客戶端發(fā)送一個(gè)確認(rèn)序號(hào),同時(shí)通知自己相應(yīng)的程序,對(duì)方要求關(guān)閉鏈接。
第三次:服務(wù)器向客戶端發(fā)送一個(gè)帶有結(jié)束標(biāo)記的報(bào)文。
第四次:客戶端收到報(bào)文后,向服務(wù)器發(fā)送一個(gè)確認(rèn)序號(hào)。鏈接關(guān)閉。
八、JSON和XML的區(qū)別?
1、可讀性:基本相同,XML的可讀性比較好。
2、可擴(kuò)展性:都有很好的可擴(kuò)展性。
3、編碼難度:JSON編碼比較容易。
4、解碼難度:JSON解碼難度基本為零,XML要考慮子節(jié)點(diǎn)和父節(jié)點(diǎn)。
5、數(shù)據(jù)體積:JSON體積較小,傳輸速度更快。
6、數(shù)據(jù)交互:JSON和JavaScript交互更加方便。
7、數(shù)據(jù)描述:XML對(duì)數(shù)據(jù)的描述性更好。
九、HTTP和socket的區(qū)別。
1、HTTP短連接,客戶端主動(dòng)發(fā)送請(qǐng)求,服務(wù)端才能相應(yīng),一次請(qǐng)求完畢后,斷開鏈接,以節(jié)省資源。服務(wù)端不能主動(dòng)給客戶端相應(yīng)(除非采取HTTP長(zhǎng)連接技術(shù))。
2、socker主要使用“套接字”鏈接,并沒有規(guī)定連接后斷開,所以客戶端和服務(wù)端可以保持長(zhǎng)連接,雙方都可以主動(dòng)發(fā)送數(shù)據(jù)。一般應(yīng)用在股票開發(fā)、游戲等即時(shí)性很強(qiáng)且發(fā)送數(shù)量比較大的場(chǎng)合。
十、HTTP和HTTPS的區(qū)別
定義:HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標(biāo)的HTTP通道,簡(jiǎn)單講是HTTP的安全版。
1、HTTPS是在HTTP上加入SSL層,HTTPS的安全基礎(chǔ)是SSL。
2、HTTP是超文本傳輸協(xié)議,信息是明文傳輸,HTTPS則是SSL加密。
3、HTTP連接的端口是80,HTTPS是443。
4、HTTP連接時(shí)無狀態(tài)的,HTTPS是由SSL+HTTP協(xié)議構(gòu)成的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議。
5、https協(xié)議需要到ca申請(qǐng)證書,一般免費(fèi)證書很少,需要交費(fèi)。