日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HTTP协议常问的面试题(吐血整理)

發布時間:2023/12/29 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP协议常问的面试题(吐血整理) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HTTP協議常問的面試題(吐血整理)

1、http協議請求方式 :

HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法 HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT下面是它們的作用(背的時候可以挑常見的請求去背誦)GET: 通常用于請求服務器發送某些資源 POST: 發送數據給服務器 PUT: 用于新增資源或者使用請求中的有效負載替換目標資源的表現形式 PATCH: 用于對資源進行部分修改 DELETE: 用于刪除指定的資源 HEAD: 請求資源的頭部信息, 并且這些頭部與 HTTP GET 方法請求時返回的一致. 該請求方法的一個使用場景是在下載一個大文件前先獲取其大小再決定是否要下載, 以此可以節約帶寬資源 OPTIONS: 用于獲取目的資源所支持的通信選項 CONNECT: HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器 TRACE: 回顯服務器收到的請求,主要用于測試或診斷

2、GET和POST有什么區別?

數據傳輸方式不同:GET請求通過URL傳輸數據,而POST的數據通過請求體傳輸。安全性不同:POST的數據因為在請求主體內,所以有一定的安全性保證,而GET的數據在URL中,通過歷史記錄,緩存很容易查到數據信息。數據類型不同:GET只允許 ASCII 字符,而POST無限制GET無害: 刷新、后退等瀏覽器操作GET請求是無害的,POST可能重復提交表單特性不同:GET是安全(這里的安全是指只讀特性,就是使用這個方法不會引起服務器狀態變化)且冪等(冪等的概念是指同一個請求方法執行多次和僅執行一次的效果完全相同),而POST是非安全非冪等

3、什么是無狀態協議,HTTP 是無狀態協議嗎,怎么解決

無狀態協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息。狀態協議解決辦法:通過1、Cookie 2、通過Session會話保存。

無狀態協議(Stateless Protocol) 就是指瀏覽器對于事務的處理沒有記憶能力。舉個例子來說就是比如客戶請求獲得網頁之后關閉瀏覽器,然后再次啟動瀏覽器,登錄該網站,但是服務器并不知道客戶關閉了一次瀏覽器。 HTTP 就是一種無狀態的協議,他對用戶的操作沒有記憶能力。可能大多數用戶不相信,他可能覺得每次輸入用戶名和密碼登陸一個網站后,下次登陸就不再重新輸入用戶名和密碼了。這其實不是 HTTP 做的事情,起作用的是一個叫做 小甜餅(Cookie) 的機制。它能夠讓瀏覽器具有記憶能力。

4、UDP 和 TCP 的區別

UDP 是什么?UDP 的全稱是 User Datagram Protocol,用戶數據報協議。它不需要所謂的握手操作,從而加快了通信速度,允許網絡上的其他主機在接收方同意通信之前進行數據傳輸。數據報是與分組交換網絡關聯的傳輸單元。UDP 的特點主要有: UDP 能夠支持容忍數據包丟失的帶寬密集型應用程序 UDP 具有低延遲的特點 UDP 能夠發送大量的數據包 UDP 能夠允許 DNS 查找,DNS 是建立在 UDP 之上的應用層協議。TCP 是什么?TCP 的全稱是Transmission Control Protocol ,傳輸控制協議。它能夠幫助你確定計算機連接到 Internet 以及它們之間的數據傳輸。通過三次握手來建立 TCP 連接,三次握手就是用來啟動和確認 TCP 連接的過程。一旦連接建立后,就可以發送數據了,當數據傳輸完成后,會通過關閉虛擬電路來斷開連接。TCP 的主要特點有: TCP 能夠確保連接的建立和數據包的發送 TCP 支持錯誤重傳機制 TCP 支持擁塞控制,能夠在網絡擁堵的情況下延遲發送 TCP 能夠提供錯誤校驗和,甄別有害的數據包。TCP 和 UDP 的區別(重點來了)TCP 是面向連接的協議 。 UDP 是無連接的協議 TCP 在發送數據前先需要建立連接,然后再發送數據 。 UDP 無需建立連接就可以直接發送大量數據 TCP 會按照特定順序重新排列數據包 。 UDP 數據包沒有固定順序,所有數據包都相互獨立 TCP 傳輸的速度比較慢 。 UDP 的傳輸會更快 TCP 的頭部字節有 20 字節 。 UDP 的頭部字節只需要 8 個字節 TCP 是重量級的,在發送任何用戶數據之前,TCP需要三次握手建立連接。 UDP 是輕量級的。沒有跟蹤連接,消息排序等。 TCP 會進行錯誤校驗,并能夠進行錯誤恢復 。 UDP 也會錯誤檢查,但會丟棄錯誤的數據包。 TCP 有發送確認。 UDP 沒有發送確認 TCP 會使用握手協議,例如 SYN,SYN-ACK,ACK。 UDP無握手協議 TCP 是可靠的,因為它可以確保將數據傳送到路由器。 UDP 中不能保證將數據傳送到目標。

5、說一下Http協議中302狀態?

http協議中,返回狀態碼302表示重定向。這種情況下,服務器返回的頭部信息中會包含一個Location字段,內容是重定向到的url。

6、Http協議有什么組成?

請求報文包含三部分:請求行:包含請求方法、URI、HTTP版本信息;請求首部字段;請求內容實體。

7、cookies機制和session機制的區別是什么?

(1)cookies數據保存在客戶端,session數據保存在服務端;

(2)cookies可以減輕服務器壓力,但是不安全,容易進行cookies欺騙;

(3)session安全一點,但是占用服務器資源。

8、HTTP協議有什么特點?

(1)http無連接:限制每次連接只處理一個請求,服務端完成客戶端的請求后,即斷開連接。(傳輸速度快,減少不必要的連接,但也意味著每一次訪問都要建立一次連接,效率降低);

(2)http無狀態:對于事務處理沒有記憶能力。每一次請求都是獨立的,不記錄客戶端任何行為;

(3)客戶端/服務端模型:客戶端支持web瀏覽器或其他任何客戶端;

(4)簡單快速;

(5)靈活:可以傳輸任何類型的數據。

9、http和https有什么區別?

(1)https有ca證書,http一般沒有;

(2)http是超文本傳輸協議,信息是明文傳輸。https則是具有安全性的ssl加密傳輸協議;

(3)http默認80端口,https默認443端口。

10、為什么有了HTTP為什么還要HTTPS?

https是安全版的http,因為http協議的數據都是明文進行傳輸的,所以對于一些敏感信息的傳輸就很不安全,HTTPS就是為了解決HTTP的不安全而生的。

11、HTTP的keep-alive是干什么的?

在早期的HTTP/1.0中,每次http請求都要創建一個連接,而創建連接的過程需要消耗資源和時間,為了減少資源消耗,縮短響應時間,就需要重用連接。在后來的HTTP/1.0中以及HTTP/1.1中,引入了重用連接的機制,就是在http請求頭中加入Connection: keep-alive來告訴對方這個請求響應完成后不要關閉,下一次咱們還用這個請求繼續交流。協議規定HTTP/1.0如果想要保持長連接,需要在請求頭中加上Connection: keep-alive。

keep-alive的優點:

  • 較少的CPU和內存的使用(由于同時打開的連接的減少了)
  • 允許請求和應答的HTTP管線化
  • 降低擁塞控制 (TCP連接減少了)
  • 減少了后續請求的延遲(無需再進行握手)
  • 報告錯誤無需關閉TCP連

12、http的請求報文是什么樣的?

請求報文有4部分組成:

  • 請求行

  • 請求頭部

  • 空行

  • 請求體

  • 請求行包括:請求方法字段、URL字段、HTTP協議版本字段。它們用空格分隔。例如,GET /index.html HTTP/1.1。

  • 請求頭部:請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號“:”分隔

  • User-Agent:產生請求的瀏覽器類型。
  • Accept:客戶端可識別的內容類型列表。
  • Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機。
    • 請求體: post put等請求攜帶的數據

    13、http的響應報文是什么樣的?

    響應報文有4部分組成:

    • 響應行

    • 響應頭

    • 空行

    • 響應體

    • 響應行: 由協議版本,狀態碼和狀態碼的原因短語組成,例如HTTP/1.1 200 OK。

    • 響應頭:響應部首組成

    • 響應體:服務器響應的數據

    14、聊一聊HTTP的部首有哪些?

    通用首部字段(General Header Fields):請求報文和響應報文兩方都會使用的首部

    • Cache-Control 控制緩存 ?
    • Connection 連接管理、逐條首部 ?

    請求首部字段(Reauest Header Fields):客戶端向服務器發送請求的報文時使用的首部

    • User-Agent 客戶端程序信息 ?

    • Host 請求資源所在服務器 ?

    • If-Match 比較實體標記(ETage) ?

      If-None-Match 比較實體標記(ETage)與 If-Match相反 ?

      If-Modified-Since 比較資源更新時間(Last-Modified)?

      If-Unmodified-Since比較資源更新時間(Last-Modified),與 If-Modified-Since相反 ?

    響應首部字段(Response Header Fields):從服務器向客戶端響應時使用的字段

    • Server 服務器的信息 ?
    • Location 令客戶端重定向的URI ?

    實體首部字段(Entiy Header Fields):針對請求報文和響應報文的實體部分使用首部

    • Last-Modified 資源最后的修改資源 ?
    • Expires 實體主體的過期資源 ?
    • Allow 資源可支持http請求的方法 ?

    15、聊一聊HTTP的狀態碼有哪些?

    2XX 成功

    • 200 OK,表示從客戶端發來的請求在服務器端被正確處理 ?
    • 201 Created 請求已經被實現,而且有一個新的資源已經依據請求的需要而建立
    • 202 Accepted 請求已接受,但是還沒執行,不保證完成請求
    • 204 No content,表示請求成功,但響應報文不含實體的主體部分
    • 206 Partial Content,進行范圍請求 ?

    3XX 重定向

    • 301 moved permanently,永久性重定向,表示資源已被分配了新的 URL
    • 302 found,臨時性重定向,表示資源臨時被分配了新的 URL ?
    • 303 see other,表示資源存在著另一個 URL,應使用 GET 方法丁香獲取資源
    • 304 not modified,表示服務器允許訪問資源,但因發生請求未滿足條件的情況
    • 307 temporary redirect,臨時重定向,和302含義相同

    4XX 客戶端錯誤

    • 400 bad request,請求報文存在語法錯誤 ?
    • 401 unauthorized,表示發送的請求需要有通過 HTTP 認證的認證信息 ?
    • 403 forbidden,表示對請求資源的訪問被服務器拒絕 ?
    • 404 not found,表示在服務器上沒有找到請求的資源 ?
    • 408 Request timeout, 客戶端請求超時
    • 409 Confict, 請求的資源可能引起沖突

    5XX 服務器錯誤

    • 500 internal sever error,表示服務器端在執行請求時發生了錯誤 ?
    • 501 Not Implemented 請求超出服務器能力范圍,例如服務器不支持當前請求所需要的某個功能,或者請求是服務器不支持的某個方法
    • 503 service unavailable,表明服務器暫時處于超負載或正在停機維護,無法處理請求
    • 505 http version not supported 服務器不支持,或者拒絕支持在請求中使用的 HTTP 版本

    16、TCP 三次握手和四次揮手

    TCP 三次握手和四次揮手也是面試題的熱門考點,它們分別對應 TCP 的連接和釋放過程。下面就來簡單認識一下這兩個過程

    TCP 三次握手

    在了解具體的流程前,我們需要先認識幾個概念消息類型 描述SYN 這個消息是用來初始化和建立連接的。 ACK 幫助對方確認收到的 SYN 消息 SYN-ACK 本地的 SYN 消息和較早的 ACK 數據包 FIN 用來斷開連接SYN:它的全稱是 Synchronize Sequence Numbers,同步序列編號。是 TCP/IP 建立連接時使用的握手信號。在客戶機和服務器之間建立 TCP 連接時,首先會發送的一個信號。客戶端在接受到 SYN 消息時,就會在自己的段內生成一個隨機值 X。 SYN-ACK:服務器收到 SYN 后,打開客戶端連接,發送一個 SYN-ACK 作為答復。確認號設置為比接收到的序列號多一個,即 X + 1,服務器為數據包選擇的序列號是另一個隨機數 Y。 ACK:Acknowledge character, 確認字符,表示發來的數據已確認接收無誤。最后,客戶端將 ACK 發送給服務器。序列號被設置為所接收的確認值即 Y + 1。

    看了上面是不是人都傻掉了 接下來我用一個簡單的例子去幫大家通俗易懂的去理解😄

    小明👩 - 客戶端

    小紅👨 - 服務端

    小明給小紅打電話,接通了后,小明說喂,能聽到嗎,這就相當于是連接建立。小紅給小明回應,能聽到,你能聽到我說的話嗎,這就相當于是請求響應。小明聽到小紅的回應后,好的,這相當于是連接確認。在這之后小明和小紅就可以通話/交換信息了。

    TCP 四次揮手

    在連接終止階段使用四次揮手,連接的每一端都會獨立的終止。下面我們來描述一下這個過程。

    首先,客戶端應用程序決定要終止連接(這里服務端也可以選擇斷開連接)。這會使客戶端將 FIN 發送到服務器,并進入 FIN_WAIT_1 狀態。當客戶端處于 FIN_WAIT_1 狀態時,它會等待來自服務器的 ACK 響應。然后第二步,當服務器收到 FIN 消息時,服務器會立刻向客戶端發送 ACK 確認消息。當客戶端收到服務器發送的 ACK 響應后,客戶端就進入 FIN_WAIT_2 狀態,然后等待來自服務器的 FIN 消息服務器發送 ACK 確認消息后,一段時間(可以進行關閉后)會發送 FIN 消息給客戶端,告知客戶端可以進行關閉。當客戶端收到從服務端發送的 FIN 消息時,客戶端就會由 FIN_WAIT_2 狀態變為 TIME_WAIT 狀態。處于 TIME_WAIT 狀態的客戶端允許重新發送 ACK 到服務器為了防止信息丟失。客戶端在 TIME_WAIT 狀態下花費的時間取決于它的實現,在等待一段時間后,連接關閉,客戶端上所有的資源(包括端口號和緩沖區數據)都被釋放。還是可以用上面那個通話的例子來進行描述小明對小紅說,我所有的東西都說完了,我要掛電話了。 小紅說,收到,我這邊還有一些東西沒說。 經過若干秒后,小紅也說完了,小紅說,我說完了,現在可以掛斷了 小明收到消息后,又等了若干時間后,掛斷了電話。

    總結

    以上是生活随笔為你收集整理的HTTP协议常问的面试题(吐血整理)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。