前端面试题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.mfbz.cn/a/775548.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

.net core 的 winform 的 浏览器控件 WebView2

在.NET Core WinForms应用程序中&#xff0c;没有直接的“浏览器控件”&#xff0c;因为WinForms不支持像WebBrowser控件那样的功能。但是&#xff0c;你可以使用WebView2控件&#xff0c;它是一个基于Chromium的浏览器内核&#xff0c;可以在WinForms应用程序中嵌入Web内容。 …

Science Robotics 麻省理工学院最新研究,从仿真中学习的精确选择、定位和抓放物体的视触觉方法

现有的机器人系统在通用性和精确性两个性能目标上难以同时兼顾&#xff0c;往往会陷入一个机器人解决单个任务的情况&#xff0c;缺乏"精确泛化"。本文针对精准和通用的同时兼顾提出了解决方法。提出了SimPLE(Pick Localize和placE的仿真模拟)作为精确拾取和放置的解…

昇思25天学习打卡营第9天|MindSpore使用静态图加速(基于context的开启方式)

在Graph模式下&#xff0c;Python代码并不是由Python解释器去执行&#xff0c;而是将代码编译成静态计算图&#xff0c;然后执行静态计算图。 在静态图模式下&#xff0c;MindSpore通过源码转换的方式&#xff0c;将Python的源码转换成中间表达IR&#xff08;Intermediate Repr…

电气-伺服(6)脉冲控制

一、脉冲模式原理&#xff1a; 运动控制器输出脉冲信号给伺服驱动器 伺服驱动器工作于位置模式 伺服驱动器内部要完成三闭环&#xff08;位置闭环 、速度闭环、电流环&#xff09; 脉冲和伺服控制环&#xff1a;脉冲的个数作用于位置环。脉冲的频率作用于速度环 二、脉冲的两…

ATFX汇市:美国大非农数据来袭,美指与欧元或迎剧烈波动

ATFX汇市&#xff1a;今日20:30&#xff0c;美国劳工部将公布6月非农就业报告&#xff0c;其中新增非农就业人口数据最受关注&#xff0c;前值为27.2万人&#xff0c;预期值19万人&#xff0c;预期降幅高达8.2万人。如果公布值确实如预期一般&#xff0c;美联储降息预期将增强&…

mysql 字符集(character set)和排序规则(collation)

文章目录 概念1、字符集1.1、举例1.2、常见字符集 utf8 和 utf8mb4 区别1.3、字符集 使用 2、排序规则2.1、举例2.2、常见的排序规则 utf8mb4_bin 、utf8mb4_general_ci、utf8mb4_unicode_ci2.3、使用 概念 在 MySQL 中&#xff0c;字符集&#xff08;character set&#xff0…

昇思25天学习打卡营第8天|ResNet50迁移学习

一、迁移学习定义 迁移学习&#xff08;Transfer Learning&#xff09;&#xff1a;在一个任务上训练得到的模型包含的知识可以部分或全部地转移到另一个任务上。允许模型将从一个任务中学到的知识应用到另一个相关的任务中。适用于数据稀缺的情况&#xff0c;可减少对大量标记…

【代码大全2 选读】看看骨灰级高手消灭 if-else 逻辑的瑞士军刀长啥样

文章目录 1 【写在前面】2 【心法】这把瑞士军刀长啥样3 【示例1】确定某个月份的天数&#xff08;Days-in-Month Example&#xff09;4 【示例2】确定保险费率&#xff08;Insurance Rates Example&#xff09;5 【示例3】灵活的消息格式&#xff08;Flexible-Message-Format …

Windows10删除文件有较长延误的修复方法

Windows10删除文件有较长延误的修复方法 问题描述处理方法 问题描述 电脑配置很好&#xff0c;但是执行文件等删除操作时很长时间才有反应&#xff0c;才会弹出是否删除对话框。或者将文件移动到回收站&#xff0c;也是同样如此。 处理方法 第一步&#xff1a;以管理员身份启…

gitLab使用流程

标题1.配置账户 git config --global user.name git config --global user.email mygitlabmali.cn 标题2.生成秘匙 ssh-keygen -t rsa -C “mygitlabmail.cn” 。 //输入命令后一直回车 &#xff0c;输入命令后一直回车&#xff08;密码可以不填&#xff09;&#xff0c;至…

国际上备考所有AWS云计算/IT证书的五大优质免费课程网站

最近越来越多的小伙伴来问小李哥&#xff0c;小李哥亚马逊云科技AWS认证大满贯是在哪里上课复习的呢&#xff1f;全部上付费课程那不是一笔巨款吗&#xff1f;小李哥这次来盘点备考国际上IT证书的5大优质免费课程网站(不只是亚马逊云科技AWS的课程&#xff0c;其他课程同样可以…

Jemeter--独立变参接口压测

Jemeter–独立不变参接口压测 Jemeter–独立变参接口压测 Jemeter–关联接口压测 从数据库获取变参数据源 1、压测计划处添加对应数据库驱动包 左键点击压测计划&#xff0c;进入压测计划页面&#xff0c;点击浏览添加数据库链接jar包 2、线程组添加 JDBC配置原件 填写数据…

技术驱动:探索SpringBoot的大文件上传策略

1.分片上传技术 为了处理大文件上传并保证性能&#xff0c;前后端可以使用分片上传&#xff08;也称为分块上传&#xff09;技术。 1.选择原因 分片上传&#xff08;也称为分块上传&#xff09;是一种处理大文件上传的技术&#xff0c;主要目的是提高上传的可靠性和效率。 网…

用requirements.txt配置环境

1. 在anaconda创建环境 创建Python版本为3.8的环境&#xff0c;与yolov5所需的包适配。 2. 在Anaconda Prompt中激活环境 (base) C:\Users\吴伊晴>conda activate yolov5 3. 配置环境 用指定路径中的requirements.txt配置环境。 (yolov5) C:\Users\吴伊晴>pip insta…

LeetCode热题100刷题4:76. 最小覆盖子串、239. 滑动窗口最大值、53. 最大子数组和、56. 合并区间

76. 最小覆盖子串 滑动窗口解决字串问题。 labuladong的算法小抄中关于滑动窗口的算法总结&#xff1a; class Solution { public:string minWindow(string s, string t) {unordered_map<char,int> need,window;for(char c : t) {need[c];}int left 0, right 0;int …

【手机取证】如何使用360加固助手给apk加固

文章关键词&#xff1a;手机取证、电子数据取证、数据恢复 一、前言 APP加固是对APP代码逻辑的一种保护。原理是将应用文件进行某种形式的转换&#xff0c;包括不限于隐藏&#xff0c;混淆&#xff0c;加密等操作&#xff0c;进一步保护软件的利益不受损坏&#xff0c;下面给…

Java并发编程知识整理笔记

目录 ​1. 什么是线程和进程&#xff1f; 线程与进程有什么区别&#xff1f; 那什么是上下文切换&#xff1f; 进程间怎么通信&#xff1f; 什么是用户线程和守护线程&#xff1f; 2. 并行和并发的区别&#xff1f; 3. 创建线程的几种方式&#xff1f; Runnable接口和C…

pycharm如何使用jupyter

目录 配置jupyter新建jupyter文件别人写的方法&#xff08;在pycharm种安装&#xff0c;在网页中使用&#xff09; pycharm专业版 配置jupyter 在pycharm终端启动一个conda虚拟环境&#xff0c;输入 conda install jupyter会有很多前置包需要安装&#xff1a; 新建jupyter…

中国IDC圈探访北京•光子1号金融算力中心

今天&#xff0c;“AI”、“大模型”是最炙手可热的话题&#xff0c;全球有海量人群在工作生活中使用大模型&#xff0c;大模型产品涉及多模态&#xff0c;应用范围已涵盖电商、传媒、金融、短视频、制造等众多行业。 而回看2003年的互联网记忆&#xff0c; “上网”“在线”是…

空状态页面设计的艺术与科学

空状态界面是用户在网站、APP中遇到的因无数据展示而中断体验的界面&#xff0c;这个界面设计对于解决用户疑惑有着很大的帮助。那么我们应该如何设计空状态界面呢&#xff1f;空状态是指在界面设计中&#xff0c;没有内容或数据时所显示的状态。它可能出现在各种情况下&#x…