浅谈http协议及常见的面试题

news/2024/7/8 5:15:34 标签: 前端, http
http://www.w3.org/2000/svg" style="display: none;">

http_0">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.niftyadmin.cn/n/5536501.html

相关文章

快速了解-注解Annotation

描述 Annotation定义&#xff1a;注解是Java语言从JDK 5.0版本开始引入的一种技术。 Annotation作用&#xff1a; 注解不是程序本身&#xff0c;但可以对程序作出解释。这与注释&#xff08;comment&#xff09;类似&#xff0c;但注解可以被其他程序&#xff08;如编译器&…

使用vue3-treeselect问题

1.当vue3-treeselect是单选时&#xff0c;使用watch监听绑定value&#xff0c;无法监听到值清空 对照后将:value改为v-model&#xff0c;如图 2.使用vue3-treeselect全部清空按钮如何置空select的值&#xff0c;使用watch监听 多选&#xff1a;pageInfo.officeName(val) {// …

#Vue 3 + ts + antd table表格的使用(嵌套 子表格版)

1. 嵌套子表格的使用 <template><a-table :columns"columns" :data-source"data" class"components-table-demo-nested"><template #bodyCell"{ column }"><template v-if"column.key operation">…

WCCI 2024第三弹:忍者表演惊艳全场,盛大晚宴不容错过

WCCI 2024第三弹&#xff1a;忍者表演惊艳全场&#xff0c;盛大晚宴不容错过&#xff01; 会议之眼 快讯 会议介绍 IEEE WCCI&#xff08;World Congress on Computational Intelligence&#xff09;2024&#xff0c;即2024年IEEE世界计算智能大会&#xff0c;于6月30日至7月…

LabVIEW航空用电缆检测

系统通过集成LabVIEW平台&#xff0c;实现了航空用电缆检测过程中的自动数据收集、处理和报告生成&#xff0c;显著提升了检测效率和数据准确性&#xff0c;降低了人工干预&#xff0c;提高了电缆检测的可靠性。 项目背景 在航空领域&#xff0c;电缆的质量检测对确保飞机及其…

地铁车厢火灾3D模拟逃生演习减少了资源损耗和风险

在消防安全领域&#xff0c;为了更好地提升安全实训效果&#xff0c;我们在VR安全培训领域打造了多款消防安全VR模拟实训系统&#xff0c;不仅实现了与现实世界无异的交互操作&#xff0c;更在虚拟空间中超越了现实的限制&#xff0c;模拟出那些现实中难以搭建的复杂场景。 利用…

【Unity navmeshaggent 组件】

【Unity navmeshaggent 组件】 组件概述&#xff1a; NavMeshAgent是Unity AI系统中的一个组件&#xff0c;它允许游戏对象&#xff08;通常是一个角色或AI&#xff09;在导航网格&#xff08;NavMesh&#xff09;上自动寻路。 组件属性&#xff1a; Radius&#xff1a;导航…

比尔・盖茨谈AI市场狂热现象;腾讯推出TransAgents文学翻译框架

&#x1f989; AI新闻 &#x1f680; 比尔・盖茨谈AI市场狂热现象 摘要&#xff1a;微软联合创始人比尔・盖茨在《下一个伟大的构想》播客节目中表示&#xff0c;目前AI市场的狂热程度远超互联网泡沫&#xff0c;准入门槛低&#xff0c;融资额巨大&#xff0c;处于前所未见的…