HTTP的基本格式

HTTP/HTTPS

  • HTTP
  • http的协议格式

HTTP

应用层,一方面是需要自定义协议,一方面也会用到一些现成的协议.
HTTP协议,就是最常用到的应用层协议.
使用浏览器,打开网站,使用手机app,加载数据,这些过程大概率都是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(键值对)
3.空行
4.body正文

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习:决策树

决策树 决策树是一种基于树形结构的模型,决策树从根节点开始,一步步走到叶子节点(决策),所有的数据最终都会落到叶子节点,既可以做分类也可以做回归。 特征选择 根节点的选择该用哪一个特征呢&#xff…

为什么你应该开始学习量子机器学习

一、介绍 你好!这里介绍全新知识--量子计算。在这里,我打算撰写和分享有关量子机器学习(QML)的文章。 我第一次听说量子计算是在2015年,当时我正在分析我的博士论文的可能性,我的前老板和导师告诉我研究这个…

Http常见问题

说说 HTTP 常用的状态码及其含义? HTTP 状态码首先应该知道个大概的分类: 1XX:信息性状态码2XX:成功状态码3XX:重定向状态码4XX:客户端错误状态码5XX:服务端错误状态码 301:永久性…

matplotlib制图进阶版

需求:两个产品销量的可视化折线图 1、使用pandas读取数据 2、生成销售数量的折线图

深入了解快速排序:原理、性能分析与 Java 实现

快速排序(Quick Sort)是一种经典的、高效的排序算法,被广泛应用于计算机科学和软件开发领域。本文将深入探讨快速排序的工作原理、步骤以及其在不同情况下的性能表现。 什么是快速排序? 快速排序是一种基于分治策略的排序算法&am…

vue2与vue3 v-model的区别

目录 Vue 2中的v-model 默认使用 自定义使用 修饰符.sync (Vue2) Vue3.x 使用 v-model vue 3 的v-model使用原理 多个 v-model 使用 总结 Vue 2中的v-model 在Vue 2中,v-model是一个用于在子组件和父组件之间双向绑定数据的指令。当在子组件中使用v-mode…

聊聊分布式架构04——RPC通信原理

目录 RPC通信的基本原理 RPC结构 手撸简陋版RPC 知识点梳理 1.Socket套接字通信机制 2.通信过程的序列化与反序列化 3.动态代理 4.反射 思维流程梳理 码起来 服务端时序图 服务端—Api与Provider模块 客户端时序图 RPC通信的基本原理 RPC(Remote Proc…

2023-10-07 LeetCode每日一题(股票价格跨度)

2023-10-07每日一题 一、题目编号 901. 股票价格跨度二、题目链接 点击跳转到题目位置 三、题目描述 设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数&#xff08…

全栈开发笔记2:项目部署上线的三种方式

文章目录 最原始的方式宝塔Docker 部署其他 本文为编程导航实战项目学习笔记。 项目部署的三种方式: 最原始方式✅ yum 手动安装 jdk mysql tomcat nginx打包前端项目,放到某个目录,修改 nginx 配置修改线上的 mysql 配置,打包 j…

Mysql bin-log日志恢复数据与物理备份-xtrabackup

主打一个数据备份与恢复 binlog与xtarbackup bin-log日志恢复开启bin-log配置bin-log日志恢复 物理备份-xtrabackup三种备份方式安装xtrabackup备份全量备份增量备份差异备份 bin-log日志恢复 bin-log 日志,就记录对数据库进行的操作,什么增删改的操作全…

深度学习笔记之优化算法(三)动量法的简单认识

机器学习笔记之优化算法——动量法的简单认识 引言回顾:条件数与随机梯度下降的相应缺陷动量法简单认识动量法的算法过程描述附:动量法示例代码 引言 上一节介绍了随机梯度下降 ( Stochastic Gradient Descent,SGD ) (\text{Stochastic Gradient Descen…

基础算法之——【动态规划之路径问题】1

今天更新动态规划路径问题1,后续会继续更新其他有关动态规划的问题!动态规划的路径问题,顾名思义,就是和路径相关的问题。当然,我们是从最简单的找路径开始! 动态规划的使用方法: 1.确定状态并…

vue3+vite+uniapp 封装一个省市区组件

一、预览图 二、使用前的一些注意事项 只支持在 uniapp vue3 项目中使用支持微信小程序和h5 (app端没有测试过)ui库用的 uview-plus省市区数据用的是 vant-ui 提供的一个赖库 vant/area-data 三、组件代码 <template><u-popup :show"show" type"botto…

软件工程与计算总结(二)软件工程的发展

本章开始介绍第二节内容&#xff0c;主要是一些历史性的东西~ 一.软件工程的发展脉络 1.基础环境因素的变化及其对软件工程的推动 抽象软件实体和虚拟计算机都是软件工程的基础环境因素&#xff0c;它们能从根本上影响软件工程的生产能力&#xff0c;而且是软件工程无法反向…

Zabbix 监控系统安装和部署

Zabbix 监控系统安装和部署 一、zabbix 是什么&#xff1f;1.1、zabbix 监控原理&#xff08;重点&#xff09;1.2、Zabbix 6.0 新特性1.3、Zabbix 6.0 功能组件1.4、数据库1.5、Web 界面1.6、Zabbix Agent1.7、Zabbix Proxy1.8、Java Gateway 二、部署Zabbix 6.02.1、 解决 za…

Configuration of phpstudy and sqli-labs

Go download the app&#xff1a; 小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01; (xp.cn) Have done. Then enter the program. Enable both functions&#xff1a; Apache and MySQL. Open the website&#xff1a; Next, Lets make the sqli-liab. GitHub…

基于MDK-Keil环境如何把STM32程序直接下载到SRAM运行

1. 前言 对于 Cortex-M 内核的微控制器&#xff0c;它们都可以支持在 RAM 中执行程序&#xff0c;有些非 ARM 的微控制器是不支持的。 在内部 SRAM 执行程序&#xff0c;有基于以下几方面的原因&#xff1a; 1、所使用的设备可能具有OTP&#xff08;One-time Programmable&a…

笔记一:odoo透视表和图表

透视表 1、首先在xml文件添加pivot 说明&#xff1a;&#xff08;1&#xff09;根元素pivot中属性&#xff1a; disable_linking&#xff1a;设置为True&#xff0c;删除表格单元格到列表视图的链接 display_quantity&#xff1a;设置为True&#xff0c;默认显示“数量”列 d…

关于IDEA中gradle项目bootrun无法进入断点以及gradle配置页面不全的解决方案

问题背景 在使用gradle编写的bootrun&#xff0c;采用debug方式启动项目时&#xff0c;无法进入断点&#xff0c;程序正常运行 并发现象1 此处无法识别为大象图标 点击右键后&#xff0c;没有圈中的这个选项 并发现象2 图片圈中的位置缺失 问题原因 正常的 run 命令是通过…

SoapUI实践:自动化测试、压力测试、持续集成

因为项目的原因&#xff0c;前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api。下面将研究的成果展示给大家&#xff0c;希望对需要的人有所帮助。 SoapUI 是什么&#xff1f; SoapUI 是一个开源测试工具&#xff0c;通过 soap/http 来检查、调用、实现 Web Service …