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

HTTP 协议的基本格式

HTTP协议("超文本传输协议"),是一个被广泛使用应用层协议,自1991年正式发布HTTP协议以来,HTTP协议就一直在更新,目前已经更新到3.0版本,但是目前主流的依旧是1.1版本,但依旧是一个最主流使用的应用层协议。

HTTP协议一般是基于TCP协议实现的,当时知道HTTP3.0开始支持UDP协议实现传输,使用TCP相比较UDP虽然安全,但是速度却相差很多,从3.0版本开始支持UDP协议,为了的实现更快的传输,并且该版本在应用层实现了可靠传输的机制,保证了高速传输的同时,也保证可靠传输。

HTTP协议格式

HTTP是⼀个⽂本格式的协议.可以通过Chrome开发者⼯具中的network功能或者Fiddler抓包,分析HTTP请求/响应 的细节。

Fiddle抓包基础
http://t.csdnimg.cn/lVBBS

1. HTTP请求报文

HTTP请求报文一般包含首行请求头(header)空行正文(body,可能有,可能没有)

1.2.1 首行

首行一般包含3部分,请求方法url(服务器资源唯一定位符),HTTP协议版本

发展到现在HTTP协议的请求方法有很多种,包括GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS,意思是表示让服务器知道这个请求是要干嘛的,其中最常见最重要的就是GET,POST方法。可以说GET占八斗,POST占一斗,其余占一斗。

1.2.1.1 url

了解HTTP协议应该从了解url开始,可以认为你所看到的每一个网页,都有一个唯一的url,也就是我们通常说所的网址,以下是由RFC文档对url进行了约定https://datatracker.ietf.org/doc/html/rfc1738虽然看起来它是由很多部分组成的,但是实际组成很简单。

  • 1.协议名称:https,为什么是https而不是http,后面会解释,可以先理解它是http协议的安全版本;
  • 2.身份认证信息(目前已经舍弃,这里也没有体现):只要是因为现在网站进行身份认证都是简单通过url提交身份信息;
  • 3.服务器域名(ip地址):www.baidu.com,这里有时候会是一个ip地址,也有可能是一个域名,但是实际指的都是同一个服务器;
  • 4.服务器端口号(可以省略):指的是要访问服务器的哪个端口号,现在可以省略是因为规定好了,如果是http协议就固定访问80端口号,是http是协议就访问443端口号,除非有些特定的资源就可能会需要指定端口号,不然一般都是上述两个端口号;
  • 5.带层次的文件路径:描述的是服务器管理的资源
  • 6.查询字符串:通常是一些键值对,键和值之间用”=“,键值对之间用”&“分隔开;
  • 7.片段标识符:片段标识符可以表示网页中的一部分,一个网页可能有很多部分组成,有时候你点一个标题或者什么,会自动跳到这个网页的某个部分。
 关于URL encode

不知道你有没有发现,有时候你搜索东西,在网址哪里会显示你输入的关键词,有时候却没有,比如我现在搜索一个C++,query string的value是c%2B%2B,是因为有时候value有时候也会有符号,如果不进行转码,可能就会出现类似”粘包问题“,所以需要对某些字符进行转码。但是使用什么转码才能确保不会出现问题呢?如果是汉字使用utf8和gbk,转码后的字节可能会与特殊的字节重复,所以用的另一套转码规则--”urlencode“,在这套规则中,如果遇到需要转码的字符,就会按照这套规则将字符转码,用十六进制表示,并在前面加上一个”%“,以表示这是一个转码后的,也是为了能够分开。但是又时候你看到的并不是转码后的,而是实际你输入的搜索内容,这是因为浏览器为了让客户看到,实际在传输的内容还是转码后的内容。

1.2.1.2 请求方法

HTTP协议首行最先出现的就是请求方法,可以让服务器知道这个请求时要干什么的?到目前为止,请求方法包括:GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS,有一种说法:GET占八斗,POST占一斗,其余占一斗,说的就是GET和POST的重要性,我们最经常使用的也是这两种方法。

GET和POST的区别
  • 1.本质上是没有区别的;
  • 2.从语义和一般传递数据的方式来看是有一定区别的:GET语义上是从服务器上获取资源,所以通常GET请求不会带有正文,因为正文一般是要发送个服务器的数据的,一般GET请求向服务器提交数据是通过query string键值对去提交数据,像我们搜索,搜索内容就是query string这个键值对的value提交给服务器,而POST请求一般是要通过正文提交的,而不是通过query string传输数据。但是随着现在网络的使用,get和post的界限已经很模糊了,get请求可以搭配body使用,post也可以搭配query string 使用。
  • 3.服务器对GET请求时幂等的,对POST请求是不幂等的。(幂等就是多次请求返回的结果是一样的),GET请求是可以缓存的(保存收藏夹),POST请求是不可以缓存的(跟幂等也有一定的关系),POST请求一般是获取到了服务器的302临时重定位,再向服务器发给GET请求,获取到网络主页的内容。
几个有问题的说法

1.POST比GET安全

该说法的论证就是使用GET请求,url会显示提交的个人信息,被人看到造成信息泄露,而POST是通过正文(body)提交信息,看不到,所以比GET安全。

这个说法是很有问题,实际上我们通过抓包工具也可以很简单的获取到信息,传输数据安不安全不取决显不显示,而是取决是否对信息加密。

2.GET请求提交的数据量有限,比较短,POST请求提交的数据量比较多,不限制。

该说法它的论据是GET是通过url的Query String提交数据的,而POST是通过正文提交数据的,主要是因为但是IE浏览器确实是对URL长度做出了限制,但是这是很早的情况了,现在的HTTP协议对url的长度是不做限制的,所以该说法也是不正确的。

3.GET只能传输文本数据,POST既可以传文本,又可以传二进制数据。

实际上url有encode转码机制,只要对二进制进行encode转码,也可以传输二进制数据。

1.2.1.3 HTTP协议版本

在首行的最后,通常会有一个 HTTP/1.1,表明使用的HTTP协议的版本。

1.2.2 请求头(header)

在HTTP的协议中,在首行和空行之间的就是请求头(header),通常都是一些标准规定的键值对内容,键和值之间用”:“,键值对之间用”;“,由于有很多的键值对,这里只介绍重要的键值对。

Host

客户端要访问的服务器的IP地址和端口号,有时候没有端口号,只有一个域名或者IP地址,这一部分一般是跟URL中的服务器域名和端口号是一样的。

Content-Type

表示请求中的正文中的数据格式,为的是针对不同的数据类型,服务器能够选择不同的处理方式,针对音频有音频的处理方式,图片有图片的数据方式。

Content-length

表示正文的长度,使得服务器能够知道完整的正文长度,防止”粘包问题“。

User-Agent (简称UA)

表示浏览器/操作系统的属性;

Referer

表示这个页面是从哪个页面跳转来的,如果是直接输入url或者点击收藏夹里的访问,是没有Referer这个键值对的。

Cookie(Header最重要的一个键值对)

cookie包含了很多的键值对,键和值之间用:,键值对之间用;其中的键值对都是开发网站的程序员自定义的,除了他自己能看懂,其他人都看不懂;

Cookie本质上是永久化保存在硬盘上的,但是网页是在浏览器上运行的,如果直接让网页操作硬盘是非常危险的,意为着有可能有一个网站都有可能直接获取到硬盘的数据,所以浏览器对于硬盘的操作,做了严格特殊的封装,硬盘中提供了一个/一组文件来给网页保存内容,而且对于保存格式了做了严格的规范,只能保存键值对,键和值都必须是文本数据;浏览器就给网页提供了能够持久化保存数据的一个经典机制---cookie,不同的网站都有不同的Cookie。

Cookie的来源:在一开始访问服务器的请求中是没有cookie,第一次出现Cookie是出现在响应中的header中set-cookie中,浏览器收到响应之后就会把set-cookie中的内容保存为cookie中;

Cookie的去处:等到再次访问服务器的时候,请求的header中就会带上cookie,返回发给服务器,让服务器知道你已经访问过服务器了,带上了服务器给客户端的一些信息。

Cookie的作用:客户端保存了服务器给的特定的键值对,再访问服务器的时候就会带上cookie,一个服务器要服务很多的客户端,每一个客户端都保存一个这样的cookie,键值对中通常会带上很多重要的数据作为键值对,比如你的网站的配置,像夜间模式/白天模式(让服务器记住你的习惯,等到你再次访问服务器的时候,访问的页面可能就是跟你的使用习惯一样),方便服务器给你提供符文。cookie还有一个特别重要的键值对:key,这是很多网站都会保存的关于客户端的cookie中的个人信息,比如你登录一个网站填上了个人信息,cookie就会保存你的登录信息,就像一张通信证一样,只要有这个cookie,此后你访问网站的每一个网页都不需要再次登录,服务器通过你携带的cookie信息就知道你已经是登陆过的,不要再登录,有权限访问这个网页。像以上服务器保存的id以及相关的各种详细信息就称之会话(session),是一个类/对象;

1.2.3 空行

空行是请求头(header)的结束标志;

1.2.4 正文

正文一般是用来提交信息的,比如你提交一个一个POST请求来上传一个头像,正文的数据就是你头像的二进制数据,但是你通过抓包工具抓到的body保存的是不是图片的二进制格式,而是将二进制数据进行base64转码;

2 HTTP响应报文

HTTP响应报文一般包含状态码,响应报头(header),空行,正文

1.状态码

从状态码可以知道你这次请求的结果,通常由一个数字代码和一个/一组单词组成。状态码有很多种,这里只是分享常用的常见的状态码,详细可以自行百度。

200 OK

这表示这个访问请求成功,这是一个最常见的状态码;

404 Not Found

表示这次请求要访问的资源不存在,或者在客户端不存在;

403 Forbidden

表示你这次请求要访问的资源,你没有权限访问。

405 Method Not Allowed

表示这次请求的方法,服务器不支持。(有的服务器不支持POST请求,有的不支持GET请求之类的,就会出现405);

500 Server Error

表示服务器内部错误,可能是代码出现了bug。由于现在的服务器都是”高可用“的,很少会出现内部错误,一个服务器虽然不可能一直都不出错,但是如果有多台服务器,即使一部服务器出错,也有另一台服务器可以用。所以现实中访问很少会出现服务器错误。如果我们自己开发服务器,就可能会经常看到500错误。

504 Gateway Timeout

表示网关服务器访问超时,我们要访问的服务器可能不只是有一台组成的,可能有多台服务器,但是一定有一个入口服务器,就称之为”网关服务器“。通常服务器比较繁忙的时候会出现这样一个问题。

302 Move Temporarily(临时重定向)

我们有时候会发现我要访问网站的时候,回跳到另外一个网站,比如一个网站更信了域名或者IP地址,我们在访问就地址的时候就会自动跳转到新地址,网页登陆跳转的状态码常常就是302。吗,每一个访问都要访问服务器,等待服务器的响应,获取到响应中Location,才能真正的实现网页的跳转。

301 Moved Permanently(永久重定向)

使用302临时重定向,每一个访问都需要等待服务器的响应,才能实现跳转,这个重定向是临时。而301永久重定向,只要访问一次之后,旧地址和新地址就会形成一种映射保存,此后再次访问都不要通过服务器,直接本地映射跳转。

状态码小结
类别原因短语
1xxInformational(信息状态码)接受的请求正在处理
2xxSuccess(成功状态码)请求处理正常完成
3xxRedirection(重定向状态码)需要进行附加操作完成请求
4xxClient Error(客户端错误状态码)服务器无法处理该请求
5xxServer Error(服务器错误状态码)服务器处理请求错误

2.响应报头

响应报头的基本格式和请求报头的格式基本⼀致, 类似于 Content-Type , Content-Length 等属性的含义也和请求中的含义⼀致.

相关文章:

HTTP 协议的基本格式

HTTP协议("超文本传输协议"),是一个被广泛使用应用层协议,自1991年正式发布HTTP协议以来,HTTP协议就一直在更新,目前已经更新到3.0版本,但是目前主流的依旧是1.1版本,但依旧是一个最主流使用的应…...

STM32-HAL库开发快速入门

注:本文主要记录一下STM32CubeMX软件的使用流程,记录内容以STM32外设(中断、I2C、USART、SPI等配置)在STM32CubeMX中的设置为主,对驱动代码编写不做记录,所以阅读本文最好有标准库开发经验。除第2节外,使用的都是韦东山…...

vue3-print打印eletable某一行的数据

主页面的表格 <template><el-table :data"list"><el-table-column label"操作" align"center"><template #default"scope"><el-buttonlinktype"primary"click"handleType(scope.row)"…...

【Vue】pnpm创建Vue3+Vite项目

初始化项目 &#xff08;1&#xff09;cmd切换到指定工作目录&#xff0c;运行pnpm create vue命令&#xff0c;输入项目名称后按需安装组件 &#xff08;2&#xff09;使用vs code打开所创建的项目目录&#xff0c;Ctrl~快捷键打开终端&#xff0c;输入pnpm install下载项目…...

springboot配置多数据源

springboot配置多数据源 学习新技术&#xff0c;争做新青年&#xff0c;欢迎围观&#xff0c;河南老乡在上海请&#xff0c;加&#xff0c;微&#xff0c;andyfau2022&#xff0c; ----获取数据源&#xff1a;null&#xff0c;数据源为null时默认使用主数据源的。 1-yml文件…...

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题&#xff1a;墙体两侧特征混淆误匹配&#xff0c;导致建图和定位偏差&#xff0c;表现为过门跳变、外月台走歪等 解决思路&#xff1a;预期的根治方案IGICP需要较长时间完成上线&#xff0c;先使用切分地图的工程化方案&#xff0c;即墙体两侧切…...

ChatGPT+Simple Mind Map生成思维导图:快速提升学习效率

一、告别杂乱笔记&#xff0c;一键生成清晰思维导图&#xff01; 最近开始学习网络安全&#xff0c;一头扎进了各种协议、漏洞、防御机制的海洋中。信息量巨大&#xff0c;知识点零散&#xff0c;让我很快便陷入了“知识焦虑”——笔记越记越多&#xff0c;却越来越混乱&#…...

Day9 | Java框架 | SpringBoot

Day9 | Java框架 | SpringBoot SpringBoot简介入门程序概述起步依赖 基础配置配置文件格式&#xff1a;3种yaml语法规则yaml数据读取三种格式 多环境启动配置文件参数命令行参数多环境开发控制&#xff1a;Maven & SpringBoot 多环境兼容 配置文件分类&#xff1a;4种 整合…...

Wordpress右下角表单弹出插件

Ultimate Sticky Popup & Widgets Charcoal Making Machine | Equipment for Sale - Kingtiger...

影刀RPA实战:自动化批量生成条形码完整指南

今天我们聊聊使用影刀来实现批量生成条形码&#xff0c;条形码在零售行业运用非常广泛&#xff0c;主要作用表现在产品识别&#xff0c;库存管理&#xff0c;销售管理&#xff0c;防伪保护等&#xff0c;这些作用使其成为现代商业和工业环境中不可或缺的工具&#xff0c;它极大…...

Python Flask简介

简介 Flask 有两个主要依赖&#xff1a;路由、调试和 Web 服务器网关接口&#xff08;Web Server Gateway Interface&#xff0c;WSGI&#xff09; 子系统由&#xff1a;Werkzeug 提供模板系统由&#xff1a;Jinja2提供Werkzeug 和 Jinjia2 都是由 Flask 的核心开发者开发而成…...

视频监控平台是如何运作的?EasyCVR视频汇聚平台的高效策略与实践

随着科技的飞速发展&#xff0c;视频监控平台在社会安全、企业管理、智慧城市构建等领域发挥着越来越重要的作用。一个高效的视频监控平台&#xff0c;不仅依赖于先进的硬件设备&#xff0c;更离不开强大的视频处理技术作为支撑。这些平台集成了多种先进的视频技术&#xff0c;…...

欧拉下搭建第三方软件仓库—docker

1.创建新的文件内容 切换目录到etc底下的yum.repos.d目录&#xff0c;创建docker-ce.repo文件 [rootlocalhost yum.repos.d]# cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d]# vim docker-ce.repo 编辑文件,使用阿里源镜像源&#xff0c;镜像源在编辑中需要单独复制 h…...

pcs升压变流一体机

在当今全球积极推进能源转型的大背景下&#xff0c;新能源技术的发展日新月异。其中&#xff0c;PCS 升压变流一体机作为一种关键的能源转换设备&#xff0c;正发挥着越来越重要的作用。它一般可分为10KV与35KV等级的。 PCS 升压变流一体机&#xff0c;全称为 Power Conversion…...

上海泗博EtherNet/IP转PROFIBUS DP网关EPS-320IP成都地铁项目应用案例

背景&#xff1a; 地铁&#xff0c;作为城市的活力脉搏&#xff0c;不仅是衔接城市生活的关键纽带&#xff0c;更是现代城市交通体系中不可或缺的核心组成部分。因此&#xff0c;确保地铁的稳定运行对任何一座城市都至关重要。 上海泗博自动化&#xff0c;作为与成都地铁项目合…...

猫鼠游戏: KaijiK病毒入侵溯源分析

1. 事件背景 近期&#xff0c;网宿平台某客户在使用云主机工作的时候突然出现主机卡顿&#xff0c;连接不稳定&#xff0c;网络断开的情况&#xff0c;并且收到了网宿主机入侵检测产品的告警信息。由于客户没有专职的安全人员&#xff0c;由运维人员兼任安全运营工作&#xff…...

【Hot100算法刷题集】双指针-02-盛水最多的容器(含暴力枚举、双指针法及其合理性证明)

&#x1f3e0;关于专栏&#xff1a;专栏用于记录LeetCode中Hot100专题的所有题目 &#x1f3af;每日努力一点点&#xff0c;技术变化看得见 题目转载 题目描述 &#x1f512;link->题目跳转链接 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的…...

Spring和Spring FrameWork有什么关系?两者是同一个东西吗?

Spring和Spring Framework之间的关系可以归结为以下几点&#xff1a; 广义与狭义的理解 广义上的Spring&#xff1a; 广义上的Spring泛指以Spring Framework为基础的整个Spring技术栈。Spring已经发展成为一个由多个不同子项目&#xff08;模块&#xff09;组成的成熟技术体系…...

windows10 python 解决鼠标右键菜单中没有Edit with IDLE(不使用注册表编辑器)

随便选择一个py文件&#xff0c;右击打开属性。 打开方式&#xff1a;点击更改。 最下面&#xff1a;点击更多应用&#xff0c;点击在这台电脑上查找应用 搜索找到你自己按照的python路径下 Python39\Lib\idlelib\idle.bat 文件 点击打开&#xff0c;结束。...

一些深度学习相关指令

// 服务器上查看所有的环境版本 conda env list// 删除某一个环境 conda remove -n 环境名 --all终端输入命令&#xff1a;nvidia-smi&#xff0c;可以看显卡的使用情况指定使用哪张显卡&#xff1a; os.environ["CUDA_VISIBLE_DEVICES"] 2查看服务器的cuda版本&am…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...