前端面试题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.mzph.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;文件夹中的文件的列表)。这个函数对于…