前端面試題3-淺談http協議及常見的面試題

1、淺談http協議

HTTP(Hypertext Transfer Protocol)超文本傳輸協議,是互聯網上應用最為廣泛的一種網絡協議,所有的WWW文件都必須遵守這個標準。它是基于TCP/IP通信協議來傳遞數據(HTML文件、圖片文件、查詢結果等)。

HTTP的基本特性

  1. 無狀態:HTTP協議對事務處理沒有記憶能力,服務器不知道客戶端是什么狀態。也就是說,后續請求對之前的所有請求是沒有記憶的,每次請求都是獨立的。這簡化了服務器的設計,但同時也需要通過Cookie或者Session等機制來保持用戶會話狀態。

  2. 媒體獨立性:只要客戶端和服務器知道如何處理的數據內容類型,任何類型的數據都可以通過HTTP發送。HTTP使用Content-Type加以標記。

  3. 無連接:HTTP/1.1之前,默認每個請求響應后關閉連接,HTTP/1.1開始引入了持久連接(Keep-Alive),在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲。

  4. 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。常用的請求方法有GET、POST等,每種方法規定了客戶端與服務器交互的不同方式。

HTTP請求報文結構

一個HTTP請求報文由請求行、請求頭、空行和請求體四部分組成:

  • 請求行:包含請求方法、URL和協議版本。
  • 請求頭:包含客戶端的信息、要訪問的資源等信息,如User-Agent、Accept-Language等。
  • 空行:請求頭后面的空行是必須的。
  • 請求體:POST請求中可能會有請求體,用于提交數據。

HTTP響應報文結構

響應報文也由四部分組成:狀態行、響應頭、空行和響應體。

  • 狀態行:包含協議版本、狀態碼和狀態消息。
  • 響應頭:包含服務器信息、實體內容信息等,如Server、Content-Type等。
  • 空行:響應頭之后的空行。
  • 響應體:服務器返回給客戶端的實際數據,比如HTML頁面、圖片等。

HTTP狀態碼

狀態碼由三位數字組成,分為五類:

  • 1xx(信息性狀態碼):表示接收的請求正在處理。
  • 2xx(成功狀態碼):表示請求已成功被服務器接收、理解,并接受。
  • 3xx(重定向狀態碼):需要客戶端采取進一步的操作才能完成請求。
  • 4xx(客戶端錯誤狀態碼):請求包含語法錯誤或無法完成請求。
  • 5xx(服務器錯誤狀態碼):服務器在處理請求的過程中發生了錯誤。

例如,200 OK表示請求成功,404 Not Found表示請求的資源未找到,500 Internal Server Error表示服務器內部錯誤。

HTTP發展

  • HTTP/1.0:最初的版本,無狀態、無連接。
  • HTTP/1.1:引入持久連接、管道化、分塊傳輸編碼等優化。
  • HTTP/2:多路復用、二進制分幀層、服務器推送等,大幅提高了性能。
  • HTTP/3:基于QUIC協議,改進了連接管理、減少延遲等。

以上是對HTTP協議的一個簡要概述,實際應用中HTTP協議的細節和最佳實踐遠比這些豐富,包括安全性增強(HTTPS)、緩存策略、內容編碼等都是深入學習HTTP時需要掌握的內容。

2、 面試題

1. HTTP協議的基本概念是什么?

答案: HTTP是一種應用層協議,它使用TCP/IP協議作為傳輸層,用于從萬維網服務器傳輸超文本到本地瀏覽器的傳輸協議。它是一個基于請求與響應模型的、無狀態的、應用層協議。

2. HTTP協議有哪些主要版本?它們之間有什么區別?

答案: 主要有HTTP/1.0、HTTP/1.1和HTTP/2以及最新的HTTP/3。

  • HTTP/1.0:首次引入了請求頭和響應頭的概念,但每個TCP連接只能處理一個請求,之后需要重新建立連接。
  • HTTP/1.1:引入了持久連接(Keep-Alive),允許在一個TCP連接上發送多個請求和響應,減少了網絡延遲;增加了HOST字段,支持虛擬主機;引入了管道化(pipelining),雖然理論上可以同時發送多個請求,但由于隊頭阻塞問題,實際效果有限。
  • HTTP/2:解決了HTTP/1.1的隊頭阻塞問題,通過多路復用(Multiplexing)在一個TCP連接上并行處理多個請求和響應;引入了二進制分幀層,提高了效率;服務器推送(Server Push)功能允許服務器主動向客戶端推送資源。
  • HTTP/3:基于QUIC(Quick UDP Internet Connections)協議,使用UDP而非TCP作為傳輸層協議,進一步減少延遲,改進了連接復用、錯誤恢復等問題。

3. 什么是HTTP狀態碼?列舉幾個常見的狀態碼及其含義。

答案: HTTP狀態碼是服務器對客戶端請求的響應狀態的一種表示方式,由三位數字組成,分為五類:

  • 1xx(信息性狀態碼):表示接收的請求正在處理。
  • 2xx(成功狀態碼):表示請求已成功被服務器接收、理解,并接受。
    • 200 OK:請求已成功處理。
  • 3xx(重定向狀態碼):需要客戶端采取進一步的操作才能完成請求。
    • 301 Moved Permanently:請求的資源已永久移動到新位置。
    • 302 Found:臨時重定向。
  • 4xx(客戶端錯誤狀態碼):請求包含語法錯誤或無法完成請求。
    • 400 Bad Request:請求無效或無法理解。
    • 401 Unauthorized:請求要求用戶的身份認證。
    • 404 Not Found:服務器無法找到請求的資源。
  • 5xx(服務器錯誤狀態碼):服務器在處理請求的過程中發生了錯誤。
    • 500 Internal Server Error:服務器遇到了不知道如何處理的情況。
    • 503 Service Unavailable:服務器目前無法使用(由于超載或停機維護)。

4. 什么是跨域問題?如何解決?

答案: 跨域問題是由于瀏覽器的同源策略限制,一個源的文檔或腳本不能訪問來自另一個源的資源。同源策略要求協議、域名和端口號都相同。

解決方法

  • CORS(Cross-Origin Resource Sharing):服務器在響應頭中添加Access-Control-Allow-Origin字段,指定哪些源可以訪問資源。
  • JSONP(JSON with Padding):利用<script>標簽沒有跨域限制的特點,通過動態插入<script>來請求數據,但僅支持GET請求。
  • 代理服務器:設置一個代理服務器,將請求轉發給目標服務器,從而繞過瀏覽器的同源策略限制。
  • WebSocket:WebSocket協議本身不受到同源策略的限制,可以實現跨域通信。

5. 請簡述HTTP請求和響應的結構。

答案:

  • HTTP請求結構通常包括:

    • 請求行(Request Line):包含方法(如GET、POST)、URL和協議版本。
    • 請求頭(Request Headers):攜帶客戶端的信息,如User-Agent、Accept-Language等。
    • 空行。
    • 請求體(Request Body):POST請求中可能包含的數據,如表單數據。
  • HTTP響應結構通常包括:

    • 狀態行(Status Line):包含協議版本、狀態碼和狀態消息。
    • 響應頭(Response Headers):服務器返回的信息,如Content-Type、Content-Length等。
    • 空行。
    • 響應體(Response Body):服務器返回的具體數據,如HTML頁面、圖片、JSON數據等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40354.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40354.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40354.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在Apache HTTP服務器上配置 TLS加密

安裝mod_ssl軟件包 [rootlocalhost conf.d]# dnf install mod_ssl -y此時查看監聽端口多了一個443端口 自己構造證書 [rootlocalhost conf.d]# cd /etc/pki/tls/certs/ [rootlocalhost certs]# openssl genrsa > jiami.key [rootlocalhost certs]# openssl req -utf8 -n…

OLED示波器的實現

OLED示波器是一種使用有機發光二極管&#xff08;OLED&#xff09;顯示屏來顯示波形的儀器。它可以實時顯示電壓、電流、頻率等信號的波形。 OLED顯示屏具有高對比度、高亮度、廣視角和快速響應時間等優點&#xff0c;使得OLED示波器在波形顯示方面具有更好的表現。與傳統的液…

鴻蒙開發設備管理:【@ohos.usb (USB管理)】

USB管理 本模塊主要提供管理USB設備的相關功能&#xff0c;包括查詢USB設備列表、批量數據傳輸、控制命令傳輸、權限控制等。 說明&#xff1a; 本模塊首批接口從API version 8開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。 導入模塊 import …

【JavaScript腳本宇宙】優化你的Web色彩:精選JavaScript顏色工具對比

萬能色彩助手&#xff1a;詳解最受歡迎的JavaScript顏色庫 前言 在現代Web開發中&#xff0c;顏色處理和轉換是一個不可忽視的環節。無論是網站設計、數據可視化還是用戶界面開發&#xff0c;都離不開對顏色的精確控制和轉換。為了滿足這一需求&#xff0c;眾多JavaScript庫應…

Toocaa Studio已開發的功能

2024年07月01日 Toocaa Studio 一個激光切割雕刻機的上位機&#xff0c; 未來會對標Xtool的xTool Creative Space和LightBurn&#xff0c;同時它也是一款圖形編輯器&#xff0c;矢量圖形編輯器。 工具類 鼠標畫矩形或正方形 鼠標畫橢圓或畫圓 鼠標畫直線或軌跡路徑 往畫布中…

你的機器人購物新體驗——安全、高效、無憂

如果你跟我一樣&#xff0c;對找到那些“恰到好處”的商品充滿渴望&#xff0c;那么&#xff0c;讓我來告訴你為什么BFT會成為你的下一個購物“心頭好”。 BFT的優勢 高效安全的支付體系&#xff1a;BFT交易系統保障了交易的安全性和透明性&#xff0c;讓你的每一筆消費都安全…

Build a Large Language Model (From Scratch)附錄B(gpt-4o翻譯版)

來源&#xff1a;https://github.com/rasbt/LLMs-from-scratch?tabreadme-ov-file https://www.manning.com/books/build-a-large-language-model-from-scratch

《More Effective C++》《雜項討論——34、如何在同一個程序中結合C++和C》

文章目錄 1、Terms34:如何在同一個程序中結合C和C1.1 名稱重整1.2 statics的初始化1.3 動態內存的分配1.4 數據結構的兼容性 2、總結3、參考 1、Terms34:如何在同一個程序中結合C和C 在大型項目中一般都用C進行開發&#xff0c;但是不可避免會用一些C語言進行底層的調用。在確…

【寵粉贈書】UML 2.5基礎、建模與設計實踐

為了回饋粉絲們的厚愛&#xff0c;今天小智給大家送上一套系統建模學習的必備書籍——《UML 2.5基礎、建模與設計實踐》。下面我會詳細給大家介紹這本書&#xff0c;文末留有領取方式。 圖書介紹 《UML 2.5基礎、建模與設計實踐》以實戰為主旨&#xff0c;結合draw.io免費軟件…

匿名內部類

下面代碼中&#xff0c;Person24 是一個抽象類&#xff0c;這意味著它不能被直接實例化&#xff0c;只能通過繼承它的子類來實現其抽象方法。代碼片段中展示了如何使用匿名內部類來實現一個抽象類的實例。 package chapter04;public class Java24_Object_匿名內部類 {public s…

verilog行為建模(三):塊語句

目錄 1.塊語句2.延遲賦值語句 微信公眾號獲取更多FPGA相關源碼&#xff1a; 1.塊語句 塊語句用來將多個語句組織在一起&#xff0c;使得他們在語法上如同一個語句。 塊語句分為兩類&#xff1a; 順序塊&#xff1a;語句置于關鍵字begin和end之間&#xff0c;塊中的語句以順…

鴻蒙‘ohpm‘ 不是內部或外部命令,也不是可運行的程序-解決方案

&#x1f525; 博客主頁&#xff1a; 小韓本韓&#xff01; ?? 感謝大家點贊&#x1f44d;收藏?評論?? 在鴻蒙的DevEco Studio的終端下輸入 onpm -v 或者 你需要下載第三方ohpm包的時候提示‘ohpm‘ 不是內部或外部命令&#xff0c;也不是可運行的程序- 主要是因為我們…

學習測試1

計算機基礎 1、計算機范式&#xff1a;馮諾依曼機 2、存儲單元 bit、byte、KB、MB、GB3、網絡 ip、域名、ping 域名、 ipconfig測試工作的流程 ------------------------------------------------------------------------------------------- 一 編寫測試大綱 羅列測試…

C++STL函數對象的應用

STL函數對象 文章目錄 STL函數對象1.基本概念2.使用方法1. 簡單函數對象示例2. 函數對象作為算法參數3. Lambda表達式作為函數對象 2.一元謂詞和二元謂詞1.一元謂詞2.二元謂詞3.總結 3.算術仿函數1.使用示例2.Lambda表達式的替代 4.關系仿函數5.邏輯仿函數 C中的函數對象&#…

文化創新與社交媒體:探索Facebook的足跡

在過去的十多年里&#xff0c;Facebook從一個簡單的校園社交網絡發展成為全球最大的社交媒體平臺之一。它不僅改變了人們的溝通方式&#xff0c;更在許多方面推動了文化的創新和變革。本文將深入探索Facebook如何通過其平臺的演進和功能創新&#xff0c;成為文化創新的重要推動…

Ubuntu / Debian安裝FTP服務

本章教程,記錄在Ubuntu中安裝FTP服務的具體步驟。FTP默認端口:21 1、安裝 pure-ftpd sudo apt-get install pure-ftpd2、修改默認配置 # 與 centos 不同,這里需要在 /etc/pure-ftpd/conf 文件夾下執行下列命令,增加對應配置文件: # 創建 /etc/pure-ftpd/conf/PureDB 文件…

【數據結構】(6.2)堆的應用——Top-K問題(C語言)

系列文章目錄 文章目錄 系列文章目錄問題引入一、TopK 問題 是什么&#xff1f;二、TopK 問題解決思路2.1 TopK 思路2.2 隨機產生數字2.2 完整代碼2.3 驗證結果 問題引入 TopK 問題 (在一堆數據里面找到前 K 個最大 / 最小的數)。 一、TopK 問題 是什么&#xff1f; 生活中也…

2024 最新docker倉庫鏡像,6月,7月

目前下面的docker倉庫鏡像源還能使用。 vi /etc/docker/daemon.json添加如下配置{"registry-mirrors": ["https://hub.uuuadc.top", "https://docker.anyhub.us.kg", "https://dockerhub.jobcher.com", "https://dockerhub.icu&…

船舶雷達與導航系統選擇7/8防水插座的原因分析

概述 船舶雷達與導航系統在現代航海中扮演著至關重要的角色&#xff0c;它們為船舶提供準確的導航信息&#xff0c;確保航行的安全和效率。在這些系統中&#xff0c;7/8防水插座的使用尤為重要&#xff0c;因為它們能夠在惡劣的海上環境中提供穩定的電力和信號連接。接下來&am…

python的os.walk()

os.walk() 是一個非常有用的函數&#xff0c;用于在Python中遍歷文件夾樹。它返回一個生成器&#xff0c;該生成器在每次迭代時返回一個包含三個元素的元組&#xff1a;(當前文件夾的路徑&#xff0c;文件夾中的子文件夾的列表&#xff0c;文件夾中的文件的列表)。這個函數對于…