HTTP的基本格式

HTTP的基本格式

  • .
  • HTTP
  • http的协议格式
  • HTTP
  • http的协议格式

.

在这里插入图片描述

HTTP

应用层,一方面是需要自定义协议,一方面也会用到一些现成的协议.
HTTP协议,就是最常用到的应用层协议.
使用浏览器,打开网站,使用手机app,加载数据,这些过程大概率都是HTTP来支持的
HTTP是一个超文本传输协议,
文本=>字符串
超文本=>除了传输字符串,还能传输图片,视频,音频等
HTTP协议是无状态的协议,有长连接和短连接的用法
在这里插入图片描述
一个网站=前端+后端
前端:网页:
HTML描述了网页的基本结构
CSS描述了网页的样式(包括不限于字体,颜色,背景,位置,大小)
JavaScript描述了网页的行为,和用户进行交互.
上述是三种单独的语言
网页 HTML, CSS ,JS都是在浏览器上执行的,都是在访问服务器的时候,从服务器下载到浏览器上,然后才能显示执行的,其他的应用程序,一般都是先下载安装,才能使用,网页是随时用随时下载
使用网页的优势:服务器随时更新,用户就能随时用上新版本
劣势:性能有限,很难提供一些复杂的,重量的操作
后端:HTTP服务器
学习HTTP,就需要学习协议格式
需要用到抓包工具:
在这里插入图片描述
此时抓包工具就可以获取到服务器和浏览器之间的交互细节了

http的协议格式

请求
1.首行
在这里插入图片描述
这三个部分用空格来分割

URL:

请求,就是客户端(浏览器)给服务器发起一个数据,这里要利用URL来明确指出,要访问的服务器是什么,要访问服务器中的哪一个资源
下面给出RFC标准文档中给出的URL的标准格式
在这里插入图片描述
这里的服务器地址也可以是IP地址,也可以是域名
查询字符串(query string),是键值对格式,键值对之间,使用&符号分割,键和值之间使用=分割,查询字符串以?开始,虽然知道了query string的格式,但是我们不知道他的含义.,因为这里的键和值都是程序员自定义的
实际上,对于URL来说,上述的几个部分,都是可以省略的,不是哪个部分是必须得有的
IP地址/域名省略,相当于是访问当前服务器的地址,比如:
访问b站主页,请求里必须要带有bilibili域名,响应的内容就是bilibili主页 的html,这个html里就会触发一些其他的http的请求,这些后续触发的http的请求,就可以省略IP,省略的IP就相当于使用和刚才获取bilibili的html一样的IP
端口号也可以省略,(相当常见)
省时,浏览器会自动加上端口(这个端口号,表示的是访问目标服务器的哪个端口),如果是http协议,自动添加的端口就是80,如果是https,自动添加的端口号就是443知名端口号(1024)
带层次的路径也可以省略如果省略,相当于访问的是/
/为根目录
(目录结构就是树形结构,根目录就相当于树根一样)
服务器提供的资源,也是类似于目录结构一样的树形结构来组织的,既然是树3,就会有树根,/就是根节点,通常根节点就会对应到服务器的主页
查询字符串也可以没有
正是上述的灵活性,使得http可以根据不同的需求场景,进行一些"自定制"的工作,也就使得http协议成了广泛使用的协议
url encode本质上就是转义字符,与\不同的形式出现而已
query string中可能有一些具有特殊含义的符号,这些符号在URL中本身就具有一定的含义
+ => %2B
url编码替换
在这里插入图片描述
转换规则:把要转换的内容的二进制的每个字节,都使用十六进制来表示出来,然后每个字节前面加上一个%

方法:

在这里插入图片描述
GET请求是把一些自定义的数据放到query string中,而body是空着的
POST请求最常见的情况:
登录,上传
POST是把一些自定义的数据放到body中,query string通常是空着的
在这里插入图片描述

2.请求报头header
这里的header也是键值对,每一行都是一个键值对,键和值之间使用:空格来分割
,query string和body中的键值对,完全是程序员自定义的,而header中的键值对,主要是标准规定的,少数是自定义的
重要的几个键值对:
Host:表示服务器主机的地址和端口
通常情况下Host里的内容和URL中的是一致的,但是也有例外,如果使用了代理,就不一样了
Content-Length表示body中的数据长度
如果请求中有body,就有这个字段,如果没有body,就没有这个字段
这个字段的作用是为了解决粘包问题
Content-Type表示请求的body中的数据格式
针对一个数据,到底该如何解析,如何理解,HTTP协议有很多用途,传输的数据也有很多种类
在HTTP请求中,Content-Type有三种主要的格式
application/x-www-form-urlencoded: form
body的格式就和query string是一样的键值对
multipart/form-data: form
一般上传文件/图片会是这种格式,但是不绝对
application/json
body是json格式
在这里插入图片描述
User-Agent
主要是包含了当前机器的系统和浏览器的版本,主要用来兼容,现在UA的意义就小了不少,主要用来区分PC端(Windows/Mac)和移动端(Android/iOS)
Referer
描述了,当前这个页面从哪里来的
location:
搭配3xx状态码使用, 告诉客户端接下来要去哪里访问
Cookie
浏览器本地存储数据的一种机制,既能保证安全,又能存续数据
按照键值对的方式来存储一些字符串,这些键值对往往是服务器返回来的,浏览器把这些键值对按照"域名"维度不同的网站,不同的cookie,且都是程序员自定义的,分类存储
在这里插入图片描述

在这里插入图片描述

一个网站的cookie中会存储很多键值对,往往会有一个很重要的键值对,是用来表示用户的"身份信息"的,尤其是有的时候,登录一个网站之后,后续再次访问这个网站的其他页面,或者关了电脑,第二天再次访问,仍然不必重新登录
为了实现身份识别的效果,不仅仅需要cookie来支持,服务器这边还需要一个sessio机制来支持
首次访问网站,注册不考虑,登录成功之后,服务器/网站就会生成一个你的身份标识–sessionid,身份标识就通过服务器返回给浏览器的响应,保存在浏览器的cookie中了
与此同时,服务器这边也会创建出一个对应的session,相当于是一个电子档案,session中就会记录一些我的关键信息
网站中肯定是不只一个用户,每个用户都有自己单独的session和sessionid,因此,服务器就会使用类似于hash表这样的方式,以sessionid为key,以session为value,把所有的数据组织起来
作为用户的身份标识,不同网站身份标识的key和value可能都是不同的
如果是通过浏览器地址来直接输入URL/点击收藏夹打开这个网页的,这个请求中是不带有这个Referer的
但是如果是点击了某个网页的内容,产生了跳转,就会带有Referer
3.空行
相当于一个分隔符,分割了header和body,描述了body是从哪里开始的
4.body正文
body里面的格式,其实是可以有很多种的,其中可以和query string一样是键值对的格式,只不过是经过了url encode,在登陆场景中,这里就会包含这次登录的用户名和密码等登录认证信息,密码一般是加密的,一般密码都是不会明文传输的
明文+加密算法+密钥=>密文,有的时候,加密的过程是可逆的,有的时候,加密是不可逆的 (加密过程可能会出现信息量损失)
响应
1.首行(版本号 状态码 状态码描述)
状态码就是对这次相应的定性(成功,失败,其他…)
计算机中,通常会使用数字表示结果,使用不同的数字表示不同的情况
比如:200表示成功
在这里插入图片描述
在这里插入图片描述

2.应头header(键值对)
ETag 说明:对于某个资源的某个特定版本的一个标识符,通常是一个 消息散列

Location 说明:用来 进行重定向,或者在创建了某个新资源时使用
3.空行
4.body正文

HTTP

应用层,一方面是需要自定义协议,一方面也会用到一些现成的协议.
HTTP协议,就是最常用到的应用层协议.
使用浏览器,打开网站,使用手机app,加载数据,这些过程大概率都是HTTP来支持的
HTTP是一个超文本传输协议,
文本=>字符串
超文本=>除了传输字符串,还能传输图片,视频,音频等
HTTP协议是无状态的协议,有长连接和短连接的用法
在这里插入图片描述
一个网站=前端+后端
前端:网页:
HTML描述了网页的基本结构
CSS描述了网页的样式(包括不限于字体,颜色,背景,位置,大小)
JavaScript描述了网页的行为,和用户进行交互.
上述是三种单独的语言
网页 HTML, CSS ,JS都是在浏览器上执行的,都是在访问服务器的时候,从服务器下载到浏览器上,然后才能显示执行的,其他的应用程序,一般都是先下载安装,才能使用,网页是随时用随时下载
使用网页的优势:服务器随时更新,用户就能随时用上新版本
劣势:性能有限,很难提供一些复杂的,重量的操作
后端:HTTP服务器
学习HTTP,就需要学习协议格式
需要用到抓包工具:
在这里插入图片描述
此时抓包工具就可以获取到服务器和浏览器之间的交互细节了

http的协议格式

请求
1.首行
在这里插入图片描述
这三个部分用空格来分割

URL:

请求,就是客户端(浏览器)给服务器发起一个数据,这里要利用URL来明确指出,要访问的服务器是什么,要访问服务器中的哪一个资源
下面给出RFC标准文档中给出的URL的标准格式
在这里插入图片描述
这里的服务器地址也可以是IP地址,也可以是域名
查询字符串(query string),是键值对格式,键值对之间,使用&符号分割,键和值之间使用=分割,查询字符串以?开始,虽然知道了query string的格式,但是我们不知道他的含义.,因为这里的键和值都是程序员自定义的
实际上,对于URL来说,上述的几个部分,都是可以省略的,不是哪个部分是必须得有的
IP地址/域名省略,相当于是访问当前服务器的地址,比如:
访问b站主页,请求里必须要带有bilibili域名,响应的内容就是bilibili主页 的html,这个html里就会触发一些其他的http的请求,这些后续触发的http的请求,就可以省略IP,省略的IP就相当于使用和刚才获取bilibili的html一样的IP
端口号也可以省略,(相当常见)
省时,浏览器会自动加上端口(这个端口号,表示的是访问目标服务器的哪个端口),如果是http协议,自动添加的端口就是80,如果是https,自动添加的端口号就是443知名端口号(1024)
带层次的路径也可以省略如果省略,相当于访问的是/
/为根目录
(目录结构就是树形结构,根目录就相当于树根一样)
服务器提供的资源,也是类似于目录结构一样的树形结构来组织的,既然是树3,就会有树根,/就是根节点,通常根节点就会对应到服务器的主页
查询字符串也可以没有
正是上述的灵活性,使得http可以根据不同的需求场景,进行一些"自定制"的工作,也就使得http协议成了广泛使用的协议
url encode本质上就是转义字符,与\不同的形式出现而已
query string中可能有一些具有特殊含义的符号,这些符号在URL中本身就具有一定的含义
+ => %2B
url编码替换
在这里插入图片描述
转换规则:把要转换的内容的二进制的每个字节,都使用十六进制来表示出来,然后每个字节前面加上一个%

方法:

在这里插入图片描述
GET请求是把一些自定义的数据放到query string中,而body是空着的
POST请求最常见的情况:
登录,上传
POST是把一些自定义的数据放到body中,query string通常是空着的
在这里插入图片描述

2.请求报头header
这里的header也是键值对,每一行都是一个键值对,键和值之间使用:空格来分割
,query string和body中的键值对,完全是程序员自定义的,而header中的键值对,主要是标准规定的,少数是自定义的
重要的几个键值对:
Host:表示服务器主机的地址和端口
通常情况下Host里的内容和URL中的是一致的,但是也有例外,如果使用了代理,就不一样了
Content-Length表示body中的数据长度
如果请求中有body,就有这个字段,如果没有body,就没有这个字段
这个字段的作用是为了解决粘包问题
Content-Type表示请求的body中的数据格式
针对一个数据,到底该如何解析,如何理解,HTTP协议有很多用途,传输的数据也有很多种类
在HTTP请求中,Content-Type有三种主要的格式
application/x-www-form-urlencoded: form
body的格式就和query string是一样的键值对
multipart/form-data: form
一般上传文件/图片会是这种格式,但是不绝对
application/json
body是json格式
在这里插入图片描述
User-Agent
主要是包含了当前机器的系统和浏览器的版本,主要用来兼容,现在UA的意义就小了不少,主要用来区分PC端(Windows/Mac)和移动端(Android/iOS)
Referer
描述了,当前这个页面从哪里来的
location:
搭配3xx状态码使用, 告诉客户端接下来要去哪里访问
Cookie
浏览器本地存储数据的一种机制,既能保证安全,又能存续数据
按照键值对的方式来存储一些字符串,这些键值对往往是服务器返回来的,浏览器把这些键值对按照"域名"维度不同的网站,不同的cookie,且都是程序员自定义的,分类存储
在这里插入图片描述

在这里插入图片描述

一个网站的cookie中会存储很多键值对,往往会有一个很重要的键值对,是用来表示用户的"身份信息"的,尤其是有的时候,登录一个网站之后,后续再次访问这个网站的其他页面,或者关了电脑,第二天再次访问,仍然不必重新登录
为了实现身份识别的效果,不仅仅需要cookie来支持,服务器这边还需要一个sessio机制来支持
首次访问网站,注册不考虑,登录成功之后,服务器/网站就会生成一个你的身份标识–sessionid,身份标识就通过服务器返回给浏览器的响应,保存在浏览器的cookie中了
与此同时,服务器这边也会创建出一个对应的session,相当于是一个电子档案,session中就会记录一些我的关键信息
网站中肯定是不只一个用户,每个用户都有自己单独的session和sessionid,因此,服务器就会使用类似于hash表这样的方式,以sessionid为key,以session为value,把所有的数据组织起来
作为用户的身份标识,不同网站身份标识的key和value可能都是不同的
如果是通过浏览器地址来直接输入URL/点击收藏夹打开这个网页的,这个请求中是不带有这个Referer的
但是如果是点击了某个网页的内容,产生了跳转,就会带有Referer
3.空行
相当于一个分隔符,分割了header和body,描述了body是从哪里开始的
4.body正文
body里面的格式,其实是可以有很多种的,其中可以和query string一样是键值对的格式,只不过是经过了url encode,在登陆场景中,这里就会包含这次登录的用户名和密码等登录认证信息,密码一般是加密的,一般密码都是不会明文传输的
明文+加密算法+密钥=>密文,有的时候,加密的过程是可逆的,有的时候,加密是不可逆的 (加密过程可能会出现信息量损失)
响应
1.首行(版本号 状态码 状态码描述)
状态码就是对这次相应的定性(成功,失败,其他…)
计算机中,通常会使用数字表示结果,使用不同的数字表示不同的情况
比如:200表示成功
在这里插入图片描述
在这里插入图片描述

2.应头header(键值对)
ETag 说明:对于某个资源的某个特定版本的一个标识符,通常是一个 消息散列

Location 说明:用来 进行重定向,或者在创建了某个新资源时使用
3.空行
4.body正文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/385820.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

家政小程序系统源码开发:引领智能生活新篇章

随着科技的飞速发展,小程序作为一种便捷的应用形态,已经深入到我们生活的方方面面。尤其在家庭服务领域,家政小程序的出现为人们带来了前所未有的便利。它不仅简化了家政服务的流程,提升了服务质量,还为家政服务行业注…

最新wordpress外贸主题

日用百货wordpress外贸主题 蓝色大气的wordpress外贸主题,适合做日用百货的外贸公司搭建跨境电商网站使用。 https://www.jianzhanpress.com/?p5248 添加剂wordpress外贸建站主题 橙色wordpress外贸建站主题,适合做食品添加剂或化工添加剂的外贸公司…

pm2启动的node项目访问不了,npm start却可以访问

netstat -ntlp输入该命令,查看启动的服务端口是否有被监听到,如3001,4000之类的,是node项目启动时候自己配的那个, 若没有,则执行 pm2 delete [app-id/app-name] 先删除启动的这个项目 例如pm2 delete my…

【电路笔记】-并联电感

并联电感 文章目录 并联电感1、概述2、并联电感示例13、互耦并联电感器4、并联电感示例25、并联电感示例36、总结当电感器的两个端子分别连接到另一个或多个电感器的每个端子时,电感器被称为并联连接在一起。 1、概述 所有并联电感器上的压降将是相同的。 然后,并联的电感器…

Elasticsearch:适用于 iOS 和 Android 本机应用程序的 Elastic APM

作者:来自 Elastic Akhilesh Pokhariyal, Cesar Munoz, Bryce Buchanan 适用于本机应用程序的 Elastic APM 提供传出 HTTP 请求和视图加载的自动检测,捕获自定义事件、错误和崩溃,并包括用于数据分析和故障排除目的的预构建仪表板。 适用于 …

【go语言】一个简单HTTP服务的例子

一、Go语言安装 Go语言(又称Golang)的安装过程相对简单,下面是在不同操作系统上安装Go语言的步骤: 在Windows上安装Go语言: 访问Go语言的官方网站(golang.org)或者使用国内镜像站点&#xff0…

STM32 I2C

目录 I2C通信 软件I2C读写MPU6050 I2C通信外设 硬件I2C读写MPU6050 I2C通信 R/W:0写1读 十轴:3轴加速度,3轴角速度,3轴磁场强度和一个气压强度 软件I2C读写MPU6050 MyI2C.c #include "stm32f10x.h" …

Java中抽象类和接口的区别

抽象类和接口都是 Java 中多态的常见使用方式. 都需要重点掌握. 同时又要认清两者的区别(重要!!! 常见面试题)。 核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写而重写抽象方法), 而接口中不能包含普通方法(接口…

大模型Layer normalization知识

Layer Norm 的计算公式 Layer Norm(层归一化)是一种用于神经网络中的归一化技术,用于提高模型的训练效果和泛化能力。 RMS Norm 的计算公式 RMS Norm 的作用是通过计算输入 X 的均方根,将每个样本的特征进行归一化,使…

蓝桥杯嵌入式第10届真题(完成) STM32G431

蓝桥杯嵌入式第10届真题(完成) STM32G431 题目 main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body********************************…

Linux---守护进程

运行的这个进程,它的pid和gpid(进程组ID)一样,它是自成一组的。 这就是一个进程组。 进程组和任务有什么关系? 将任务指派给进程组。任务都是由进程组去完成的。 可以发现,这三个进程的会话id1351都是一样的,多个任…

windows10|音视频剪辑|FFMPEG录屏和网络推流源初步的生成

前言: FFMPEG的功能强大是毋庸置疑的,那么录屏的需求大家在某些时候大家可能是非常需要的,例如,现有的项目需要演示,因此录制一段演示视频;亦或者做内容分发直播的,比如游戏主播,需…

使用word2vec+tensorflow自然语言处理NLP

目录 介绍: 搭建上下文或预测目标词来学习词向量 建模1: 建模2: 预测: 介绍: Word2Vec是一种用于将文本转换为向量表示的技术。它是由谷歌团队于2013年提出的一种神经网络模型。Word2Vec可以将单词表示为高维空间…

987. 二叉树的垂序遍历 - 力扣(LeetCode)

题目描述 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言,其左右子结点分别位于 (row 1, col - 1) 和 (row 1, col 1) 。树的根结点位于 (0, 0) 。 二叉树的 垂序遍历 从最左边的列开始直到…

VM和Linux安装

VM和Linux安装 一、下载VM 1.官网地址:https://www.vmware.com/cn.html 2.其他地址:http://ww7.nocmd.com/windows/740.html 许可证这个,大家可以自己上网搜索,很容易就搜索到就可以使用了 上面内容就是安装VM的步骤 安…

LeetCode、1318. 或运算的最小翻转次数【中等,位运算】

文章目录 前言LeetCode、1318. 或运算的最小翻转次数【中等,位运算】题目链接与分类题解位运算 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领…

线性代数的本质 2 线性组合、张成的空间、基

一种新的看待方式 对于一个向量,比如说,如何看待其中的3和-2? 一开始,我们往往将其看作长度(从向量的首走到尾部,分别在x和y上走的长度)。 在有了数乘后,我们可以将其视为对向量进行…

【心得】调试SPI+DMA的一点心得

由于项目需要,STM32F303跟STM32F405之间要用到DMASPI口来估大量数据传输,实现两边的数据收发。 开始只用到MISO,MOSI,跟CLK三个信号,STM32F303配置成主机,18M的波特率,用DMA发4K的Buffer的数据…

蓝牙BLE学习-安全

1.基本概念 蓝牙标准规定了5种基本的安全服务 身份验证:根据通信设备的蓝牙地址验证其身份。蓝牙不提供本地用户身份验证。保密性:确保只有授权的设备才能访问和查看传输的数据,防止窃听造成的信息泄露。授权(Authorization):在允许设备使用某项服务之前&#xff…

探索Gorm - Golang流行的数据库ORM框架

🏷️个人主页:鼠鼠我捏,要死了捏的主页 🏷️系列专栏:Golang全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站,通俗易懂&…