【计算机网络】HTTP详解

news/2024/5/19 20:43:28

系列综述:
💞目的:本系列是个人整理为了秋招工作面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。
🥰来源:材料主要源于小林Codeing进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。
🤭结语:如果有帮到你的地方,就点个赞关注一下呗,谢谢🎈🎄🌷!!!
🧐【C++】秋招&实习面经汇总篇


文章目录

    • HTTP
      • 基本概念
    • 参考博客


😊点此到文末惊喜↩︎


HTTP

基本概念

  1. 定义:HTTP协议是一个超文本传输协议,处于TCP/IP协议体系的应用层
  2. 万维网WWW
    • 定义:因特网中的Web服务资源空间,因特网还包含其他服务,如电子邮件服务,FTP等等
    • 组成
      • 统一资源定位符URL:标记万维网的各种资源,形式为协议 :// 主机 : 端口 / 路径
      • 超文本传输协议HTTP:使用TCP连接进行可靠传输的应用层协议
      • 超文本标记语言HTML:Web页面的数据和格式的描述语言
  3. HTTP协议
    • HTTP1.0
      • 无状态:服务器不保存任何客户端信息。无法进行动态交互,可以通过cookie/session进行身份认证和状态保存
      • 非持久连接:每次连接客户端发出请求服务器收到响应后便立即关闭连接。无法复用连接,每次TCP连接释放开销大。
      • 有序连接(队头阻塞):下一个请求必须在前一个请求响应到达之前才能发送,若有请求一直未响应,则后面请求会被阻塞
    • HTTP1.1
      • 持久连接:一次TCP连接,能进行多次请求-响应
      • 管道化:客户端能并发的发送多个请求,服务端按序串行发送响应。解决了发送端的队头阻塞,但是服务端可能导致队头阻塞。
      • 断点续传:HTTP消息头使用分块传输编码,将实体主体分块传输
    • HTTP2.0:在HTTP和SSL协议间增加SPDY,以增强HTTP协议功能
      • 多路复用:多个乱序发送的请求-响应报文共享一次TCP连接,根据不同帧首部的 stream id 标识符重新连接将不同的数据流进行组装,还可以设置数据流的优先级
      • 二进制分帧: 将请求信息转换并封装到headers frame中,将报文体封装到data frame中。HTTP到SPDY的转换中,进行了首部压缩并增加了控制信息
      • 服务器推送:服务器主动推送给客户端静态资源,客户端进行缓存
      • 首部压缩:通过静态字典、动态字典和哈夫曼编码进行
        • 静态字典:存储常见头部键值对,传输时头部简写成对应静态字典中的index
        • 动态字典:通过连接上下文进行更新,需要为每个 HTTP/2 连接维护不同的字典
        • 哈夫曼编码:根据使用频率进行非等长编码
      • TCP带来的瓶颈:在出现丢包的额情况下,整个TCP都要开始等待重传,导致后面的所有数据都被阻塞
    • HTTP3.0
      • 使用基于UDP的QUIC协议:一个连接上的多个stream之间没有依赖,即使丢包,只需要重发丢失的包即可,不需要重传整个连接。
      • 更好的移动端表现:TCP是基于IP识别连接,而QUIC是通过ID识别链接。 无论网络环境如何变化,只要ID不变,就能迅速重新连上
      • 加密认证的根文:所有报文头部都是经过认证的,报文Body都是经过加密的。
      • 向前纠错机制:每个数据包除了它本身的内容之外还包括了其他数据包的数据,因此少量的丢包可以通过其他包的冗余数据直接组装而无需重传。
      • 连接迁移:不再用tcp四元组确定一个连接,而是用一个64位随机数来确定这个连接
  4. 鼠标点击URL发生的事件及每层传输用到的协议
    • 浏览器分析链接指向的URL
    • 浏览器向DNS请求解析该域名的IP地址
    • 域名系统DNS解析出该域名服务器的IP
    • 浏览器与该服务器建立TCP链接(默认端口为80)
    • 浏览器发出HTTP的GET请求
    • 服务器响应HTTP把文件index.htm发送给浏览器
    • TCP链接释放
    • 浏览器解析HTML文件并进行布局渲染
      • 应用层:HTTP:超文本传输协议,DNS:域名解析服务
      • 传输层:TCP:为HTTP提供可靠的数据传输,UDP:DNS使用UDP进行传输
      • 网络层:IP:IP数据报的传输和路由选择,ICMP:提供网络传输的差错检测,ARP:将本机的默认网关IP地址映射成MAC地址
        数据链路层:PPP协议
  5. HTTP 常见的状态码有哪些?
    • 1xx提示码:属于提示信息,表示协议处理的一种中间状态
    • 2xx成功码:成功,表示服务器成功处理了客户端的请求报文
      • 200OK:最常见的成功状态码,表示服务器正常返回的响应头含有body数据
      • 204 No Content:常见的成功状态码,但是表示响应头中无body数据
      • 206 Partial Content:应用于分块下载或者断点续传,表示响应中的body数据只是所有数据的一部分
    • 3xx重定向码:表示客户端请求的资源地址发生变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。
      • 301 Moved Permanently:表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。
      • 302 Found:表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。
      • 304 Not Modified:不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件
    • 4xx错误码 :表示客户端发送的报文有误,服务器无法处理
      • 400 Bad Request:表示客户端请求的报文有错误,但只是个笼统的错误。
      • 403 Forbidden:表示服务器禁止访问资源,并不是客户端的请求出错。
      • 404 Not Found:表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
    • 5xx服务端错误 :表示客户端请求报文正确,但是服务器处理时内部发生了错误
      • 500 Internal Server Error:笼统的通用错误码
      • 501 Not Implemented:表示客户端请求的功能目前不支持
      • 502 Bad Gateway:通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
      • 503 Service Unavailable:表示服务器当前很忙,请稍后重试
  6. HTTP协议的常见字段
    • Host字段:客户端请求报文中用来指定服务器域名
    • Content-Length字段:服务器响应报文中,表示本次回应的数据长度
    • Connection字段:常用于客户端要求服务器使用「HTTP 长连接」机制,长连接通过握手建立连接后可以多次请求-响应,直到通过四次挥手断开连接
    • Content-Type 字段:用于服务器响应报文,告诉客户端本次数据编码格式
    • Content-Encoding 字段:指明数据的压缩格式
  7. HTTP通过TCP协议进行传输的“粘包”问题的解决
    • 设置指定字符作为 HTTP header 的边界
    • 通过 Content-Length 字段标识报文长度
  8. GET和POST的区别
    • 请求目的不同:GET是从服务器获取数据,而POST是向服务器提交数据。
    • 请求方式不同:GET请求将数据附加在URL的末尾作为查询参数发送(安全性低),而POST请求将数据包含在请求的正文中。
    • 长度限制:GET请求参数长度通常有限制,而POST请求则没有这个限制。
    • 能否缓存:GET请求可以被缓存,而POST请求不会。
  9. HTTP协议中安全和幂等的概念
    • 安全:请求方法不会破坏服务器上的资源
    • 幂等:多次执行相同的操作,结果都是相同的


少年,我观你骨骼清奇,颖悟绝伦,必成人中龙凤。
不如点赞·收藏·关注一波


🚩点此跳转到首行↩︎

参考博客

  1. 待定引用
  2. 待定引用
  3. 待定引用
  4. 待定引用
  5. 待定引用
  6. 待定引用
  7. 待定引用
  8. 待定引用

http://www.mrgr.cn/p/81614663

相关文章

SSIS对SQL Server向Mysql数据转发表数据 (一)

开发工具 Visual Stuido 2019 、SSIS、SQL Server 2016、Mysql 8.0.30 1、配置VS2019的添加相应的功能,勾选SQL Server Data Tools,下载就行我用的VS2019版本还需要下载下面几个插件,链接我放在下面了 Microsoft Analysis Services Projects - Visual St…

低代码在数智化时代中的应用

随着科技的发展,企业从生产到经营中海量的数据持续被记录。数据是望远镜,发现完全不同的商业边界;数据是显微镜,判断肉眼察觉不到的消费和生活行为;数据是雷达,帮助企业提前预测未来的行为。 而通过人工智…

【机器学习】Classification using Logistic Regression

Classification using Logistic Regression 1. 分类问题2. 线性回归方法3. 逻辑函数(sigmod)4.逻辑回归5. 决策边界5.1 数据集5.2 数据绘图5.3 逻辑回归与决策边界的刷新5.4 绘制决策边界 附录 导入所需的库 import numpy as np %matplotlib widget imp…

小研究 - 主动式微服务细粒度弹性缩放算法研究(二)

微服务架构已成为云数据中心的基本服务架构。但目前关于微服务系统弹性缩放的研究大多是基于服务或实例级别的水平缩放,忽略了能够充分利用单台服务器资源的细粒度垂直缩放,从而导致资源浪费。为此,本文设计了主动式微服务细粒度弹性缩放算法…

linux 安装FTP

检查是否已经安装 $] rpm -qa |grep vsftpd vsftpd-3.0.2-29.el7_9.x86_64出现 vsftpd 信息表示已经安装,无需再次安装 yum安装 $] yum -y install vsftpd此命令需要root执行或有sudo权限的账号执行 /etc/vsftpd 目录 ftpusers # 禁用账号列表 user_list # 账号列…

认识 springboot 之 它的配置文件 -2

前言 本篇了解springboot中配置的作用,介绍配置文件的种类,介绍简单使用配置文件,简单的小技巧如何设置注释,开启热部署等等,如有错误,请在评论区指正,让我们一起交流,共同进步&…

HBase有写入数据,页面端显示无数据量

写了一个测试类,插入几条数据,测试HBase的数据量。很简单的功能,这就出现问题了。。网页端可以看到,能够看到读写请求,但是不管是内存、还是磁盘,都没有数据。 于是就想到去HDFS查看,也是有数据…

RBAC三级树状菜单实现(从前端到后端)未完待续

1、表格设计 RBAC 2、前端路由 根据不同的用户id显示不同的菜单。 根据路由 3、多级菜单 展示所有权限,并且根据当前用户id展示它所属的角色的所有菜单。 前端树状展示 思路: 后端:传给前端map,map里1个是所有菜单&am…

Ubuntu Server版 之 apache系列 安装、重启、开启,版本查看

安装之前首先要检测是否安装过 apt list --installed | grep tool tool:要检测的名称,如mysql、apache 、ngnix 等 安装 apache sudo apt install apache2 安装apache 默认是开启的 可以通过浏览器 检测一下 service apache stop # apache 停止服务…

解决路由缓存问题

产生原因 路由只有参数发生变化时 会复用组件实例 解决 1.选择key 简单粗暴 2.选择beforeRouteUpdate钩子函数

Mybatis初识(一)

一.Mybatis是什么 MyBatis 是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis 去除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的XML或注解来配置,和映射原始类型、接口和Java POJO (Plain Old Java Objects…

使用CRM分析数据有哪些功能?

CRM数据分析软件可以帮助企业增强竞争力,并更好地了解客户需求及市场变化,助力企业数据分析,并提供实时更新的数据和分析结果,CRM数据分析软件的主要特点是什么?包括以下6个特点。 CRM数据分析软件的主要功能通常包括…

java数组对象初始化分析

分析代码 public static void main(String[] args) {int a10,b20,c30,d 40,e 50,f60;int aa[] {a,b,c,d,e,f};aa[2] 100;}代码的字节码 图解分析 refs https://docs.oracle.com/javase/specs/jvms/se19/html/jvms-6.html#jvms-6.5.aloadhttps://docs.oracle.com/javase/sp…

pve安装ikuai并设置,同时把pve的网络连接到ikuai虚拟机

目录 前因 前置条件 安装ikuai 进入ikuai的后台 配置lan口,以及wan口 配置lan口桥接 按实际情况来设置了 单拨(PPOE拨号) 多拨(内外网设置点击基于物理网卡的混合模式) 后续步骤 pve连接虚拟机ikuai的网络以及其他虚拟机连接ikuai的网…

Linux NUMA架构(非统一内存访问)

NUMA架构 NUMA Architecture| Non Uniform Memory Access Policy/Model | Numa Node Configuration (CPU Affinity) NUMA架构产生的原因 cpu的高速处理功能和内存存储直接的速度会严重影响cpu的性能。传统的计算机单核架构,cpu通过内存总线(内存访问控制器)直接连接到一…

哈工大计算机网络课程网络安全基本原理之:身份认证

哈工大计算机网络课程网络安全基本原理之:身份认证 在日常生活中,在很多场景下我们都需要对当前身份做认证,比如使用密码、人脸识别、指纹识别等,这些都是身份认证的常用方式。本节介绍的身份认证,是在计算机网络安全…

微信小程序使用ECharts的示例详解

目录 安装 ECharts 组件使用 ECharts 组件图表延迟加载 echarts-for-weixin 是 ECharts 官方维护的一个开源项目,提供了一个微信小程序组件(Component),我们可以通过这个组件在微信小程序中使用 ECharts 绘制图表。 echarts-fo…

Ubuntu Server版 之 共享文件 samba和NFS 两种方法

NFS 和 Samba NFS : linux之间资源共享 Samba: 是windows系统与Linux系统之间资源共享的 samba 安装samba 工具 sudo apt install samba 创建共享目录 sudo mkdir /home/shared sudo chmod 777 /home/shared 配置sambd sudo vim /etc/samba/smb.con…

vue - 【完整源码】实现评论区发表评论、回复评论、评论盖楼等功能,前端PC网站/移动端H5实现多用户评论与回复功能(详细示例源码,一键复制开箱即用)

效果图 在vue项目开发中,实现一个类似社交软件的评论区发表留言及回复等评论功能效果,可以无限回复盖楼。 一、功

Python - OpenCV识别条形码、二维码(已封装,拿来即用)

此代码可识别条形码和二维码,已封装好,拿来即用: import cv2 import pyzbar.pyzbar as pyzbar import numpy from PIL import Image, ImageDraw, ImageFontclass CodeScan():def __init__(self):super(CodeScan, self).__init__()def decode…