1. 怎么實作強行關閉客戶端和服務器之間的連接?
在 socket 通信程序中不斷回圈檢測一個全域變數(開關標記變數),一旦標記變數變為關閉,則 調 用 socket 的 close 方法,回圈結束,從而達到關閉連接的目的,
2. 簡述 TCP 和 UDP 的區別以及優缺點
UDP 是面向無連接的通訊協議,UDP 資料包括目的埠號和源埠號資訊,(專案中使用過,告警發送,一般同一個局域網)
優點:UDP 速度快、操作簡單、要求系統資源較少,由于通訊不需要連接,可以實作廣播發送 缺點:UDP 傳送資料前并不與對方建立連接,對接收到的資料也不發送確認信號,發送端不知道數 據是否會正確接收,也不重復發送,不可靠,
TCP 是面向連接的通訊協議,通過三次握手建立連接,通訊完成時四次揮手
優點:TCP 在資料傳遞時,有確認、視窗、重傳、阻塞等控制機制,能保證資料正確性,較為可靠, 缺點:TCP 相對于 UDP 速度慢一點,要求系統資源較多,
3. 簡述瀏覽器通過 WSGI 請求動態資源的程序?
1.發送 http 請求動態資源給 web 服務器
2.web 服務器收到請求后通過 WSGI 呼叫一個屬性給應用程式框架
3.應用程式框架通過參考 WSGI 呼叫 web 服務器的方法,設定回傳的狀態和頭資訊,
4.呼叫后回傳,此時 web 服務器保存了剛剛設定的資訊
5.應用程式框架查詢資料庫,生成動態頁面的 body 的資訊
6.把生成的 body 資訊回傳給 web 服務器
7.web 服務器吧資料回傳給瀏覽器
4. 描述用瀏覽器訪問 www.baidu.com 的程序
先要決議出 baidu.com 對應的 ip 地址
-
要先使用 arp 獲取默認網關的 mac 地址
-
組織資料發送給默認網關(ip 還是 dns 服務器的 ip,但是 mac 地址是默認網關的 mac 地址)
-
默認網關擁有轉發資料的能力,把資料轉發給路由器
-
路由器根據自己的路由協議,來選擇一個合適的較快的路徑轉發資料給目的網關
-
目的網關(dns 服務器所在的網關),把資料轉發給 dns 服務器
-
dns 服務器查詢決議出 baidu.com 對應的 ip 地址,并原路回傳請求這個域名的 client 得到了 baidu.com 對應的 ip 地址之后,會發送 tcp 的 3 次握手,進行連接
-
使用 http 協議發送請求資料給 web 服務器
-
web 服務器收到資料請求之后,通過查詢自己的服務器得到相應的結果,原路回傳給瀏覽器,
-
瀏覽器接收到資料之后通過瀏覽器自己的渲染功能來顯示這個網頁,
-
瀏覽器關閉 tcp 連接,即 4 次揮手結束,完成整個訪問程序
5. Post 和 Get 請求的區別
GET 請求,請求的資料會附加在 URL 之后,以?分割 URL 和傳輸資料,多個引數用&連接,URL 的 編碼格式采用的是 ASCII 編碼,而不是 uniclde,即是說所有的非 ASCII 字符都要編碼之后再傳輸,
POST 請求:POST 請求會把請求的資料放置在 HTTP 請求包的包體中,上面的 item=bandsaw 就 是實際的傳輸資料,
因此,GET 請求的資料會暴露在地址欄中,而 POST 請求則不會, 傳輸資料的大小:
-
在 HTTP 規范中,沒有對 URL 的長度和傳輸的資料大小進行限制,但是在實際開發程序中,對 于 GET,特定的瀏覽器和服務器對 URL 的長度有限制,因此,在使用 GET 請求時,傳輸資料會 受到 URL 長度的限制,
-
對于 POST,由于不是 URL 傳值,理論上是不會受限制的,但是實際上各個服務器會規定對 POST 提交資料大小進行限制,Apache、IIS 都有各自的配置,
安全性:
- POST 的安全性比 GET 的高,這里的安全是指真正的安全,而不同于上面 GET 提到的安全方法 中的安全,上面提到的安全域僅是不修改服務器的資料,比如,在進行登錄操作,通過 GET 請求, 用戶名和密碼都會暴露再 URL 上,因為登錄頁面有可能被瀏覽器快取以及其他人查看瀏覽器的
歷史記錄的原因,此時的用戶名和密碼就很容易被他人拿到了,除此之外,GET 請求提交的資料
還可能會造成 Cross-site request frogery 攻擊, 效率:GET 比 POST 效率高,
POST 請求的程序:
(1).瀏覽器請求 tcp 連接(第一次握手)
(2).服務器答應進行 tcp 連接(第二次握手)
(3).瀏覽器確認,并發送 post 請求頭(第三次握手,這個報文比較小,所以 http 會在此時進行 第一次資料發送)
(4).服務器回傳 100 continue 回應 5.瀏覽器開始發送資料
(5).服務器回傳 200 ok 回應
GET 請求的程序:
(1).瀏覽器請求 tcp 連接(第一次握手)
(2).服務器答應進行 tcp 連接(第二次握手)
(3).瀏覽器確認,并發送 get 請求頭和資料(第三次握手,這個報文比較小,所以 http 會在此時 進行第一次資料發送)
(4).服務器回傳 200 OK 回應
6. cookie 和 session 的區別
(1)cookie 資料存放在客戶的瀏覽器上,session 資料放在服務器上,
(2)cookie 不是很安全,別人可以分析存放在本地的 cookie 并進行 cookie 欺騙考慮到安全應當使 用 session,
(3)session 會在一定時間內保存在服務器上,當訪問增多,會比較占用服務器的性能考慮到減輕服務器性能方面,應當使用 cookie,
(4)單個 cookie 保存的資料不能超過 4K,很多瀏覽器都限制一個站點最多保存 20 個 cookie,
(5)建議: 將登陸資訊等重要資訊存放為 SESSION 其他資訊如果需要保留,可以放在 cookie 中
7. HTTP 協議狀態碼有什么用,列出你知道的 HTTP 協議的狀態碼,然后講出他們都 表示什么意思?
通過狀態碼告訴客戶端服務器的執行狀態,以判斷下一步該執行什么操作, 常見的狀態機器碼有:
100-199:表示服務器成功接收部分請求,要求客戶端繼續提交其余請求才能完成整個處理程序,
200-299:表示服務器成功接收請求并已完成處理程序,常用 200(OK 請求成功),
300-399:為完成請求,客戶需要進一步細化請求,302(所有請求頁面已經臨時轉移到新的 url),
304、307(使用快取資源),
400-499:客戶端請求有錯誤,常用 404(服務器無法找到被請求頁面),403(服務器拒絕訪問, 權限不夠),
500-599:服務器端出現錯誤,常用 500(請求未完成,服務器遇到不可預知的情況),
8.請簡單說一下三次握手和四次揮手?

三次握手程序:
(1)首先客戶端向服務端發送一個帶有 SYN 標志,以及隨機生成的序號 100(0 位元組)的報文
(2)服務端收到報文后回傳一個報文(SYN200(0 位元組),ACk1001(位元組+1))給客戶端
(3)客戶端再次發送帶有 ACk 標志 201(位元組+)序號的報文給服務端 至此三次握手程序結束,客戶端開始向服務端發送資料,
1客戶端向服務端發起請求:我想給你通信,你準備好了么?
2服務端收到請求后回應客戶端:I’ok,你準備好了么
3客戶端禮貌的再次回一下客戶端:準備就緒,咱們開始通信吧!
整個程序跟打電話的程序一模一樣:1 喂,你在嗎 2 在,我說的你聽得到不 3 恩,聽得到(接下來請 開始你的表演)
補充:SYN:請求詢問,ACk:回復,回應,
四次揮手程序:
由于 TCP 連接是可以雙向通信的(全雙工),因此每個方向都必須單獨進行關閉(這句話才是 精辟,后面四個揮手程序都是其具體實作的語言描述)
四次揮手程序,客戶端和服務端都可以先開始斷開連接
(1)客戶端發送帶有 fin 標識的報文給服務端,請求通信關閉
(2)服務端收到資訊后,回復 ACK 答應關閉客戶端通信(連接)請求
(3)服務端發送帶有 fin 標識的報文給客戶端,也請求關閉通信
(4)客戶端回應 ack 給服務端,答應關閉服務端的通信(連接)請求
9.說一下什么是 tcp 的 2MSL?
主動發送 fin 關閉的一方,在 4 次揮手最后一次要等待一段時間我們稱這段時間為 2MSL TIME_WAIT 狀態的存在有兩個理由:
1.讓 4 次揮手關閉流程更加可靠
2.防止丟包后對后續新建的正常連接的傳輸造成破壞
12.為什么客戶端在 TIME-WAIT 狀態必須等待 2MSL 的時間?
1、為了保證客戶端發送的最后一個 ACK 報文段能夠達到服務器, 這個 ACK 報文段可能丟失, 因而使處在 LAST-ACK 狀態的服務器收不到確認,服務器會超時重傳 FIN+ACK 報文段,客戶端就 能在 2MSL 時間內收到這個重傳的 FIN+ACK 報文段,接著客戶端重傳一次確認,重啟計時器,最 好,客戶端和服務器都正常進入到 CLOSED 狀態,如果客戶端在 TIME-WAIT 狀態不等待一段時間, 而是再發送完 ACK 報文后立即釋放連接,那么就無法收到服務器重傳的 FIN+ACK 報文段,因而也 不會再發送一次確認報文,這樣,服務器就無法按照正常步驟進入 CLOSED 狀態,
2、防止已失效的連接請求報文段出現在本連接中,客戶端在發送完最后一個 ACK 確認報文段 后,再經過時間 2MSL,就可以使本連接持續的時間內所產生的所有報文段都從網路中消失,這樣 就可以使下一個新的連接中不會出現這種舊的連接請求報文段,
13.說說 HTTP 和 HTTPS 區別?
HTTP 協議傳輸的資料都是未加密的,也就是明文的,因此使用 HTTP 協議傳輸隱私資訊非常不安 全,為了保證這些隱私資料能加密傳輸,于是網景公司設計了 SSL(Secure Sockets Layer)協議用于 對 HTTP 協議傳輸的資料進行加密,從而就誕生了 HTTPS,簡單來說,HTTPS 協議是由 SSL+HTTP 協 議構建的可進行加密傳輸、身份認證的網路協議,要比 http 協議安全,
HTTPS 和 HTTP 的區別主要如下:
1、https 協議需要到 ca 申請證書,一般免費證書較少,因而需要一定費用,
2、http 是超文本傳輸協議,資訊是明文傳輸,https 則是具有安全性的 ssl 加密傳輸協議,
3、http 和 https 使用的是完全不同的連接方式,用的埠也不一樣,前者是 80,后者是 443,
4、http 的連接很簡單,是無狀態的;HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、
身份認證的網路協議,比 http 協議安全,
14.談一下 HTTP 協議以及協議頭部中表示資料型別的欄位?
HTTP 協議是 Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用于從萬維網(WWW:World Wide Web)服務器傳輸超文本到本地瀏覽器的傳送協議,
HTTP 是一個基于 TCP/IP 通信協議來傳遞資料(HTML 檔案, 圖片檔案, 查詢結果等),HTTP 是一個屬于應用層的面向物件的協議,由于其簡捷、快速的方式,適用于分布式超媒體資訊系統,它于 1990 年提出,經過幾年的使用與發展,得到不斷地完善和擴展,目前在 WWW 中 使用的是 HTTP/1.0 的第六版,HTTP/1.1 的規范化作業正在進行之中,而且 HTTP-NG(Next Generation of HTTP)的建議已經提出,
HTTP 協議作業于客戶端-服務端架構為上,瀏覽器作為 HTTP 客戶端通過 URL 向 HTTP 服 務端即 WEB 服務器發送所有請求,Web 服務器根據接收到的請求后,向客戶端發送回應資訊,
表示資料型別欄位: Content-Type
15.HTTP 請求方法都有什么?
根據 HTTP 標準,HTTP 請求可以使用多種請求方法,
HTTP1.0 定義了三種請求方法: GET, POST 和 HEAD 方法,
HTTP1.1 新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法,
1、 GET 請求指定的頁面資訊,并回傳物體主體,
2、HEAD 類似于 get 請求,只不過回傳的回應中沒有具體的內容,用于獲取報頭
3、POST 向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案),資料被包含在請求體中,POST 請求可能會導致新的資源的建立和/或已有資源的修改,
4、PUT 從客戶端向服務器傳送的資料取代指定的檔案的內容,
5、DELETE 請求服務器洗掉指定的頁面,
6、CONNECT HTTP/1.1 協議中預留給能夠將連接改為管道方式的代理服務器,
7、OPTIONS 允許客戶端查看服務器的性能,
8、TRACE 回顯服務器收到的請求,主要用于測驗或診斷,
16.使用 Socket 套接字需要傳入哪些引數 ?
Address Family 和 Type,分別表示套接字應用場景和型別,
family 的值可以是 AF_UNIX(Unix 域,用于同一臺機器上的行程間通訊),也可以是 AF_INET(對于 IPV4 協議的 TCP 和 UDP),至于 type 引數,SOCK_STREAM(流套接字)或者 SOCK_DGRAM(資料報文套接字),SOCK_RAW(raw 套接字),
17.HTTP 常見請求頭?
- Host (主機和埠號)
2.Connection (鏈接型別)
3.Upgrade-Insecure-Requests (升級為 HTTPS 請求)
4.User-Agent (瀏覽器名稱)
5.Accept (傳輸檔案型別)
6.Referer (頁面跳轉處)
7.Accept-Encoding(檔案編解碼格式)
8.Cookie (Cookie)
9.x-requested-with :XMLHttpRequest (是 Ajax 異步請求)
18.七層模型? IP ,TCP/UDP ,HTTP ,RTSP ,FTP 分別在哪層?
IP: 網路層
TCP/UDP: 傳輸層
HTTP、RTSP、FTP: 應用層協議

19.url 的形式?
形式: scheme://host[:port#]/path/…/[?query-string][#anchor] scheme:協議(例如:http, https, ftp)
host:服務器的 IP 地址或者域名
port:服務器的埠(如果是走協議默認埠,80 or 443)
path:訪問資源的路徑
query-string:引數,發送給 http 服務器的資料 anchor:錨(跳轉到網頁的指定錨點位置) http://localhost:4000/file/part01/1.2.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286591.html
標籤:其他
上一篇:C語言解題:求兩矩形公共面積
