轻松理解HTTP协议

2023-11-12

了解http协议

1.http是什么

首先我们需要知道http是什么
http(Hyper Transfer Protocol,超文本传输协议)是一种应用非常广泛的应用层协议,底层是tcp协议,http要用tcp来完成数据通信的能力。我们可以进行文本的传输,还有一些其他资源,如图片,视频,音频等等

http的特点:
1.http本身是无连接的(底层基于tcp协议,http要发起所谓httprequest时,不会先在http层建立连接
2.http本身是无状态的(http不会记录自己发起http请求的上下文,可以理解为不对历史有记忆)(但我们可能会产生疑问,为什么我在登陆时,我进行了密码保存,下次再登录的时候就不用输入密码了呢?这个问题我们放到https中讲解)
3.http发起请求的时候,有基于长连接,也有基于短链接

2.认识URL

2.1URL

我们平时俗称的网址,其实就是URL
我们可以先给出一串地址,比如
http://user:pass@www.example.jp:80/dir/index.html?uid=1#ch1
在上面的一串网址中我们一共可以分为7个部分
协议方案名:http://
我们所采用的协议

登录信息:user:pass
这里我们请求时无法看见,可以忽略

服务器地址:www.example.jp
域名

服务器端口号:80
端口号会被省略,因为我们已经知道了所使用的协议,所以服务器上的端口号都是已知的(即理解为,这个服务和端口号是进行了绑定的,强相关)

带层次的文件路径:/dir/index.html
这个标定一个特定的网页文件,这里的 ’ / '被称为路径分割符,可以理解为是http Web服务器的‘根目录’(和linux中的不一定一样)

查询字符串:uid=1
片段标识符:ch1
这两者都是参数

2.2urlencode和urldecode

我们在使用百度搜索时,我们输入汉字进行搜索时,对应的网页的网址上会出现一串奇怪的字符
在这里插入图片描述
这里的"+" 被转义成了 “%2B”

像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.
比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.
转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY
我们可以在百度上进行搜索urlencode编码转换,便可以自行转换

3.http传输格式

3.1http请求

对于每一个协议,我们都会产生两个问题
第一,该协议是如何分离报头和有效载荷的?
第二,该协议如何寻找到需要向上传输的某一个协议?

在http的请求里,是以行为单位的,进行消息内容的陈列,除了第一行,默认每行都是name:value的样式

http请求格式
首行: [方法] + [url] + [版本]
Header: 请求的属性, 冒号分割的键值对
;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个
Content-Length属性来标识Body的长度
上述的每个都以行为单位,都会有一个换行字符

我们把请求格式分为四部分
分为请求行(请求方法,请求URL,http版本),请求报头(到空行为止),空行,请求正文
此时,我们可以发现该协议是通过空行,把报头和有效载荷分解,来表明http请求报头的结束

3.2http响应

http响应格式
首行: [版本号] + [状态码] + [状态码解释]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个
Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在
body中.

http的响应也和请求类似,这里的状态码就是我们经常可以看到404这种报错

对于http协议来说,服务器获得客户端的请求,能够得知客户端的各种信息。因为每一个会使用各种版本的http请求协议,会存在新老版本共存的情况,当双方进行交互可以互相通信版本,你是什么版本,我就传给你在当前版本下能看到的特定的服务(这就是双方交换版本的意义)

4.http请求方法

4.1GET方法

这里我们可以使用第三方软件(Fiddler)对网页进行抓包,来对GET和POST请求来进行观察
特点:
登录页面,输入账户和密码时,我们可以直接再网址上发现账户和密码都被打印了出来,即直接显示在了各种参数的位置

4.2POST方法

特点:
这里和GET方法不一样的地方,我们在网址上并不能看见账户和密码信息,可能会有同学在想,那这样我是不是就安全了呢?感兴趣的同学可以直接使用Fiddler自己实验一下
我们会发现账户信息和密码出现在了正文范围内,而我们使用抓包工具时,照样可以获取正文
结论:GET和POST方法都是不安全的,因为他们都没有经过加密处理

5.http的状态码

1XX:信息性状态码,接受的请求正在处理
会返回一个对当前正在处理的请求的信息
2XX:成功状态码,请求正常处理完毕
该类表明请求正常
3XX:重定向状态码,需要进行附加操作以完成请求
重定向分为临时重定向和永久重定向
永久重定向:http的状态码是301,多用于旧网址被废弃了要转到一个新的网址确保用户的访问,最经典的就是京东网站,你输入www.jingdong.com的时候,会被重定向到www.jd.com,因为jingdong.com这个网址已经被废弃了,被改成jd.com,所以这种情况下应该用永久重定向。
临时重定向:http的状态码是302,表示页面的暂时性跳转。比如访问一个需要权限的网址,如果当前用户没有登录,应该重定向到登录页面,这种情况下,应该用暂时性重定向。
字面理解的话就是一个是暂时的,一个是永久的

4XX:客户端错误状态码,服务器无法处理请求
客户端有误,所以无法获取信息,最常见的就是404

5XX:服务器错误状态码,服务器处理请求出错

最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)

6.http常见的Header(报头内容)

Content-Type: 数据类型(text/html等)
Content-Length: Body的长度
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
User-Agent: 声明用户的操作系统和浏览器版本信息;
referer: 当前页面是从哪个页面跳转过来的;
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;

7.cookie文件

这里我们就可以回答上面的http无状态的疑问了
首先我们为了让http有记忆性,程序员添加了一些其他功能,我们可以叫他http的会话能力(添加了cookie和session)
我们在登陆时,输入账号和密码后,点击了保存密码,此时用户的账号和密码都存入cookie文件中,以后的浏览器每次发起请求的时候,http请求都会自动给你携带你曾经写到临时文件中的内容(cookie),发送给服务器端

浏览器使用cookie的时候
1.每一个http request都会携带cookie的信息,发送给服务器!服务器也要有cookie技术(其中认证的环节,不一定是http自己完成的,程序员完成的),这里我们可以同样表明了http是无状态的
2.cookie“文件”:有些浏览器配置的时候,cookie有内存级,也有文件级别的(内存级:我们打开浏览器,打开网页行账号和密码输入后,再重新打开该网页,不用登录,但是关掉浏览器后,仍然需要重新输入账号和密码。文件级:不同的是,关掉浏览器后,重新打开该网页,此时我们不需要重新登录,我们把cookie写入进了一个“cookie”文件中进行保存)

但是!!!cookie里面保存的是用户的私密信息,假如我们被人盗取了所以的cookie信息,此时别人可以登录我们的账号来进行各种操作

8.session文件

所以我们产生了一个session文件
我们在网页输入了账号和用户后,此时服务器端获取到这些信息,然后对其进行认证,认证成功后,在服务端形成一个session文件,里面保存了用户所以的私密信息,该文件的文件名是具有唯一性的!!!,此时服务器会返回给浏览器一个sessionid的东西。
从此,我们在进行网络传送时,每一个http request都会携带sessionid的信息,发送给服务器,服务器会对sessionid进行认证和对比,此时我们成功的保证了信息的安全(毕竟在服务器端的信息更安全吧)

https链接: 关于https详细讲解的好文哦!.
感兴趣的小伙伴可以看一下哦,求赞赞!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

轻松理解HTTP协议 的相关文章

随机推荐

  • BearPi-HM Micro 鸿蒙应用开发体验

    这是在去年小熊派开发的一款开发板 核心STM32MP157 我之前也花了一些时间来学习开发了一个应用 包含南向各种外设驱动的开发和北向hap APP的开发 最终实现了自己的构想 之前没有时间记录 今天简单记录总结 南向开发功能如下 板载陀螺
  • k8s笔记24--安装metrics-server及错误处理

    k8s笔记24 安装metrics server及错误处理 1 介绍 2 安装 3 常见错误 第一次错误 持续 Failed probe 第二次错误 bad status code 403 Forbidden 4 说明 1 介绍 最近一个同
  • 机器学习课程笔记(一)导论

    符号与名词定义 有监督学习的输入被称作input variables features attributes 有监督学习的输出被称作output variables targets 输入 输出被称作training example inst
  • postgresql常用命令

    环境 Ubuntu 16 04 LTS 数据库版本 9 6 6 注意 PostgreSQL中的不同类型的权限有SELECT INSERT UPDATE DELETE TRUNCATE REFERENCES TRIGGER CREATE CO
  • 一文带你全面深入了解TreeMap

    概述 TreeMap是Map家族中的一员 也是用来存放key value键值对的 平时在工作中使用的可能并不多 它最大的特点是遍历时是有顺序的 根据key的排序规则来 那么它具体是如何使用 又是怎么实现的呢 本文基于jdk8做一个讲解 Tr
  • 3、选择判断语句、循环语句

    选择判断 单分支选择判断 if 语法 if 条件语句 执行语句 可以有多条执行语句 简体 if 条件语句 单条执行语句 如果条件语句后面没有大括号 则条件语句所控制的执行语句只能有一条 双分支选择判断 if else 语法 if 条件语句
  • 文件(file)和流(stream)的联系和区别

    文件 File 和流 Stream 是既有区别又有联系的两个概念 文件是计算机管理数据的基本单位 同时也是应用程序保存和读取数据的一个重要场所 存储介质 文件是指在各种存储介质上 如硬盘 可移动磁盘 CD等 永久存储的数据的有序集合 它是进
  • 2023蓝桥杯c/c++省赛B组题目(最全版):

    目录 A 日期统计 B 01 串的熵 C 冶炼金属 D 飞机降落 E 接龙数列 F 岛屿个数 G 子串简写 H 整数删除 I 景区导游 J 砍树 A 日期统计 B 01 串的熵 用Excel做比较方便 让我看看有谁 哈哈哈哈哈 答案当然就是
  • 力扣算法——简单题 回文数(Java解法)

    题目描述 判断一个整数是否是回文数 回文数是指正序 从左向右 和倒序 从右向左 读都是一样的整数 例如 121 13431 是回文数返回true 不是则返回false 解题思路 首先可以排除负数 比如 2332 从左向右读 为 2332 从
  • 一. SpringCloud Alibaba Sentinel 基础使用示例

    目录 一 基础解释 Sentinel 下载启动 二 Sentinel 使用示例 创建被 Sentinel 监管的服务 一 基础解释 github sentinel 中文版 SpringCloud Alibaba Sentinel 分布式系统
  • SQL Server(数据管理之增删查改)

    一 代码单词 二 先系统敲一个表 好了后代码全选 点击执行 当下面弹出命令已完成 就表示表建好了 三 在表中增加数据 增加方法 选中增加代码 执行 这里报错是因为sid 学生学号 在创建表的时候设置了自增 identity 所有不能给sid
  • 程序员如何利用chatGPT提高开发效率

    对于编程人员来说了解 ChatGPT 是很有帮助的 因为它是一个自然语言处理模型 可以用于处理各种文本任务 例如生成代码注释 代码自动补全 错误检测和纠正 问题回答等等 通过利用 ChatGPT 程序员可以更快速地生成代码 更准确地理解和回
  • 7-45 海选高大中锋

    HDU篮球队需要一个高大中锋 只要个子高 不会打球没关系 请你从n个候选人找出个子最高的 输入格式 第1行包含一个整数n 表示人数 第2行包含n个实数 表示n个人的身高 输出格式 包含一个实数 表示最高的人的身高 小数点保留2位 输入样例
  • Unity3D接入Android第三方SDK流程

    目录 一 SDK调用Unity3D 二 Unity3D调用SDK 1 在Unity中新建一个脚本 调用MySDkPlatform中的方法 四 打包 1 方式一 SDK打成plugins给Unity unity版 2 方式二 Unity导出安
  • 锁定文件失败 打不开磁盘“E:\HP02\HP01-cl1.vmdk”或它所依赖的某个快照磁盘。 模块“Disk”启动失败。 未能启动虚拟机

    解决办法 将框内文件删除
  • Entity Framework Core系列教程-5-第一个应用程序

    第一个EF Core控制台应用程序 在这里 您将逐步学习如何将Entity Framework Core与Code First方法结合使用 为了演示这一点 我们将使用Visual Studio 2019创建一个 NET Core Conso
  • iMX6ULL学习(二)

    文章目录 Makefile机制规则 一 通配符 二 PHONY假想目标 三 即时变量和延迟变量 四 make函数 foreach VAR LIST TEXT filter out PATTERN TEXT filter out patter
  • 如何根据利用企业微信机器人群自动推送消息

    如何根据利用企业微信机器人群自动推送消息 1 自动推送文字 消息 艾特所有人或指定人等等 import request 发起https requests请求 url 此处填入自己创建的企业微信机器人的url def bot txt url
  • Unix 时间戳(stm32实现解析与转换)

    1 什么是Unix时间戳 Unix时间戳是从1970年1月1日 UTC GMT的午夜 开始所经过的秒数 不考虑闰秒 1 Unix时间戳 英文为Unix epoch Unix time POSIX time 或 Unix timestamp
  • 轻松理解HTTP协议

    一起深入了解http和https协议吧 了解http协议 1 http是什么 2 认识URL 2 1URL 2 2urlencode和urldecode 3 http传输格式 3 1http请求 3 2http响应 4 http请求方法 4