【计算机网络】HTTP详解

news2025/1/21 22:04:42

系列综述:
💞目的:本系列是个人整理为了秋招工作面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。
🥰来源:材料主要源于小林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.coloradmin.cn/o/812884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Prometheus 服务端与客户端

服务端安装配置 1)下载服务端: wget https://github.com/prometheus/prometheus/releases/download/v2.43.0-rc.0/prometheus-2.43.0-rc.0.linux-amd64.tar.gztar zxvf prometheus-2.43.0-rc.0.linux-amd64.tar.gz#解压 tar -xvf prometheus-2.32.1.li…

iOS开发-启动页广告实现

iOS开发-启动页广告实现 启动页广告实现是一个非常常见的广告展示模式。 就是在启动时候显示广告,之后点击跳转到广告页面或者其他APP。 一、实现启动页广告 启动页广告控件实现,将View放置在keyWindow上,显示广告图片,点击广告…

https://app.hackthebox.com/machines/Sau

https://app.hackthebox.com/machines/Sau https://app.hackthebox.com/machines/Sau1.info collecting └─$ nmap -A 10.10.11.224 -T4 Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-30 15:36 HKT Nmap scan report for 10.10.11.224 (10.10.11.224) Host is up (…

Arrays(数组)工具类

java.util.Arrays 是一个与数组相关的工具类,里面提供了大量静态方法,用来实现数组常见的操作。 Arrays.toString ( 数组名 )将参数数组变成字符串(按照默认格式:[10, 20, 30])Array.sort ( 数组名 ) 按照默认升序&…

C++ ------类和对象详解六大默认成员函数

文章目录 类的6个默认成员函数概念 构造函数概念特点 析构函数概念特征 拷贝构造函数概念特点 赋值运算符重载运算符重载的概念特性赋值运算符重载格式特性 取地址及const取地址操作符重载 类的6个默认成员函数 如果我们定义一个类,然后这个类中什么也没有。那么这里…

java之juc

juc是java.util.current的简写,意思是并发编程。 锁是什么?如何判断锁的是谁? 生产者和消费者问题 synchronized版本 package com.demo.juc.pc;/*** 线程之间的通信问题,生产者和消费者问题!* 线程交替执行** a b …

聊聊这几年的科技风口

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 数数这几年的科技风口:AR(包括什么MR、VR)、区块链(包括后来的什么web3)、元宇宙到现在的AI,下面逐一谈谈…

AI创作ChatGPT源码系统搭建教程+附源码/支持GPT4.0/支持ai绘画/mj以图生图/Mind思维导图

本系统使用Nestjs和Vue3框架技术,持续集成AI能力到本系统! ● 支持微信环境静默登录(可开启或关闭)、浏览器微信主动扫码登录、邮箱注册登录 ● 无认证公众号后台可关闭微信登录功能 ● 支持GPT3模型、GPT4模型、GPT联网功能 ● M…

TMS WEB Core Crack,TMS软件Delphi组件RADical Web

TMS WEB Core Crack,TMS软件Delphi组件RADical Web 使用我们的现代web应用程序框架,可以节省宝贵的时间并创造丰富的用户体验。我们所有的工具都由经验丰富的开发人员组成的专门团队提供支持。您可以信赖卓越的服务、活跃的社区和我们不断的创新。TMS Software是您的…

Restful的详细介绍~

RESTFUL简介: Restful是我们看待服务器的一种方式,我们都知道Java一切皆对象,因此在Java中,我们可以将所有的内容都看成对象,而在这里,RESTFUL是我们看待服务器的一种方式,我们可将服务器中的所…

【计算机视觉|人脸建模】3D人脸重建基础知识(入门)

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 一、三维重建基础 三维重建(3D Reconstruction)是指根据单视图或者多视图的图像重建三维信息的过程。 1. 常见三维重建技术 人工几何模型仪器采集基于图像的建模描述基于几何建模…

MP的开发流程-1

MP的开发流程 1、添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.ap…

Java Design and development -- QQ chat

About ARTS - Complete one ARTS per week: ● Algorithm: Do at least one LeetCode algorithm per week Review: Read and comment on at least one technical article in English ● Tips: Learn at least one technical trick ● Share: Share a technical article with op…

#P0999. [NOIP2008普及组] 排座椅

题目描述 上课的时候总会有一些同学和前后左右的人交头接耳&#xff0c;这是令小学班主任十分头疼的一件事情。不过&#xff0c;班主任小雪发现了一些有趣的现象&#xff0c;当同学们的座次确定下来之后&#xff0c;只有有限的 DD 对同学上课时会交头接耳。 同学们在教室中坐…

不同情境下沟通有哪些可用的工具箱?

在不同情境下&#xff0c;沟通的工具箱可以包括以下几个方面&#xff1a; 面对面交流&#xff1a;面对面交流是最直接和有效的沟通方式。可以通过面对面的会议、面谈或小组讨论等方式进行沟通。面对面交流可以更好地传递情感和非语言信息&#xff0c;有助于建立信任和理解。 …

基于峰谷分时电价引导下的电动汽车充电负荷优化(matlab代码)

目录 1 主要内容 峰谷电价优化 电动汽车充电负荷变化 2 部分代码 3 程序结果 1 主要内容 该程序基本复现《基于峰谷分时电价引导下的电动汽车充电负荷优化》&#xff0c;代码主要做的是基于NSGA-II的电动汽车充电负荷优化&#xff0c;首先&#xff0c;在研究电动汽车用户充…

Spring声明式事务@Transactional的一些问题的测试及求证

1.Spring的声明式事务Transactional问题 前提&#xff1a;有两个方法&#xff0c;a方法对a表做修改操作&#xff0c;b方法对b表做修改操作 a方法调用b方法&#xff0c;然后a方法报错&#xff0c;伪代码如下 public void a() {//数据库修改操作CompensateLogDO compensateLogDO…

英文论文(sci)解读复现【NO.14】基于关注机制的葡萄叶片病害检测

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

【宝藏系列】STM32之C语言基础知识

【宝藏系列】STM32之C语言基础知识 文章目录 【宝藏系列】STM32之C语言基础知识1️⃣位操作2️⃣define宏定义3️⃣ifdef条件编译4️⃣extern变量声明5️⃣typedef类型别名 C语言是单片机开发中的必备基础知识&#xff0c;本文列举了部分 STM32 学习中比较常见的一些C语言基础知…