HTTP学习

news2025/5/14 3:58:39

HTTP知识

01. 经典五层模型

在这里插入图片描述

  1. 应用层
    • 为应用软件提供了很多服务,构建于协议之上。
  2. 传输层
    • 数据的传输都是在这层定义的,数据过大分包,分片。
  3. 网络层
    • 为数据在节点之间传输创建逻辑链路
  4. 数据链路层
    • 通讯实体间建立数据链路连接
  5. 物理层
    • 主要作用是定义物理设备如何传输数据(光缆,网线)

02. HTTP协议的发展历史

  • http0.9 :

    • 只有一个命令GET,没有header等描述数据的信息,服务器发送完毕,就关闭tcp协议。
  • http1.0:

    • 增加了请求命令(GET, POST 和 HEAD)
    • status code
    • header
    • 多字符集支持
    • 权限
    • 缓存
    • 内容编码
    • 多部分发送

    缺点:

    HTTP/1.0 版的主要缺点是,每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。

    TCP连接的新建成本很高,因为需要客户端和服务器三次握手,并且开始时发送速率较慢。所以HTTP 1.0版本的性能比较差。随着网页加载的外部资源越来越多,这个问题就愈发突出了。

    为了解决这个问题,有些浏览器在请求时,用了一个非标准的Connection字段。Connection: keep-alive

    这个字段要求服务器不要关闭TCP连接,以便其他请求复用。服务器同样回应这个字段。

    一个可以复用的TCP连接就建立了,直到客户端或服务器主动关闭连接。但是,这不是标准字段,不同实现的行为可能不一致,因此不是根本的解决办法。

  • http1.1:

    • 增加了请求命令(OPTIONS、PUT、PATCH、DELETE、TRACE 、CONNECT)
    • 持久连接
    • 增加host

    缺点:

    虽然1.1版允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为队头堵塞

    为了避免这个问题,只有两种方法:

    1. 减少请求数
    2. 同时多开持久连接

    这导致了很多的网页优化技巧,比如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等等。如果HTTP协议设计得更好一些,这些额外的工作是可以避免的。

  • spdy协议: 谷歌自行研发, 主要解决http1.1效率不高的问题,被当做http2的基础,主要特性都被http2继承

  • http2:

    • 二进制传输
    • 信道复用
    • 分帧传输
    • server push

03. HTTP三次握手

在这里插入图片描述

第一次握手: 发送SYN报文,传达信息:“你好,我想建立连接”

第二次握手: 回传SYN+ACK报文,传达信息:“好的,可以建立链接”;

第三次握手: 回传ACK报文,传到信息:“好的,我知道了,那我们连接”。然后就建立连接了

TCP为什么要进行三次握手:

因为网络传输有延迟,客户端发送请求到服务器端要求建立连接,如果服务器端直接返回的话可能会产生丢包的情况导致客户端接收不到数据,客户端会因为超时就关闭了,可能就去发送新的请求了,然而服务端并不知道丢包导致客户端没有接收数据,服务端端口就一直开着,造成了额外的开销。所以需要三次握手确认这个过程。

04. HTTP四次挥手

在这里插入图片描述

第一次挥手: 客户端 和 服务器 打电话,通话即将结束后

第二次挥手: 客户端说“我没啥要说的了”,服务器回答“我知道了”,但是 服务器 可能还会有要说的话

第三次挥手: 客户端 不能要求 服务器 跟着自己的节奏结束通话,于是 服务器 可能又巴拉巴拉说了一通,最后 服务器 说“我说完了

第四次握手: 客户端 回答“知道了”,这样通话才算结束。

TCP为什么要进行四次握手:

因为数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

05. HTTP报文

  • 请求报文

  • 响应报文

在这里插入图片描述
在这里插入图片描述

HTTP请求方法

在这里插入图片描述

  1. 用来定义对于资源的操作

  2. 常用有GET、POST等

  3. 从定义上讲有各自的语义

HTTP状态码

在这里插入图片描述

  1. 定义服务器对请求的处理结果
  2. 各个区间的code有各自的语义
  3. 好的http服务可以通过status code判断结果

注意:

​ 301 永久跳转(走缓存)

​ 302 临时跳转

06. 跨域(CORS)

  1. 什么是跨域

    • 浏览器的同源策略限制了跨域请求资源
  2. jsonp跨域

  3. 跨域的限制(预请求)

    • 默认跨域允许的方法只有get、post、head,其它的方法不允许

      'Access-Control-Allow-Methods': 'POST,PUT,DELETE', // 设置通过请求的方法
      
    • 默认允许Content-type以下3个,其它预请求验证,通过才能发送

      • text/plain
      • multipart/form-data
      • application/x-www-form-urlencoded
    • 请求头限制,自定义的请求头是不允许,预请求验证通过才能发送

      'Access-Control-Allow-Headers':'X-Test-Cors', // 设置通过自定义的请求头
      'Access-Control-Max-Age':'1000' // Methods和Headers的结果可以被缓存多久
      

07. Cache-Control

  • 可缓存性

    • public 任何都可以
    • private 只有它发起浏览器可以缓存
    • no-cache 去服务端验证才能使用
    • no-store 彻底不能
    • no-transform 代理服务器不能改动返回内容
  • 到期时间(seconds)

    • max-age = < seconds > 最大时间
    • s-maxage = < seconds > 只有在代理服务器才会生效
    • max-stale = < seconds > 只能在发起端设置 就算max-age时间过期 max-stale时间没过期也会走缓存
  • 重新验证(了解)

    • must-revalidate
    • proxy-revalidate
  • 验证头 (不走本地缓存 发送请求带上验证头 验证决定走不走缓存 它基于no-cache的情况)

    • last-Modified

      • 配合If-Modified-Since或者If-Unmodified-Since使用
      • 对比上次修改时间以验证资源是否需要更新
    • Etag

      • 数据签名

      • 配合if-Match或者if-Non-Match使用

      • 对比资源的签名判断是否使用缓存

08. Cookie

在这里插入图片描述

用法:

  • 通过Set-Cookie设置
  • 下次请求会自动带上
  • 键值对,可以设置多个

属性:

  • max-age 和 expires设置过期时间
  • Secure只在https的时候发送
  • HttpOnly无法通过document.cookie访问

09. HTTP长连接

  • TCP connection
    • Connection: keep-alive/close(开启/关闭)
    • HTTP2只需要建立一个TCP长连接 (同域下)

10. 数据协商:

  • 请求

    • Accept 什么类型

    • Accept-Encoding 压缩方式

    • Accept-Language 语言

    • user-Agent 浏览器信息

  • 返回

    • Content-type
    • Content-Encoding
    • Content-Language

11. CSP(内容安全策略)

  • 限制方式

    Content-Security-Policy :‘default-src’

  • 资源类型

    'Content-Security-Policy': 'script-src \'self\'; form-action \'self\'; report-uri /report'
    

12. HTTPS

  • http 是明文传输

  • https 通过握手进行加密

    • 加密-公钥
    • 解密-私钥

在这里插入图片描述

  1. 客户端请求服务器获取证书公钥
  2. 客户端(SSL/TLS)解析证书(无效会弹出警告)
  3. 生成随机值
  4. 公钥加密随机值生成密钥
  5. 客户端将秘钥发送给服务器
  6. 服务端用私钥解密秘钥得到随机值
  7. 将信息和随机值混合在一起进行对称加密
  8. 将加密的内容发送给客户端
  9. 客户端用秘钥解密信息

13. HTTP2

在这里插入图片描述

  • 二进制协议

    • http1.1头信息必须是字符,数据体可以是文本,也可以是二进制
    • http2 全部都是二进制
  • 头信息压缩

    • 头部信息一样的变相缓存
  • 信道复用

    • 同一个连接里面发送多个请求不再需要按照顺序来
  • 数据流

    • http1.1版取消数据流的唯一方法,就是关闭TCP连接。
    • http2 可以取消某一次请求,同时保证TCP连接还打开着,可以被其他请求使用。
  • 服务器推送

    • Http2 服务端可以推送,主动向客户端发送请求

      http1 解析html页面里面css、js文件, 需要解析到css和js文件发送请求等数据回来渲

      http2 解析html里面建立连接,如果有css、js文件,服务端会主动推送到客户端

      不再发送请求获取css、js文件

    • 浏览器目前是必须开启https 才能使用http2

HTTP 和 HTTP2 对比演示的demohttps://http2.akamai.com/demo

14. HTTP3(了解)

在这里插入图片描述

15. Nginx 配置

  1. 配置nginx

  2. 配置代理缓存

  3. 配置https

    openssl req -x509 -newkey rsa:2048 -nodes -sha256 -keyout localhost-privkey.pem -out localhost-cert.pem
    
  4. 配置http2

16. 面试题

  1. 为什么传统上利用多个域名来提供网站资源会更有效

  2. Long-Polling、Websockets、Server-Sent Event(SSE)、WebRTC

  3. 常见的请求头和响应头

  4. 和缓存有关的HTTP首部字段(非常重要)

  5. HTTP method

  6. HTTP 状态码

  7. HTTPS 加密过程

  8. HTTP2新特性(重要)

  9. 三次握手四次挥手(重要)

证书秘钥

openssl req -x509 -newkey rsa:2048 -nodes -sha256 -keyout localhost-privkey.pem -out localhost-cert.pem

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2375089.html

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

相关文章

go语言实现IP归属地查询

效果: 实现代码main.go package mainimport ("encoding/json""fmt""io/ioutil""net/http""os" )type AreaData struct {Continent string json:"continent"Country string json:"country"ZipCode …

Android RxJava框架分析:它的执行流程是如何的?它的线程是如何切换的?如何自定义RxJava操作符?

目录 RxJava是什么&#xff1f;为什么使用。RxJava是如何使用的呢&#xff1f;RxJava如何和Retrofit一起使用。RxJava源码分析。 &#xff08;1&#xff09;他执行流程是如何的。&#xff08;2&#xff09;map&#xff08;3&#xff09;线程的切换。 如何自定义RxJava操作符…

MySQL及线程关于锁的面试题

目录 1.了解过 MySQL 死锁问题吗&#xff1f; 2.什么是线程死锁&#xff1f;死锁相关面试题 2.1 什么是死锁&#xff1a; 2.2 形成死锁的四个必要条件是什么&#xff1f; 2.3 如何避免线程死锁&#xff1f; 3. MySQL 怎么排查死锁问题&#xff1f; 4.Java线上死锁问题如…

【工作记录】crmeb后端项目打开、运行

1、下载代码 1&#xff09;安装git 不再详述 2&#xff09;git拉代码 项目地址如下&#xff0c;在vscode-分支中拉代码 # 克隆项目 git clone https://gitee.com/ZhongBangKeJi/crmeb_java/ 截图如下是已经成功拉下来 注意安装对应版本 2、maven配置 安装配置见&#x…

智能手表测试计划文档(软/硬件)

&#x1f4c4; 智能手表测试计划文档&#xff08;软/硬件&#xff09; 项目名称&#xff1a;Aurora Watch S1 文档编号&#xff1a;AW-S1-QA-TP-001 编制日期&#xff1a;2025-xx-xx 版本&#xff1a;V1.0 编写人&#xff1a;xxx&#xff08;测试主管&#xff09; 一、测试目标…

k8s监控方案实践(三):部署与配置Grafana可视化平台

k8s监控方案实践&#xff08;三&#xff09;&#xff1a;部署与配置Grafana可视化平台 文章目录 k8s监控方案实践&#xff08;三&#xff09;&#xff1a;部署与配置Grafana可视化平台一、Grafana简介1. 什么是Grafana&#xff1f;2. Grafana与Prometheus的关系3. Grafana应用场…

嵌入式系统架构验证工具:AADL Inspector v1.10 全新升级

软件架构建模与早期验证是嵌入式应用的关键环节。架构分析与设计语言&#xff08;AADL&#xff09;是专为应用软件及执行平台架构模型设计的语言&#xff0c;兼具文本与图形化的双重特性。AADL Inspector是一款轻量级的独立工具&#xff1a; 核心处理能力包括 √ 支持处理AA…

STM32-模电

目录 一、MOS管 二、二极管 三、IGBT 四、运算放大器 五、推挽、开漏、上拉电阻 一、MOS管 1. MOS简介 这里以nmos管为例&#xff0c;注意箭头方向。G门极/栅极&#xff0c;D漏极&#xff0c;S源极。 当给G通高电平时&#xff0c;灯泡点亮&#xff0c;给G通低电平时&a…

华为云Flexus+DeepSeek征文|从开通到应用:华为云DeepSeek-V3/R1商用服务深度体验

前言 本文章主要讲述在华为云ModelArts Studio上 开通DeepSeek-V3/R1商用服务的流程&#xff0c;以及开通过程中的经验分享和使用感受帮我更多开发者&#xff0c;在华为云平台快速完成 DeepSeek-V3/R1商用服务的开通以及使用入门注意&#xff1a;避免测试过程中出现部署失败等问…

鸿蒙NEXT开发动画案例5

1.创建空白项目 2.Page文件夹下面新建Spin.ets文件&#xff0c;代码如下&#xff1a; /*** TODO SpinKit动画组件 - Pulse 脉冲动画* author: CSDN—鸿蒙布道师* since: 2024/05/09*/ ComponentV2 export struct SpinFive {// 参数定义Require Param spinSize: number 48;Re…

ctfshow——web入门351~356

SSRF没有出网的部分 web入门351 $ch curl_init($url); 作用&#xff1a;初始化一个 cURL 会话&#xff0c;并设置目标 URL。解释&#xff1a; curl_init($url) 创建一个新的 cURL 资源&#xff0c;并将其与 $url 关联。这里的 $url 是用户提供的&#xff0c;因此目标地址完全…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】金融风控分析案例-10.1 风险数据清洗与特征工程

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 PostgreSQL金融风控分析案例&#xff1a;风险数据清洗与特征工程实战一、案例背景&#xff1a;金融风控数据处理需求二、风险数据清洗实战&#xff08;一&#xff09;缺失值…

美女热舞混剪视频批量剪辑生产技术实践:智能处理与原创性提升方案解析

一、引言&#xff1a;短视频工业化生产的技术转型 在美女类短视频内容运营中&#xff0c;通过标准化技术流程实现「高质量、规模化」产出成为核心需求。本文结合实战经验&#xff0c;解析如何通过智能素材重组、AI 语音合成、动态元素叠加等技术手段&#xff0c;构建自动化生产…

神经网络基础-从零开始搭建一个神经网络

一、什么是神经网络 人工神经网络(Articial Neural Network,简写为ANN)也称为神经网络(NN),是一种模仿生物神经网络和功能的计算模型,人脑可以看做是一个生物神经网络,由众多的神经元连接而成,各个神经元传递复杂的电信号,树突接收到输入信号,然后对信号进行处理,通…

#Redis黑马点评#(五)Redisson原理详解

目录 一 基于Redis的分布式锁优化 二 Redisson 1 实现步骤 2 Redisson可重入锁机制 3 Redisson可重试机制 4 Redisson超时释放机制 5 RedissonMultiLock解决主从一致性 三 trylock与lock两者有何区别 四 Redis优化秒杀 一 基于Redis的分布式锁优化 二 Redisson Redis…

23.(vue3.x+vite)引入组件并动态切换(component)

让多个组件使用同一个挂载点,并动态切换,这就是动态组件 效果截图 A组件代码: <template><div><div>{{message }}</</

VBA会被Python代替吗

VBA不会完全被Python取代、但Python在自动化、数据分析与跨平台开发等方面的优势使其越来越受欢迎、两者将长期并存且各具优势。 Python以其易于学习的语法、强大的开源生态系统和跨平台支持&#xff0c;逐渐成为自动化和数据分析领域的主流工具。然而&#xff0c;VBA依旧在Exc…

SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(三)完结

10 消息服务详情 10.1 本章定义实现加工管理概念所需的消息服务。这些消息已在第8.1节中初步介绍。 协议无关性&#xff1a;这些服务独立于所使用的消息协议&#xff0c;可映射至SECS-II&#xff08;SEMI E5&#xff09;或其他类似协议。 10.1.1 消息服务定义内容包括&#…

MySQL数据库创建、删除、修改

一&#xff1a;建库建表 我们以学校体系进行建表。将数据库命名为school。 以下代码中的大写均可小写不影响。如CREATE DATABASE与create database相同 四个关键的实体分别是学院、老师、学生和课程&#xff0c;其中&#xff0c;学生跟学院是从属关系&#xff0c;这个关系从…

【氮化镓】GaN在不同电子能量损失的SHI辐射下的损伤

该文的主要发现和结论如下: GaN的再结晶特性 :GaN在离子撞击区域具有较高的再结晶倾向,这导致其形成永久损伤的阈值较高。在所有研究的电子能量损失 regime 下,GaN都表现出这种倾向,但在电子能量损失增加时,其效率会降低,尤其是在材料发生解离并形成N₂气泡时。 能量损失…