元月's blog 元月's blog
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多

元月

临渊羡鱼,不如退而结网
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多
  • 基础

  • 数据结构

  • 网络

    • 网络分层
    • TCP协议详细介绍
    • HTTP详解
      • 一、简介
      • 二、发展
        • 2.1、HTTP/0.9
        • 2.2、HTTP/1.0
        • 2.3、HTTP/1.1
        • 2.4、HTTP/2
        • 2.5、HTTP/3
      • 三、HTTP状态码分类
        • 1xx Informational(信息性状态码)
        • 2xx Success(成功状态码)
        • 3xx Redirection(重定向状态码)
        • 4xx Client Error(客户端错误状态码)
        • 5xx Server Error(服务端错误状态码)
      • 四、HTTP通讯的基本流程
      • 五、HTTPS通讯的基本流程
    • 科学上网
  • 操作系统

  • 计算机网络
  • 网络
元月
2022-11-03
目录

HTTP详解

# HTTP详解

# 一、简介

HTTP是超文本传输协议,是用于在计算机之间传输数据的应用层协议。

# 二、发展

HTTP协议从诞生至今已经经历了多个版本的演变,以下是各个版本的主要区别:

# 2.1、HTTP/0.9

这个版本的协议非常简单,请求和响应只包含数据本身,没有头信息和其他元数据。

# 2.2、HTTP/1.0

引入了请求头和响应头,允许传输多种数据格式。HTTP/1.0每次请求和响应都需要单独建立TCP连接,效率较低。

请求和响应都是由三部分组成:起始行、首部和实体。

# 2.3、HTTP/1.1

为了解决HTTP/1.0的效率问题,引入了持久连接,即同一个TCP连接可以用于多次请求和响应。同时还引入了管道机制,允许多个请求并发发送和响应。这个版本的协议还引入了新的请求方法和状态码,支持压缩和分块传输编码,可以提高传输效率。

# 2.4、HTTP/2
  1. 二进制传输

    http2.0将请求和响应数据分割为更小的帧,并且它们采用二进制编码(http1.0基于文本格式)。多个帧之间可以乱序发送,根据帧首部的流表示可以重新组装。

  2. Header压缩

    Http2.0开发了专门的“HPACK”算法,大大压缩了Header信息

  3. 多路复用

    http2.0中引入了多路复用技术,很好的解决了浏览器限制同一个域名下的请求数量的问题。

    多路复用技术可以只通过一个TCP链接就可以传输所有的请求数据

  4. 服务端推送

    HTTP2.0在一定程度上改不了传统的“请求-应答”工作模式,服务器不再完全被动地响应请求,也可以新建“流”主动向客户端发送消息。(例如,浏览器在刚请求html的时候就提前把可能会用到的JS,CSS文件发送给客户端,减少等待延迟,这被称为“服务端推送Server Push”)

    服务器也不能随便将第三方资源推送给服务器,必须经过双方确认。

​ 此外,HTTP/2还可以使用TLS加密协议,提高安全性。

# 2.5、HTTP/3

HTTP/3基于QUIC协议开发,使用UDP协议进行传输,可以避免TCP的慢启动和拥塞控制等问题。

# 三、HTTP状态码分类

HTTP 状态码用于描述 HTTP 请求的结果,例如 200 表示请求被成功处理。

!

# 1xx Informational(信息性状态码)

表示接收的请求正在处理,基本不会遇到。

# 2xx Success(成功状态码)

表示请求被成功处理

  • 200 OK :请求被成功处理。

    比如我们发送一个查询用户数据的HTTP 请求到服务端,服务端正确返回了用户数据。这个是我们平时最常见的一个 HTTP 状态码。

  • 201 Created :请求被成功处理并且在服务端创建了一个新的资源。

    比如我们通过 POST 请求创建一个新的用户。

  • 202 Accepted :服务端已经接收到了请求,但是还未处理。

  • 204 No Content : 服务端已经成功处理了请求,但是没有返回任何内容。

    简单来说,204状态码描述的是我们向服务端发送 HTTP 请求之后,只关注处理结果是否成功的场景。也就是说我们需要的就是一个结果:true/false。

# 3xx Redirection(重定向状态码)

  • 301 Moved Permanently : 资源被永久重定向了

    比如你的网站的网址更换了。

  • 302 Found :资源被临时重定向了。

    比如你的网站的某些资源被暂时转移到另外一个网址。

  • **304 Not Modified ** :资源未更改

# 4xx Client Error(客户端错误状态码)

  • 400 Bad Request : 客户端请求的语法错误,服务器无法理解。

    比如请求参数不合法、请求方法错误。

  • 401 Unauthorized : 要求用户认证。

  • 403 Forbidden :服务器直接拒绝客户端的请求。一般用来针对非法请求。

  • 404 Not Found : 资源未找到。

  • 409 Conflict : 服务器处理请求时发生了冲突。

# 5xx Server Error(服务端错误状态码)

  • 500 Internal Server Error : 服务器内部错误,无法完成请求

    比如你服务端处理请求的时候突然抛出异常,但是异常并未在服务端被正确处理。

  • 502 Bad Gateway :我们的网关将请求转发到服务端,但是服务端返回的却是一个错误的响应

  • 503 Service Unavailable:由于超载或系统维护,服务器暂时的无法处理客户端的请求

# 四、HTTP通讯的基本流程

  1. DNS解析:在客户端发送请求前,需要先将请求的域名解析成对应的IP地址。客户端会先检查本地的DNS缓存中是否有对应的IP地址,如果没有则向DNS服务器发送DNS查询请求,获取对应的IP地址。

  2. 建立TCP连接:HTTP协议是基于TCP协议实现的,所以在发送HTTP请求前需要先建立TCP连接。建立TCP连接的过程中,会进行三次握手,确保双方都已准备好进行数据传输。

  3. 客户端发送HTTP请求:TCP连接建立成功后,客户端向服务器发送HTTP请求。

    HTTP请求由请求方法、URL、协议版本、请求头部和请求体等信息组成。常见的请求方法有GET、POST、PUT、DELETE等,每种请求方法对应不同的操作。

  4. 服务器处理请求:服务器接收到HTTP请求后,会进行相应的处理,包括解析请求报文、根据请求的URL找到对应的资源、进行相应的业务处理等。

  5. 服务器返回HTTP响应:服务器处理请求后,将处理结果封装成HTTP响应报文,并返回给客户端。

    HTTP响应由状态行、响应头部和响应体等信息组成。状态行包括状态码和状态消息,状态码表示服务器对请求的处理结果,常见的状态码有200、404、500等。

  6. 客户端接收HTTP响应:客户端接收到HTTP响应后,会进行相应的处理,包括解析响应报文、判断请求是否成功、获取响应体等。

  7. 关闭TCP连接:数据传输完成后,客户端和服务器需要关闭TCP连接,释放资源。关闭TCP连接的过程中,会进行四次挥手,确保双方都已关闭连接。

以上是HTTP请求的基本流程,不同的应用场景和实现方式可能会有一些差异,例如HTTP长连接和HTTPS协议等,但基本的流程和步骤大致相同。

# 五、HTTPS通讯的基本流程

HTTPS请求过程和HTTP请求过程基本相同,但在建立TCP连接和发送HTTP请求时,会增加一些额外的步骤和处理,以确保通信的安全性

  1. 建立SSL/TLS连接

    客户端向服务器发送一个请求,请求建立SSL/TLS连接。客户端会发送一个"Client Hello"消息,包含客户端支持的SSL/TLS协议版本、加密算法、随机数等信息。服务器收到消息后,会发送一个"Server Hello"消息,包含服务器选择的SSL/TLS协议版本、加密算法、随机数等信息。

  2. 服务器验证客户端身份

    服务器向客户端发送一个数字证书,证书包含了服务器的公钥和相关信息。客户端会验证证书的有效性和合法性,如果验证通过,客户端会生成一个随机数,并使用服务器的公钥对随机数进行加密,发送给服务器。

  3. 客户端验证服务器身份

    服务器收到加密的随机数后,使用自己的私钥对随机数进行解密,得到原始的随机数。服务器也会生成一个随机数,并使用客户端发送的公钥对随机数进行加密,发送给客户端。客户端收到加密的随机数后,使用自己的私钥对随机数进行解密,得到原始的随机数。客户端和服务器现在都拥有了相同的三个随机数:客户端生成的随机数、服务器生成的随机数、客户端和服务器共享的密钥。

  4. 安全数据交换

    客户端和服务器现在使用共享密钥进行加密和解密通信数据。客户端向服务器发送HTTP请求,请求报文会被加密。服务器收到请求后,会解密请求报文并进行处理,然后将响应报文加密后返回给客户端。客户端收到响应报文后,会使用共享密钥进行解密,得到原始的响应报文。

  5. 断开SSL/TLS连接

    HTTPS连接使用完毕后,客户端和服务器会断开SSL/TLS连接。在断开连接前,客户端和服务器会进行一些清理工作,包括删除临时数据、释放资源等

#HTTP
TCP协议详细介绍
科学上网

← TCP协议详细介绍 科学上网→

最近更新
01
otter二次开发-支持按目标端主键索引Load数据
08-03
02
mvnw简介
06-21
03
gor流量复制工具
06-03
更多文章>
Theme by Vdoing | Copyright © 2022-2024 元月 | 粤ICP备2022071877号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式