当前位置: 首页 > news >正文

前端--深入理解HTTP协议

HTTP 协议简介

HTTPHyperText Transfer Protocol,超文本传输协议)是一个应用层协议,用于在客户端(通常是浏览器)和服务器之间传输超文本数据(如 HTML、CSS、JavaScript 等)。它是万维网(World Wide Web)的核心协议,通过 HTTP,用户能够在浏览器中访问网站。

HTTP 的特点
  1. 无状态:HTTP 协议是无状态协议,即服务器不会自动保存每次请求之间的上下文信息。每一次请求都是独立的,服务器处理请求后不会保留有关该请求的信息。无状态性使得 HTTP 协议简单易扩展,但也带来了缺点,比如需要引入 Cookies 或 Sessions 来保持用户会话状态。

  2. 面向请求-响应模型:HTTP 协议基于请求-响应模型,即客户端发送请求(Request),服务器处理并返回响应(Response)。

  3. 应用层协议:HTTP 是应用层协议,运行在 TCP/IP 之上,主要用于在分布式超文本系统中进行数据传输。

HTTP 的工作流程

HTTP 通信的典型流程如下:

  1. 建立连接:客户端与服务器通过 TCP 建立连接,通常使用默认的 80 端口(HTTPS 使用 443 端口)。
  2. 发送请求:客户端向服务器发送 HTTP 请求,请求包括方法、URL、协议版本、请求头等信息。
  3. 服务器处理请求并返回响应:服务器接收到请求后,进行处理,并返回响应,其中包括状态码、响应头、响应体(比如 HTML 内容)。
  4. 关闭连接:通常情况下,当响应结束后,服务器会关闭 TCP 连接。

HTTP 请求格式

一个典型的 HTTP 请求由四部分组成:

  1. 请求行:包括请求方法、目标资源的 URL 和协议版本。

    • 示例:GET /index.html HTTP/1.1
  2. 请求头(Headers):用于传递客户端环境信息、请求的元数据等。常见的请求头有:

    • Host: 指定请求的主机地址。
    • User-Agent: 客户端的浏览器类型或设备信息。
    • Accept: 告诉服务器客户端能接受的媒体类型。

    示例:

    Host: www.example.com
    User-Agent: Mozilla/5.0
    Accept: text/html
    
  3. 空行:请求头结束后有一个空行,表示头部的结束。

  4. 请求体(Body):只有在某些请求方法(如 POST 或 PUT)时,才包含请求体。请求体用于传递要提交的数据,比如表单信息。

HTTP 响应格式

HTTP 响应同样由四部分组成:

  1. 状态行:包括 HTTP 协议版本、状态码、状态描述。

    • 示例:HTTP/1.1 200 OK
  2. 响应头(Headers):用于描述响应的元数据,如服务器信息、缓存策略、内容类型等。

    • Content-Type: 指定响应内容的 MIME 类型,如 text/htmlapplication/json
    • Content-Length: 响应体的字节长度。

    示例:

    Content-Type: text/html
    Content-Length: 1024
    
  3. 空行:与请求类似,响应头后面有一个空行。

  4. 响应体(Body):实际的响应数据,如 HTML 文档、图像、文件等。

HTTP 请求方法

HTTP 定义了一些常见的请求方法,用于不同场景下与服务器进行交互:

  • GET:用于请求资源。GET 请求是幂等的(即多次请求不会产生副作用)。
  • POST:用于向服务器提交数据,通常用于提交表单、上传文件等。POST 请求可能会改变服务器状态。
  • PUT:用于上传指定资源,通常用于更新资源。
  • DELETE:用于删除服务器上的资源。
  • HEAD:与 GET 类似,但只返回响应头,不返回响应体。用于获取资源的元数据。
  • OPTIONS:用于查询服务器支持的请求方法。

HTTP 状态码

状态码用于标识服务器对客户端请求的处理结果。常见的 HTTP 状态码分为五类:

  1. 1xx(信息性状态码):表示请求已接收,服务器正在继续处理。

    • 100 Continue:客户端应继续请求。
  2. 2xx(成功):表示请求成功。

    • 200 OK:请求成功,服务器返回请求的数据。
    • 201 Created:资源创建成功。
  3. 3xx(重定向):表示资源的 URL 发生了变动,客户端需要使用新的 URL 重新请求。

    • 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:服务器暂时无法处理请求。

HTTP 与 HTTPS

HTTP 是不加密的,数据以明文方式在网络上传输,因此存在一定的安全隐患。为了解决这个问题,出现了 HTTPSHyperText Transfer Protocol Secure,超文本传输安全协议)。HTTPS 是 HTTP 的安全版本,采用 SSL/TLS 加密协议对通信内容进行加密。

HTTPS 的主要特性:
  • 加密:通过 SSL/TLS 加密通信数据,保护数据的机密性。
  • 身份认证:确保客户端和服务器之间的通信是可信的,防止中间人攻击。
  • 数据完整性:通过哈希校验,确保传输数据未被篡改。

HTTP 的发展(HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3)

  • HTTP/1.0:增加了HEAD、POST等新方法;增加了响应状态码;引入了头部,及请求头和响应头;在请求中加入了HTTP版本号;引入了Content-Type,使得传输的数据不再限于文本。
  • HTTP/1.1:这是目前使用最广泛的 HTTP 协议版本,增加了持久连接、管道化请求等特性。
  • HTTP/2:引入了二进制传输、多路复用等技术,大大提高了性能,支持同一连接中传输多个请求和响应,减少了延迟。
  • HTTP/3:基于 QUIC 协议,旨在进一步提升网络传输性能和安全性,解决了 TCP 的一些性能瓶颈问题。

相关文章:

前端--深入理解HTTP协议

HTTP 协议简介 HTTP(HyperText Transfer Protocol,超文本传输协议)是一个应用层协议,用于在客户端(通常是浏览器)和服务器之间传输超文本数据(如 HTML、CSS、JavaScript 等)。它是万…...

线性代数 向量

一、定义 几何定义:向量是一个有方向和大小的量,通常用箭头表示。向量的起点称为原点,终点称为向量的端点。 代数定义:向量是一个有序的数组,通常表示为列向量或行向量。 行向量就是 1*n的形式(行展开&…...

go中阶乘实现时递归及迭代方式的比较

package mainimport ("fmt""time""math/big" )// 使用递归和 big.Int 计算阶乘 func FactorialRecursive(n *big.Int) *big.Int {if n.Cmp(big.NewInt(0)) 0 {return big.NewInt(1)}return new(big.Int).Mul(n, FactorialRecursive(new(big.Int…...

Jupyter notebook中更改字体大小

文章目录 方法一:局部修改方法二:全局修改 Jupyter notebook提供了一个非常方便的跨平台交互代码编译环境,但是单元格的内的代码字体往往显示较小,不利于观看。本人查了很多方法来调整字体,后来发现既不需要更改jupyte…...

关于Ubuntu服务器的时间同步设置以及Linux什么时候开始使用swap虚拟内存

一、关于Ubuntu服务器的时间同步设置 首先我们检查一下服务器的时区设置和当前时间值,获取/etc/timezone 配置以及使用date命令查看当前时间。 rootiZ2ze7n2ynw18p6bs92fziZ:~# cat /etc/timezone Asia/Shanghai rootiZ2ze7n2ynw18p6bs92fziZ:~# date Wed Dec 21 …...

Java Stream API 详解

Java Stream API 详解 1. 什么是 Stream API? Stream API 是 Java 8 引入的一种用于处理集合(如数组、列表)的强大工具。它提供了一种声明性方式处理数据,可以简化代码并提高可读性。Stream 不是数据结构,它只是一种…...

一文了解大模型中的SDK和API

大白话聊SDK和API-知乎 1.智谱AI的SDK和API 以智谱AI为例,智谱AI的SDK是名为zhipuai的Python包,其中包含了用于访问API的接口(如api-key)。在这个框架中,API是SDK的一部分,用于实现与智谱AI服务的交互。 …...

element plus的el-select分页

摘要&#xff1a; el-select的数据比较多的时候&#xff0c;必须要分页&#xff0c;处理方案有全部数据回来&#xff0c;或者添加搜索功能&#xff0c;但是就有个问题就是编辑的时候回显问题&#xff0c;必须要保证select的数据有对应的id与name匹配回显&#xff01; <el-fo…...

STM32CubeMX【串口收发USART】

第一步&#xff0c;配置cubemx 配置好点右上角生成 第二步&#xff0c;串口方式 阻塞式发送 英文、中文正常、浮点有口 /* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();//配置完自动生成的 发送到串口助手上 while (1){/* USER CODE…...

【学术会议投稿】Java Web开发实战:从零到一构建动态网站

【会后3-4个月检索|IEEE出版】第五届人工智能与计算机工程国际学术会议&#xff08;ICAICE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a; https://ais.cn/u/nuyAF3 目录 引言 一、Java Web开发基础 1. Java Web开发简介 2. 开发环境搭建 …...

[Unity]内存优化

参考&#xff1a; Unity 内存优化 | 新诸子Unity内存优化&#xff08;来自uwa&#xff09; - weigang - 博客园Unity游戏内存优化——以TileMatch为例https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/blob/main/Design/OptimizationMemory.mdunity内存…...

FreeRTOS工程创建,创建多任务程序,基于汇编对ARM架构的简单理解

FreeRTOS工程创建 下载STM32CubeMX尽量找网盘下载&#xff08;只是建议&#xff0c;没有说官网不行&#xff09; 1.创建 STM32CubeMX 工程 &#xff08;1&#xff09;双击运行 STM32CubeMX&#xff0c;在首页面选择“Access to MCU Selector”&#xff0c;如下图所示&#xff1…...

C++STL--------list

文章目录 一、list链表的使用1、迭代器2、头插、头删3、insert任意位置插入4、erase任意位置删除5、push_back 和 pop_back()6、emplace_back尾插7、swap交换链表8、reverse逆置9、merge归并10、unique去重11、remove删除指定的值12、splice把一个链表的结点转移个另一个链表13…...

M1 Mac打开Jupyter notebook

当我成功安装了Jupyter之后&#xff0c;发现无法通过 jupyter notebook 开始工作。 最初的问题是 zsh command not found 该问题是个路径问题&#xff0c;通过添加PATH环境变量就行了&#xff0c;设置环境变量时需要注意&#xff0c;zshrc和bash_profile中都可以设置&…...

docker 仓库之harbor详解

Harbor 是一个开源的企业级容器镜像仓库&#xff0c;由 VMware 提供。它基于 Docker 分布式应用程序框架构建&#xff0c;旨在解决企业对容器镜像存储、安全性和可管理性的需求。Harbor 提供了丰富的功能&#xff0c;包括用户权限管理、镜像复制、审计日志、漏洞扫描等&#xf…...

【环境变量】windons的Path

在 Windows 操作系统中&#xff0c;“Path” 是一个重要的环境变量&#xff0c;它定义了操作系统在执行命令时搜索可执行文件的目录。简而言之&#xff0c;当你在命令行&#xff08;例如 cmd 或 PowerShell&#xff09;中输入一个命令时&#xff0c;Windows 会查看 “Path” 环…...

go语言里的切片

package mainimport "fmt"func main() {// 创建一个长度为3&#xff0c;容量为5的整数切片var numbers make([]int, 3, 8)// 打印初始状态printSlice(numbers) // 输出: len3 cap5 slice[0 0 0]// 向切片添加元素numbers append(numbers, 1, 2)// 再次打印&#xf…...

革新你的智能体验:AIStarter 3.1.1正式版现已上线【安全认证】ai应用市场,数字人,ai绘画,ai视频,大模型,工作流因有尽有

在这个日新月异的技术时代里&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度改变着我们的生活与工作方式。作为行业内的先锋之一&#xff0c;我们非常高兴地宣布&#xff1a;经过团队不懈努力以及严格的测试与优化后&#xff0c;AIStarter 3.1.1新版现已震撼…...

【练习17】数组中的最长连续子序列

数组中的最长连续子序列_牛客题霸_牛客网 (nowcoder.com) 题目分析&#xff1a;排序双指针 排序后&#xff0c;判断是否连续&#xff1a;后一个数-前一个数1 排序后&#xff0c;判断是否重复&#xff1a;后一个数-前一个数0 public class Solution {public int MLS (int[] arr)…...

2024 最适合 Web 开发者的 9 款 Chrome 扩展

随着 2024 年的进展&#xff0c;Chrome 扩展程序已成为 Web 开发人员工具包中不可或缺的一部分&#xff0c;在浏览器中提供强大的功能。在这篇文章中&#xff0c;我们将探讨今年在 Web 开发社区掀起波澜的 9 大 Chrome 扩展程序。 1.Lighthouse https://chromewebstore.google…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...