前端--深入理解HTTP协议
HTTP 协议简介
HTTP(HyperText Transfer Protocol,超文本传输协议)是一个应用层协议,用于在客户端(通常是浏览器)和服务器之间传输超文本数据(如 HTML、CSS、JavaScript 等)。它是万维网(World Wide Web)的核心协议,通过 HTTP,用户能够在浏览器中访问网站。
HTTP 的特点
-
无状态:HTTP 协议是无状态协议,即服务器不会自动保存每次请求之间的上下文信息。每一次请求都是独立的,服务器处理请求后不会保留有关该请求的信息。无状态性使得 HTTP 协议简单易扩展,但也带来了缺点,比如需要引入 Cookies 或 Sessions 来保持用户会话状态。
-
面向请求-响应模型:HTTP 协议基于请求-响应模型,即客户端发送请求(Request),服务器处理并返回响应(Response)。
-
应用层协议:HTTP 是应用层协议,运行在 TCP/IP 之上,主要用于在分布式超文本系统中进行数据传输。
HTTP 的工作流程
HTTP 通信的典型流程如下:
- 建立连接:客户端与服务器通过 TCP 建立连接,通常使用默认的 80 端口(HTTPS 使用 443 端口)。
- 发送请求:客户端向服务器发送 HTTP 请求,请求包括方法、URL、协议版本、请求头等信息。
- 服务器处理请求并返回响应:服务器接收到请求后,进行处理,并返回响应,其中包括状态码、响应头、响应体(比如 HTML 内容)。
- 关闭连接:通常情况下,当响应结束后,服务器会关闭 TCP 连接。
HTTP 请求格式
一个典型的 HTTP 请求由四部分组成:
-
请求行:包括请求方法、目标资源的 URL 和协议版本。
- 示例:
GET /index.html HTTP/1.1
- 示例:
-
请求头(Headers):用于传递客户端环境信息、请求的元数据等。常见的请求头有:
Host: 指定请求的主机地址。User-Agent: 客户端的浏览器类型或设备信息。Accept: 告诉服务器客户端能接受的媒体类型。
示例:
Host: www.example.com User-Agent: Mozilla/5.0 Accept: text/html -
空行:请求头结束后有一个空行,表示头部的结束。
-
请求体(Body):只有在某些请求方法(如 POST 或 PUT)时,才包含请求体。请求体用于传递要提交的数据,比如表单信息。
HTTP 响应格式
HTTP 响应同样由四部分组成:
-
状态行:包括 HTTP 协议版本、状态码、状态描述。
- 示例:
HTTP/1.1 200 OK
- 示例:
-
响应头(Headers):用于描述响应的元数据,如服务器信息、缓存策略、内容类型等。
Content-Type: 指定响应内容的 MIME 类型,如text/html、application/json。Content-Length: 响应体的字节长度。
示例:
Content-Type: text/html Content-Length: 1024 -
空行:与请求类似,响应头后面有一个空行。
-
响应体(Body):实际的响应数据,如 HTML 文档、图像、文件等。
HTTP 请求方法
HTTP 定义了一些常见的请求方法,用于不同场景下与服务器进行交互:
- GET:用于请求资源。GET 请求是幂等的(即多次请求不会产生副作用)。
- POST:用于向服务器提交数据,通常用于提交表单、上传文件等。POST 请求可能会改变服务器状态。
- PUT:用于上传指定资源,通常用于更新资源。
- DELETE:用于删除服务器上的资源。
- HEAD:与 GET 类似,但只返回响应头,不返回响应体。用于获取资源的元数据。
- OPTIONS:用于查询服务器支持的请求方法。
HTTP 状态码
状态码用于标识服务器对客户端请求的处理结果。常见的 HTTP 状态码分为五类:
-
1xx(信息性状态码):表示请求已接收,服务器正在继续处理。
- 100 Continue:客户端应继续请求。
-
2xx(成功):表示请求成功。
- 200 OK:请求成功,服务器返回请求的数据。
- 201 Created:资源创建成功。
-
3xx(重定向):表示资源的 URL 发生了变动,客户端需要使用新的 URL 重新请求。
- 301 Moved Permanently:资源已被永久移动到新位置。
- 302 Found:资源临时移动到新位置。
-
4xx(客户端错误):表示客户端的请求有错误。
- 400 Bad Request:请求无效,可能是语法错误。
- 401 Unauthorized:未授权,客户端需要提供认证信息。
- 403 Forbidden:服务器拒绝请求,客户端无权访问资源。
- 404 Not Found:请求的资源不存在。
-
5xx(服务器错误):表示服务器无法处理请求。
- 500 Internal Server Error:服务器内部错误。
- 503 Service Unavailable:服务器暂时无法处理请求。
HTTP 与 HTTPS
HTTP 是不加密的,数据以明文方式在网络上传输,因此存在一定的安全隐患。为了解决这个问题,出现了 HTTPS(HyperText 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分页
摘要: el-select的数据比较多的时候,必须要分页,处理方案有全部数据回来,或者添加搜索功能,但是就有个问题就是编辑的时候回显问题,必须要保证select的数据有对应的id与name匹配回显! <el-fo…...
STM32CubeMX【串口收发USART】
第一步,配置cubemx 配置好点右上角生成 第二步,串口方式 阻塞式发送 英文、中文正常、浮点有口 /* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();//配置完自动生成的 发送到串口助手上 while (1){/* USER CODE…...
【学术会议投稿】Java Web开发实战:从零到一构建动态网站
【会后3-4个月检索|IEEE出版】第五届人工智能与计算机工程国际学术会议(ICAICE 2024)_艾思科蓝_学术一站式服务平台 更多学术会议请看: https://ais.cn/u/nuyAF3 目录 引言 一、Java Web开发基础 1. Java Web开发简介 2. 开发环境搭建 …...
[Unity]内存优化
参考: Unity 内存优化 | 新诸子Unity内存优化(来自uwa) - weigang - 博客园Unity游戏内存优化——以TileMatch为例https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/blob/main/Design/OptimizationMemory.mdunity内存…...
FreeRTOS工程创建,创建多任务程序,基于汇编对ARM架构的简单理解
FreeRTOS工程创建 下载STM32CubeMX尽量找网盘下载(只是建议,没有说官网不行) 1.创建 STM32CubeMX 工程 (1)双击运行 STM32CubeMX,在首页面选择“Access to MCU Selector”,如下图所示࿱…...
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之后,发现无法通过 jupyter notebook 开始工作。 最初的问题是 zsh command not found 该问题是个路径问题,通过添加PATH环境变量就行了,设置环境变量时需要注意,zshrc和bash_profile中都可以设置&…...
docker 仓库之harbor详解
Harbor 是一个开源的企业级容器镜像仓库,由 VMware 提供。它基于 Docker 分布式应用程序框架构建,旨在解决企业对容器镜像存储、安全性和可管理性的需求。Harbor 提供了丰富的功能,包括用户权限管理、镜像复制、审计日志、漏洞扫描等…...
【环境变量】windons的Path
在 Windows 操作系统中,“Path” 是一个重要的环境变量,它定义了操作系统在执行命令时搜索可执行文件的目录。简而言之,当你在命令行(例如 cmd 或 PowerShell)中输入一个命令时,Windows 会查看 “Path” 环…...
go语言里的切片
package mainimport "fmt"func main() {// 创建一个长度为3,容量为5的整数切片var numbers make([]int, 3, 8)// 打印初始状态printSlice(numbers) // 输出: len3 cap5 slice[0 0 0]// 向切片添加元素numbers append(numbers, 1, 2)// 再次打印…...
革新你的智能体验:AIStarter 3.1.1正式版现已上线【安全认证】ai应用市场,数字人,ai绘画,ai视频,大模型,工作流因有尽有
在这个日新月异的技术时代里,人工智能(AI)正以前所未有的速度改变着我们的生活与工作方式。作为行业内的先锋之一,我们非常高兴地宣布:经过团队不懈努力以及严格的测试与优化后,AIStarter 3.1.1新版现已震撼…...
【练习17】数组中的最长连续子序列
数组中的最长连续子序列_牛客题霸_牛客网 (nowcoder.com) 题目分析:排序双指针 排序后,判断是否连续:后一个数-前一个数1 排序后,判断是否重复:后一个数-前一个数0 public class Solution {public int MLS (int[] arr)…...
2024 最适合 Web 开发者的 9 款 Chrome 扩展
随着 2024 年的进展,Chrome 扩展程序已成为 Web 开发人员工具包中不可或缺的一部分,在浏览器中提供强大的功能。在这篇文章中,我们将探讨今年在 Web 开发社区掀起波澜的 9 大 Chrome 扩展程序。 1.Lighthouse https://chromewebstore.google…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
