不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • Langchain
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • Langchain
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • Python

  • GO

  • Java

  • 业务问题

  • 关键技术

  • 项目常识

  • 计算机基础

    • 01.操作系统概述
    • 02.进程管理
    • 03.内存管理
    • 04.设备管理
    • 11.网络七层
    • 12.TCP协议
    • 13.HTTP协议
      • 01.HTTP协议
        • 1、概述
        • 2、HTTP的特点
        • 3、HTTP协议的版本
        • 4、HTTP的工作流程
        • 5、常见的HTTP方法
        • 6、HTTP状态码
        • 7、HTTP与HTTPS
        • 8、HTTP协议的安全性问题
      • 02.常见问题
        • 1、HTTP工作原理
        • 2. HTTP请求方法
        • 3. HTTP状态码
        • 4. HTTP和HTTPS区别
        • 5. HTTP的无状态性
        • 6. HTTP1.1和HTTP2区别
        • 7. 跨域(CORS)问题
        • 8. HTTP缓存机制
        • 9. 长连接和短连接的区别
        • 10. RESTful架构是什么?
  • 区块链

  • 常识
  • 计算机基础
xiaonaiqiang
2024-09-25
目录

13.HTTP协议

# 01.HTTP协议

# 1、概述

  • HTTP(超文本传输协议)是一种用于在客户端和服务器之间传输超文本的通信协议
  • 它是互联网最核心的协议之一,用于实现Web浏览器与Web服务器之间的交互
  • HTTP协议规定了客户端如何请求服务器的资源,以及服务器如何响应客户端的请求

# 2、HTTP的特点

  • 无状态:

    • 每个HTTP请求都是独立的,服务器不会保留上一个请求的信息
    • 即每个请求和响应都是完全独立的,服务器不会主动记住用户的状态
  • 基于请求-响应模型:客户端发送请求(Request),服务器返回响应(Response)

  • 简单性:HTTP报文的结构比较简单,容易理解和实现,开发者容易掌握

  • 无连接:

    • HTTP协议在默认情况下是无连接的,也就是说在一次请求之后,连接就会关闭
    • 每次新的请求都需要重新建立连接
  • 灵活性:

    • HTTP协议支持不同类型的数据传输,除了文本,还可以传输图片、视频、音频等

# 3、HTTP协议的版本

  • ① HTTP/1.0:

    • 每次请求需要新建一个TCP连接,完成后立即关闭

    • 头部信息简单,没有缓存、持久连接等高级特性

    • 性能较差,尤其在加载包含多个资源(如图片、CSS、JS文件)的页面时,需要反复建立和关闭连接

  • ② HTTP/1.1(广泛使用的版本):

    • 持久连接(Persistent Connection):允许在同一个TCP连接上发送多个请求和响应,减少了频繁的TCP连接建立和断开

    • 管线化(Pipelining):允许客户端在发送一个请求的同时不必等待上一个请求的响应,这提高了传输效率

    • 缓存机制:引入了缓存控制(如Cache-Control)的头部字段,减少了不必要的服务器请求

    • 分块传输编码:允许服务器分块传输响应内容,使得客户端可以逐块接收数据,适合大文件的传输

  • ③ HTTP/2:

    • 二进制协议:相比HTTP/1.x的纯文本协议,HTTP/2采用二进制格式传输数据,提高了传输效率

    • 多路复用(Multiplexing):

      • 多个请求和响应可以在一个TCP连接上并行传输,无需排队等待
      • 解决了HTTP/1.1中的队头阻塞(Head-of-Line Blocking)问题
    • 头部压缩:通过HPACK算法对HTTP头部进行压缩,减少了数据传输量

    • 服务器推送(Server Push):服务器可以主动推送资源给客户端,减少客户端的请求次数

  • ④ HTTP/3:

    • 基于QUIC协议:

      • HTTP/3不再使用TCP,而是基于Google开发的QUIC协议
      • QUIC集成了传输控制和TLS(加密)层,减少了延迟和连接建立时间
    • 更快的传输速度:

      • QUIC可以减少连接时的握手时间,提高了传输速度,尤其适用于不稳定的网络环境

# 4、HTTP的工作流程

  • ① 客户端发送请求:用户通过浏览器或其他HTTP客户端发起请求

    • 请求行:定义了请求方法(如GET、POST)、请求的URL、协议版本(如HTTP/1.1)

    • 请求头(Headers):包括与请求相关的元数据,如User-Agent、Accept、Host等

    • 请求体(Body):

      • 在某些请求方法(如POST、PUT)中,客户端可能会发送数据给服务器,这些数据会放在请求体中
  • ② 服务器处理请求并发送响应:

    • 响应行:包含HTTP版本、状态码(如200、404等)以及状态描述

    • 响应头(Headers):包含与响应相关的元数据,如Content-Type、Content-Length等

    • 响应体(Body):服务器返回的实际数据,如网页的HTML内容、图片、视频等

  • ③ 客户端处理响应:

    • 客户端收到服务器的响应后,根据响应的内容进行处理,显示网页或其他资源,或者进行进一步操作

# 5、常见的HTTP方法

  • GET:请求指定的资源GET请求通常是幂等的,且不应包含请求体
  • POST:向服务器提交数据,通常用于提交表单或上传文件
  • PUT:向服务器上传指定资源,可以用来更新资源
  • DELETE:请求服务器删除指定的资源
  • HEAD:与GET类似,但服务器只返回响应头,不返回响应体,用于检查资源
  • OPTIONS:请求服务器支持的通信选项,通常用于跨域请求的预检
  • PATCH:用于局部更新资源

# 6、HTTP状态码

  • 1xx(信息响应):请求已接收,正在继续处理
  • 2xx(成功响应):请求已成功处理常见的有200 OK(请求成功)、204 No Content(成功但无返回内容)
  • 3xx(重定向):需要进一步操作以完成请求常见的有301 Moved Permanently(永久重定向)、302 Found(临时重定向)
  • 4xx(客户端错误):客户端请求错误常见的有400 Bad Request(请求无效)、401 Unauthorized(未授权)、404 Not Found(资源未找到)
  • 5xx(服务器错误):服务器处理请求时发生错误常见的有500 Internal Server Error(服务器内部错误)、503 Service Unavailable(服务不可用)

# 7、HTTP与HTTPS

  • HTTP是明文传输的,这意味着请求和响应的内容可以被第三方拦截和查看,存在安全隐患
  • HTTPS是HTTP的安全版
    • 它通过SSL/TLS协议加密传输的数据,确保数据的安全性和隐私性
    • HTTPS通过在HTTP上添加加密层,防止数据在传输过程中被窃取或篡改

# 8、HTTP协议的安全性问题

  • 数据窃听:由于HTTP是明文传输,攻击者可以通过拦截请求和响应获取敏感信息(如登录凭证、个人数据等)
  • 中间人攻击:攻击者可以篡改传输的数据,改变请求或响应的内容
  • 身份伪造:攻击者可以伪装成合法的服务器或客户端,获取敏感信息

# 02.常见问题

# 1、HTTP工作原理

HTTP是应用层的无状态、面向请求-响应的协议,工作流程如下

  1. 客户端(浏览器)发送HTTP请求:包含方法(如GET、POST)、URL、协议版本、头部信息和可选的请求体
  2. 服务器处理请求并返回响应:响应包括状态码、头部信息和可选的响应体(如HTML内容)
  3. 无状态性:每个请求都是独立的,服务器不保留任何之前请求的上下文

# 2. HTTP请求方法

  1. GET:请求获取指定资源,参数通常在URL中,不包含请求体
  2. POST:向服务器提交数据(如表单),包含请求体
  3. PUT:更新指定资源,数据包含在请求体中
  4. DELETE:删除指定资源
  5. HEAD:类似GET,但不返回响应体,只返回头部信息
  6. OPTIONS:请求查询服务器支持的HTTP方法
  7. PATCH:对资源进行部分更新

# 3. HTTP状态码

HTTP状态码表示服务器的响应状态,分为以下几类:

  1. 1xx(信息性状态):请求已接收,继续处理如:100 Continue
  2. 2xx(成功):请求成功并被处理如:200 OK、201 Created
  3. 3xx(重定向):请求资源已被移动到新位置,客户端需重定向如:301 Moved Permanently、302 Found
  4. 4xx(客户端错误):请求有错误,客户端需修改如:400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found
  5. 5xx(服务器错误):服务器无法处理请求如:500 Internal Server Error、503 Service Unavailable

# 4. HTTP和HTTPS区别

  1. 安全性:HTTP是明文传输,数据容易被窃取或篡改;HTTPS通过SSL/TLS加密,确保数据传输的安全性和完整性
  2. 端口:HTTP使用80端口,HTTPS使用443端口
  3. 证书验证:HTTPS需要SSL/TLS证书,确保通信双方的身份验证

重要性:HTTPS能够有效防止中间人攻击、窃听和数据篡改,因此被广泛应用于安全敏感的场景,如在线支付和登录

# 5. HTTP的无状态性

  • 无状态性:HTTP每个请求都是独立的,服务器不保留客户端的状态信息
  • 会话管理:为了实现状态保持,可以通过以下方式
    1. Cookie:服务器通过响应头设置,客户端在后续请求中自动携带
    2. Session:服务器在会话期间为客户端分配一个唯一的Session ID,客户端通过Cookie携带这个ID
    3. Token:使用JWT等认证令牌,客户端每次请求时携带令牌,服务器验证令牌以识别客户端

# 6. HTTP1.1和HTTP2区别

  • HTTP/1.1:逐个发送请求,建立多个TCP连接
  • HTTP/2:多路复用、头部压缩和二进制帧传输,提升性能和效率
    1. 多路复用:允许同一连接上并发多个请求-响应,不需要为每个请求建立新连接
    2. 头部压缩:使用HPACK压缩请求和响应的头部,减少带宽消耗
    3. 优先级和依赖关系:可以为请求分配优先级,以优化资源调度
    4. 服务器推送:服务器可以在客户端请求前主动发送资源

# 7. 跨域(CORS)问题

  • 跨域问题:浏览器出于安全考虑,限制从一个域向另一个域发起的请求
  • 解决方案:
    1. CORS(跨域资源共享):通过设置响应头Access-Control-Allow-Origin,服务器明确允许哪些域名可以跨域访问
    2. JSONP:利用<script>标签不受跨域限制,服务器返回一个JavaScript回调函数,但仅支持GET请求
    3. 代理服务器:通过代理服务器转发请求,客户端向同域服务器请求,代理服务器再向目标服务器发起请求

# 8. HTTP缓存机制

HTTP缓存机制通过缓存头来控制资源的缓存和更新

  1. 强缓存:
    • Expires:指定资源过期时间,但依赖客户端时间,易出错
    • Cache-Control:更常用,通过max-age设置资源有效期
  2. 协商缓存:
    • Last-Modified和If-Modified-Since:通过资源的最后修改时间进行比较,如果未修改则返回304
    • ETag和If-None-Match:通过资源的哈希值或版本号验证,如果匹配则返回304

缓存的重要性:缓存能够减少服务器负载,提升客户端响应速度,特别是对于静态资源

# 9. 长连接和短连接的区别

  • 短连接:每次请求-响应后立即断开连接,适用于频繁但低流量的场景
  • 长连接:使用Connection: keep-alive,保持连接在多次请求中不关闭,适用于需要多次请求的场景,减少连接建立和关闭的开销

应用场景:长连接在高频请求的场景下更有效率,如WebSockets、视频流媒体等

# 10. RESTful架构是什么?

RESTful架构是一种基于HTTP的设计风格,遵循以下原则

  1. 资源的URI标识:每个资源都有唯一的URI表示,如/users/1
  2. 使用标准HTTP方法:GET、POST、PUT、DELETE等方法对应不同的CRUD操作
  3. 无状态性:每次请求应包含所有必要的信息,服务器不保留状态
  4. 表现层的统一性:服务器返回标准化的资源表示形式(如JSON、XML)
  5. 客户端-服务器分离:客户端和服务器的职责明确,互不依赖
上次更新: 2024/10/15 16:27:13
12.TCP协议
01.常识梳理

← 12.TCP协议 01.常识梳理→

最近更新
01
05.快递Agent智能体
06-04
02
200.AI Agent核心概念
06-04
03
105.Agent智能体梳理
06-04
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式