【HTTP】详解
目录
HTTP 基本概念
啥是HTTP,有什么用?
HTTP(HyperTextTransferProtocol,超文本传输协议)是用于客户端和服务器之间数据传输的应用层协议,主要用在Web浏览器和服务器之间的通信。HTTP最初是为传输HTML文档设计的,但现在支持多种类型的数据,如图片、视频、文本等。
举个咱们最熟悉的例子:
- Web浏览:浏览器使用HTTP从服务器获取网页和资源,如图片和CSS文件。
- 数据传输:开发者使用HTTP在客户端和服务器之间发送和接收数据,特别是在WebAPI和REST服务中。你看当你通过浏览器访问一个网页的时候。你往往会输入:http://www.baidu.com.
无状态性:每个HTTP请求都是独立的,不记录之前的任何请求信息,请求一次,就返回一次。这简化了协议的实现,但可能会需要使用其他方式(如Cookies或Sessions)来保存状态。
一次HTTP请求的过程
- 建立连接:
客户端(如浏览器)与服务器之间建立TCP连接。对于HTTPS请求,建立 SSL/TLS安全连接。 - 发送请求:
客户端向服务器发送一个HTTP请求,包括请求行(如GET/index.html HTTP/1.1)、请求头(如Host、User-Agent等)和可选的请求主体(如 POST数据)。 - 服务器处理请求:
服务器接收并解析请求,根据请求路径和参数决定返回的数据或页面内容。 - 发送响应:
服务器向客户端发送HTTP响应,包括状态行(如HTTP/1.1 200 OK)、响应头(如Content-Type等)和响应主体(如网页内容)。 - 关闭连接:
连接可以被立即关闭,或保持一段时间(使用Connection:keep-alive)。 - 客户端处理响应:
客户端解析并展示网页或处理数据。
当你在浏览器中输入一个浏览器地址,它会发送什么 ?—(底层流程)
HTTP的协议头
HTTP协议分为请求头和响应头
请求头(对应客户端)
HTTP请求包含三部分:请求行(构建请求阶段),请求头,请求体。
一些请求头
- Host:指定服务器的域名和端口号(例如:Host:www.example.com)。
- User-Agent:描述客户端应用程序的名称和版本(例如:User-Agent:Mozilla/5.0)。
- Accept:指示客户端可以处理的媒体类型(例如:Accept:text/html)。
- Content-Type:指示请求主体的数据类型,常见于POST或PUT请求(例如:Content-Type:applic ation/json)。
- Authorization:包含认证凭据,用于保护的资源访问(例如:Authorization:Basic)。
请求方法
响应头(对应服务端返回)
服务器端接收到客户端的请求,将作出处理并返回相应数据,包含响应行,响应头,响应体。
POST与GET的区别
- 数据传输方式
- GET请求:参数通过URL传递,数据包含在URL的查询字符串中(如?name=John&age=30)。URL长度有限,传输的数据量较小,适用于不敏感数据的请求。
- POST请求:参数在请求主体中传输,适合发送较大数据量或敏感信息,如表单数据或文件上传。
- 安全性
- GET请求:不适合传输敏感数据,因为参数会暴露在URL中,可能被缓存或记录。
- POST请求:更安全,参数不会显示在URL中,但仍需通过加密(如HTTPS)来保护数据。
- 缓存
- GET请求:可被浏览器缓存,适合可重复访问的请求。
- POST请求:默认不被缓存,一般用于提交数据。
HTTP状态码
状态码 | 类别 | 含义 |
---|---|---|
1xx | 信息状态码 | |
2xx | 成功状态码 | |
3xx | 重定向状态码 | |
4xx | 客户端错误状态码 | |
404 | Not Found | 资源未找到,服务器无法提供请求资源 |
5xx | 服务器错误状态码 |
HTTPS
什么是https?
HTTPS(HyperTextTransferProtocolSecure)是HTTP协议的安全版本,用于在客户端(如浏览器)和服务器之间安全地传输数据。HTTPS通过加密机制来保护用户和网站之间传输的信息,确保数据的机密性和完整性。
早期很多公司刚起步的时候,使用的应用层协议都是HTTP,而HTTP无论是用GET方法还是POST方法传参,都是没有经过任何加密的,因此早期很多的信息都是可以通过抓包工具抓到的。
为了解决这个问题,于是出现了HTTPS协议,HTTPS实际就是在应用层和传输层协议之间加了一层加密层(SSL&TLS),这层加密层本身也是属于应用层的,它会对用户的个人信息进行各种程度的加密。HTTPS在交付数据时先把数据交给加密层,由加密层对数据加密后再交给传输层。
https要解决两个问题
- 加密防篡改
- 通过证书来验证服务端是可靠的
https特点
- 数据加密:
HTTPS使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议来加密数据。即使数据被第三方拦截,拦截者也无法读耳改数据内容,因为它们是加密的。 - 数据完整性:
数据在传输过程中不会被篡改或损坏。加密协议会对数据进行校验,过程中没有被意外或恶意修改。 - 身份验证:
HTTPS使用数字证书来验证服务器的身份,确保用户连接到的是真正的服务器,而不是被冒充的网站。这种身份验证可以防止“中间人攻击”,提高信任。
https工作流程
- 握手过程:
- 当你在浏览器中访问一个HTTPS网站时,浏览器和服务器会进行一个加密“握手”过程。
- 握手的目的是交换加密密钥,并建立一个安全的加密连接。这个过程会使用SSL/TLS协议,并涉及验证服务器的数字证书。
- 加密传输:
- 握手成功后,浏览器和服务器之间的所有数据都将通过加密通道传输,确保数据的安全性。
- 使用数字证书:
- 网站通过使用由可信的证书颁发机构(CA)签发的数字证书来证明自已的身份。浏览器会检查证书的有效性,并显示安全锁图标,提示用户这是一个安全的连接。
相关文章:

【HTTP】详解
目录 HTTP 基本概念啥是HTTP,有什么用?一次HTTP请求的过程当你在浏览器中输入一个浏览器地址,它会发送什么 ?---(底层流程)HTTP的协议头请求头(对应客户端)一些请求头请求方法 响应头…...

cursor重构谷粒商城01——为何要重构谷粒商城
前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。 本项目将基于谷粒商城…...

如何在 ASP.NET Core 中实现速率限制?
在 ASP.NET Core 中实现速率限制(Rate Limiting)中间件可以帮助你控制客户端对 API 的请求频率,防止滥用和过载。速率限制通常用于保护服务器资源,确保服务的稳定性和可用性。 ASP.NET Core 本身并没有内置的速率限制中间件&…...

STM32-笔记43-低功耗
一、什么是低功耗? 低功耗是指通过优化设计和采用特定的技术手段,降低电子设备在运行过程中消耗的能量,从而延长电池寿命、提高性能和减少发热。低功耗设计主要从芯片设计和系统设计两个方面进行,旨在减少所有器件的功率损耗&am…...

Facebook 隐私风波:互联网时代数据安全警钟
在社交媒体飞速发展的今天,个人数据的隐私保护已成为全球关注的焦点。作为全球最大的社交平台之一,Facebook面临的隐私问题,尤其是数据泄露事件,频繁引发公众的广泛讨论。从用户信息被滥用到数据泄漏,Facebook的隐私挑…...

Java 中的 ZoneOffset
介绍 在我们的这个世界上因为地球是圆的,所以每个国家都会有自己特定的时区。 时区在我们对时间的使用上扮演了非常重要的角色。但又因为时区的存在,又给我们带来了很多的麻烦,比如北美地区使用的夏令时和中国统一使用东 8 区的时间等。 当…...

amis模板语法、数据映射与表达式
模板字符串 表达式中获取变量 可以支持在普通文本中,使用数据映射语法:${xxx} 获取数据域中变量的值 "Hello ${text}"渲染 html 使用数据映射语法:${xxx} 获取数据域中变量的值,并渲染 HTML "<h1>Hello<…...

频域增强通道注意力机制EFCAM模型详解及代码复现
背景与动机 在深度学习领域,如何有效处理时间序列数据一直是一个重要的研究方向。近年来, 频域分析技术 在时间序列处理中展现出了巨大潜力,特别是离散余弦变换(DCT)因其能够高效捕捉低频信息并避免高频噪声干扰而受到广泛关注。 FECAM模型的开发正是基于这一背景,旨在…...

GitLab 国际站中国大陆等地区停服,如何将数据快速迁移到云效
代码托管平台 GitLab 国际站(GitLab.com)近日发布公告,官宣即将停止对中国大陆、香港、澳门地区的用户账号提供服务,并提供 60 天过渡期自行迁移账户数据,超期未迁移的账号可能会被 GitLab 清除。这一重要决策引起了全…...

BPG图像库和实用程序(译)
1)快速介绍 编辑Makefile以更改编译选项(默认编译选项对于Linux应该是OK的)。输入make来编译,输入make install来安装编译后的二进制文件。bpgview:为了编译它,你需要安装SDL和SDL_image库。Emscripten的使用ÿ…...

简述1个业务过程:从客户端调用接口,再到调用中间件(nacos、redis、kafka、feign),数据库的过程
以下是一个常见的业务过程示例,展示了从客户端调用接口,再到调用中间件(Nacos、Redis、Kafka、Feign)和数据库的过程: 假设我们有一个电商系统,客户端要查询某个商品的详细信息,这个商品信息可…...

01.02、判定是否互为字符重排
01.02、[简单] 判定是否互为字符重排 1、题目描述 给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。 在这道题中,我们的任务是判断两个字符串 s1 和 s2 是…...

什么是.NET中的反射,它有哪些应用场景
反射是.NET框架提供的一种强大的机制,它允许程序在运行时查询和操作对象的类型信息。以下是对.NET中反射的详细解释及其应用场景: 一、反射的定义 在.NET中,所有类型的信息(包括类、结构、委托、接口、枚举等以及它们的成员信息…...

Linux离线部署ELK
文章目录 前期准备开始安装安装elastic search安装logstash安装kibana 配置ELK配置ElasticSearch配置logstash配置kibana 启动ELK启动命令启动测试 设置ELK策略创建ILM策略将ILM策略与日志index关联查看索引是否被ILM策略管理 前期准备 ELK包含三部分软件 ElasticSearch用作搜…...

解决 chls.pro/ssl 无法进入问题
使用charles的xdm不知道有没有遇到这样的问题。手机上访问 chls.pro/ssl 就始终进不去了… 各种检查,ip地址、证书,ssl设置等等都正常,就是进不去。 在一位好心人的提醒下得到了一个解决办法。那就是换一个地址 最新地址是: charlesproxy…...

Rust 游戏开发框架指南
Rust 游戏开发框架指南 主流游戏引擎 1. Bevy 最受欢迎的 Rust 游戏引擎之一,基于 ECS(实体组件系统)架构。 特点: 🚀 高性能 ECS 系统📦 热重载支持🎨 现代渲染器🔊 内置音频系…...

hadoop3.3和hive4.0安装——单节点
hadoop3.3x和hive4.0安装部署 为什么我要安装hive4.0,因为阿里云镜像只有hive4.0 软件相互兼容性版本 系统centos7 uname -a如果内核3.0以上可以用 安装jdk1.8以上的版本(配置好环境变量) hadoop3.3.x与hive4.0.x 创建目录 mkdir -p /us…...

centos安装golang
1.下载golang golang所有版本网址 https://studygolang.com/dl //下载并解压到/usr/local文件下 wget https://studygolang.com/dl/golang/go1.18.3.linux-amd64.tar.gz //解压并复制到/user/local文件夹下 tar -C /usr/local -zxf go1.18.3.linux-amd64.tar.gz 2.编辑环境变…...

博图 linucx vmware
电脑与 PLC 的连接 博图装在虚拟机里,PLC 通过网线与电脑连接 可以是使用网线直接连接,也可以中间接个路由器或交换机 问题在于虚拟机提供多种网络连接方式,但不是每种都可以与 PLC 建立连接 以 VMware 虚拟机为例,进入编辑/虚拟网…...

Service Work离线体验与性能优化
Service Work离线体验与性能优化 引言 先放个意外事件,万事开头难🤣🤣🤣 原计划是分享离线应用与数据资源缓存的应用实践,结果发现这一技术已被web标准废弃 曾经做过一个PC应用,业务需求要求应用具备容灾…...

Unity 语音转文字 Vosk 离线库
市场有很多语音库,这里介绍Vosk SDK 除了支持untiy外还有原生开发服务器等 目录 安装unity示例demo下载语音训练文件运行demo结尾一键三联 注意事项 有可能debug出来的文本是空的,(确保麦克风正常,且索引正确)分大…...

VSCode连接Github的重重困难及解决方案!
一、背景: 我首先在github创建了一个新的项目,并自动创建了readme文件其次在vscode创建项目并写了两个文件在我想将vscode的项目上传到对应的github上时,错误出现了 二、报错及解决方案: 1.解决方案: 需要在git上配置用…...

《AI赋能鸿蒙Next,打造极致沉浸感游戏》
在游戏开发领域,鸿蒙Next系统与人工智能技术的结合为开发者们带来了前所未有的机遇,使打造更具沉浸感的游戏成为可能。以下将深入探讨如何利用人工智能在鸿蒙Next上开发出令人身临其境的游戏。 利用AI优化游戏角色智能行为 在传统游戏中,非…...

小白:react antd 搭建框架关于 RangePicker DatePicker 时间组件使用记录 2
文章目录 一、 关于 RangePicker 组件返回的moment 方法示例 一、 关于 RangePicker 组件返回的moment 方法示例 moment方法中日后开发有用的方法如下: form.getFieldsValue().date[0].weeksInWeekYear(),form.getFieldsValue().date[0].zoneName(), form.getFiel…...

<C++学习>C++ std 多线程教程
C std 多线程教程 理解多线程的概念 多线程是一种并发编程技术,它允许程序同时运行多个任务。每个线程共享同一进程的资源(如内存),但拥有独立的执行路径。多线程编程在现代 C 中变得更加便捷和安全,标准库提供了强大…...

用 Python 自动化处理日常任务
💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…...

《深入浅出HTTPS》读书笔记(28):DSA数字签名
《深入浅出HTTPS》读书笔记(28):DSA数字签名 对称加密算法有很多算法,标准算法是RSA机密算法,数字签名技术也有一个标准DSS(Digital Signature Standard),其标准…...

type 属性的用途和实现方式(图标,表单,数据可视化,自定义组件)
1.图标类型 <uni-icon>组件中,type可以用来指定图标的不同样式。 <uni-icons type"circle" size"30" color"#007aff"></uni-icons> //表示圆形 <uni-icons type"square" size"30" co…...

PSINS工具箱学习(四)捷联惯导更新算法
原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、捷联惯导更新1、insinit():初始化 ins 结构体2、ethupdate():地球自转角速度和牵连角速度更新3、insupdate():捷联惯导更新1. 速度更新2. 位置更新3.…...

P1Linux和Docker常用终端命令:保姆级图文详解
文章目录 前言1、Docker 常用命令1.1、镜像管理1.2、容器管理1.3、网络管理1.4、数据卷管理1.5、监控和性能管理 2、Linux 常用命令分类2.1、文件和目录管理2.2、用户管理2.3、系统监控和性能2.4、软件包管理2.5、网络管理 前言 亲爱的家人们,创作很不容易…...