http相關面試題

http狀態碼有那些?分別表明是什麼意思?

簡單版css

[
    100  Continue   繼續,通常在發送post請求時,已發送了http header以後服務端將返回此信息,表示確認,以後發送具體參數信息
    200  OK         正常返回信息
    201  Created    請求成功而且服務器建立了新的資源
    202  Accepted   服務器已接受請求,但還沒有處理
    301  Moved Permanently  請求的網頁已永久移動到新位置。
    302 Found       臨時性重定向。
    303 See Other   臨時性重定向,且老是使用 GET 請求新的 URI。
    304  Not Modified 自從上次請求後,請求的網頁未修改過。

    400 Bad Request  服務器沒法理解請求的格式,客戶端不該當嘗試再次使用相同的內容發起請求。
    401 Unauthorized 請求未受權。
    403 Forbidden   禁止訪問。
    404 Not Found   找不到如何與 URI 相匹配的資源。

    500 Internal Server Error  最多見的服務器端錯誤。
    503 Service Unavailable 服務器端暫時沒法處理請求(多是過載或維護)。
]

一個頁面從輸入 URL 到頁面加載顯示完成,這個過程當中都發生了什麼?(流程說的越詳細越好)

詳細版:
瀏覽器會開啓一個線程來處理這個請求,對 URL 分析判斷若是是 http 協議就按照 Web 方式來處理;
調用瀏覽器內核中的對應方法,好比 WebView 中的 loadUrl 方法;
經過DNS解析獲取網址的IP地址,設置 UA 等信息發出第二個GET請求;
進行HTTP協議會話,客戶端發送報頭(請求報頭);
進入到web服務器上的 Web Server,如 Apache、Tomcat、Node.JS 等服務器;
進入部署好的後端應用,如 PHP、Java、JavaScript、Python 等,找到對應的請求處理;
處理結束回饋報頭,此處若是瀏覽器訪問過,緩存上有對應資源,會與服務器最後修改時間對比,一致則返回304;
瀏覽器開始下載html文檔(響應報頭,狀態碼200),同時使用緩存;
文檔樹創建,根據標記請求所需指定MIME類型的文件(好比css、js),同時設置了cookie;
頁面開始渲染DOM,JS根據DOM API操做DOM,執行事件綁定等,頁面顯示完成。
簡潔版:
瀏覽器根據請求的URL交給DNS域名解析,找到真實IP,向服務器發起請求;
服務器交給後臺處理完成後返回數據,瀏覽器接收文件(HTML、JS、CSS、圖象等);
瀏覽器對加載到的資源(HTML、JS、CSS等)進行語法解析,創建相應的內部數據結構(如HTML的DOM);
載入解析到的資源文件,渲染頁面,完成。html

說說TCP傳輸的三次握手四次揮手策略

爲了準確無誤地把數據送達目標處,TCP協議採用了三次握手策略。用TCP協議把數據包送出去後,TCP不會對傳送 後的狀況置之不理,它必定會向對方確認是否成功送達。握手過程當中使用了TCP的標誌:SYN和ACK
發送端首先發送一個帶SYN標誌的數據包給對方。接收端收到後,回傳一個帶有SYN/ACK標誌的數據包以示傳達確認信息。 最後,發送端再回傳一個帶ACK標誌的數據包,表明「握手」結束。 若在握手過程當中某個階段莫名中斷,TCP協議會再次以相同的順序發送相同的數據包web

斷開一個TCP鏈接則須要「四次握手」:

第一次揮手:主動關閉方發送一個FIN,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方:我已經不 會再給你發數據了(固然,在fin包以前發送出去的數據,若是沒有收到對應的ack確認報文,主動關閉方依然會重發這些數據),可是,此時主動關閉方還可 以接受數據
第二次揮手:被動關閉方收到FIN包後,發送一個ACK給對方,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號)
第三次揮手:被動關閉方發送一個FIN,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,個人數據也發送完了,不會再給你發數據了
第四次揮手:主動關閉方收到FIN後,發送一個ACK給被動關閉方,確認序號爲收到序號+1,至此,完成四次揮手數據庫

TCP和UDP的區別

TCP(Transmission Control Protocol,傳輸控制協議)是基於鏈接的協議,也就是說,在正式收發數據前,必須和對方創建可靠的鏈接。一個TCP鏈接必需要通過三次「對話」才能創建起來
UDP(User Data Protocol,用戶數據報協議)是與TCP相對應的協議。它是面向非鏈接的協議,它不與對方創建鏈接,而是直接就把數據包發送過去! UDP適用於一次只傳送少許數據、對可靠性要求不高的應用環境後端

HTTP和HTTPS

HTTP協議一般承載於TCP協議之上,在HTTP和TCP之間添加一個安全協議層(SSL或TSL),這個時候,就成了咱們常說的HTTPS
默認HTTP的端口號爲80,HTTPS的端口號爲443瀏覽器

爲何HTTPS安全

由於網絡請求須要中間有不少的服務器路由器的轉發。中間的節點均可能篡改信息,而若是使用HTTPS,密鑰在你和終點站纔有。https之因此比http安全,是由於他利用ssl/tls協議傳輸。它包含證書,卸載,流量轉發,負載均衡,頁面適配,瀏覽器適配,refer傳遞等。保障了傳輸過程的安全性緩存

GET和POST的區別,什麼時候使用POST?

GET:通常用於信息獲取,使用URL傳遞參數,對所發送信息的數量也有限制,通常在2000個字符
POST:通常用於修改服務器上的資源,對所發送的信息沒有限制。
GET方式須要使用Request.QueryString來取得變量的值,而POST方式經過Request.Form來獲取變量的值,也就是說Get是經過地址欄來傳值,而Post是經過提交表單來傳值。
然而,在如下狀況中,請使用 POST 請求:
沒法使用緩存文件(更新服務器上的文件或數據庫)
向服務器發送大量數據(POST 沒有數據量限制)
發送包含未知字符的用戶輸入時,POST 比 GET 更穩定也更可靠安全

相關文章
相關標籤/搜索