HTTP协议详细总结

news2025/7/8 22:01:01

目录

1.HTTP协议是什么?

2.什么叫做应用层协议

3.HTTP协议的工作流程

4.HTTP报文格式

请求报文:

响应报文:

5.URL

6.方法的认识

1.GET

2.POST

3.GET和POST的区别

4.其他方法

7.报头的认识

用户登陆过程:

8.状态码的认识

9.HTTPS

9.1HTTPS是什么?

9.2HTTPS的工作流程

9.2.1对称加密

9.2.2非对称加密

9.2.3引入证书


1.HTTP协议是什么?

HTTP全称为超文本传输协议,是建立在应用层的协议.什么叫做超文本呢?其实大概意思就是不仅能传输字符串数据,还可以传输图片啊,视频等信息.我们平时打开一个网页,就是通过http协议来传输数据的,当我们在浏览器输入一个搜索的网址(URL)的时候,就会给浏览器的服务器发送一个http请求,然后浏览器的服务器会返回多个http响应,这就是http请求的主要作用,现在很多网站都升级成https了,我们拿CSDN举个例子

 可以看到,CSDN已经升级成https协议了,具体为什么升级,是防止运营商劫持,如果感兴趣,可以百度一下

2.什么叫做应用层协议

所谓应用层协议,就是收发数据的两端锁遵守的协议,我们之前认识的TCP/IP协议是传输层和互联网层协议,是用来解决信息传输问题的,而应用层协议则是用来处理源端口和目的端口的一些细节的

3.HTTP协议的工作流程

我们用一张图,来理解一些http的工作流程,用csdn来举例子

 这里其实我们访问一个网站的时候呢,并不一定只会发送一个请求.但是http是典型的一问一答模型的,这里我们可以用fiddler来抓包查看一下,这里fiddler是一个免费的抓包,当然如果有其它的也可以用其他的,这里我们抓一个包看一下

这个是我们抓到的向搜狗发送的https请求,fiddle就可以进行抓包 ,拿到请求的详细信息,

这个是我们对一个https响应抓到,得到的信息 

4.HTTP报文格式

请求报文:

1第一行:方法,URL,版本号

2 请求头 header(每一行是一个键值对,通过:分隔键值)

3.空行

4.body

响应报文:

1.第一行:版本号,状态码,状态码的描述

2.响应头 header(每一行是一个键值对,通过:分隔键值)

3.空行

4.body

用一个图来理解,会更容易一些

 空行的意义:http报文格式是依赖于TCP协议的,所以可能出现粘包问题,那么我们用一个空行来作为结束标志,就可以避免粘包问题

5.URL

URL就是我们平常说的网址,学名叫统一资源定位符

 一个URL包含很多信息,我们来简单介绍即可

1.协议方案名:就是协议名,常见的有http,https

2.登录信息:就是那种需要登陆的网址对身份的认证,现在可能很少会有了

3.服务器地址:这里是一个域名,会通过DNS系统解析成为一个具体的IP地址,可以在我们的电脑cmd上进行ping + 网址,就可以得到真实的地址

可以看到,百度的地址就是[110.242.68.66]

4.端口号 标识了需要访问目标服务器的哪一个端口

5.带层次的额文件路径:服务器提供的资源,有可能在服务器中是一个真实的文件,但是也有可能是服务器中虚拟出来的文件,HTTP服务器一般不会吧所有电脑上的资源都提供到网上,通常会指定某个目录,把目录中的某些路径作为根路径,然后放到网上资源中

6.查询字符串:?后面的也是一些键值对,称为query string 相当于浏览器给服务器传递的一些参数

7.用来区分这个片段是当前页面的第几个部分,小说网站比较 常见

注意:

URL encode:在我们进行搜索的时候,会发现有的字符是我们在实现代码的时候使用到的,这样我们就无法区分哪些是客户端发来的数据,哪些是我们原本代码中的数据,这时候就需要用到URL encode来进行转义,把字符转换成别的字符,再在服务器端口使用URL decode,这里如果不进行转换的话,某些浏览器可能会自动转义,但是某些浏览器会不兼容,导致无法访问

6.方法的认识

在我们的HTTP请求中,有如上方法,我们简单介绍一些

1.GET

GET方法是我们HTTP请求中最常见的方法,主要作用是从服务器上获取某个资源,当我们在浏览器中输入URL的时候,这是浏览器就会发送一个GET请求

特点:

1.首行的第一部分是GET

2.URL的query string可以为空

3.header部分有一些键值对结构

4.body为空

注意:GET请求并没有长度限制

2.POST

POST也是较为常见的方法,通常用于提交用户的输入数据给服务器,比如登陆界面的账号密码信息

通过HTML中的from标签可以构造POST请求,或者JS中的ajax也可以用于构造POST请求

特点:

1.首行的第一部分为POST

2.query string一般不为空

3.header部分有一些键值对

4.body一般不为空,一般通过header中的Content-type来指定body中的数据类型,Content-length来指定body长度

3.GET和POST的区别

语义:GET的语义是获取数据,POST的语义是提交数据,但是两者可以颠倒

幂等性:GET请求一般建议幂等性,POST却没有就是通过同一个地址,访问到的结果是一样的,比如改密码了,再次用原密码登陆,就不会登陆成功,就会出现错误提示

安全性:二者并没有涉及到安全性,真正的安全是在于密码传输时是否加密

传输数据量:GET和POST两个并没有规定长度,传输的数据量完全取决于不同浏览器和服务器之间的实现区别

传输类型:GET的query string随人无法直接传输二进制数据,但是可以针对二进制数据进行URL encode

4.其他方法

PUT和POST相似,一般用于更新

DELETE用于删除服务器指定资源

OPTIONS 返回服务器所支持的请求方法

HEAD类似GET,但是响应体不返回,只返回响应头

TRACE会先服务器端收到的请求,一般测试会使用

CONNECT:预留位

7.报头的认识

header是键值对结构的,每个键值对独占一行

HOST:编制服务器主句的地址和端口

Content-Length:标识body的数据长度

Content-Type:标识body的数据类型

User-Agent:标识浏览器和操作系统的属性

Referer:标识当前页面的前置页面,也就是从哪个页面跳转过来的,前面说的运营商劫持也和这个有关系

Cookie:存储了一个字符串

通过浏览器可以看到当前持有的Cookie 这个一般存储到内存上,可以用于用户标识

用户登陆过程:

1.浏览器先给服务器发送一个获取登陆界面的请求

2.服务器做出响应,提供登陆页面的HTML

3.浏览器中,用户输入用户名和密码,并且发送请求

4.如果密码正确,服务器提供一个令牌给用户

5.用户拿着令牌去访问其他的页面,发出请求

6,服务器发出对应页面的HTML响应

8.状态码的认识

1.1xx

1xx是信息性状态码,标识请求正在处理

2.2xx

2xx是标识成功的状态码,标识请求正常处理完毕,比如200标识OK

3.3xx

3xx是重定向的状态码,平常见到的有301永久重定向和302临时重定向

4.4xx

4xx是客户端错误代码,比如403拒绝访问,也就是没权限访问某些页面,404没有找到资源,如果URL标识的资源不存在,那么就会出现404

5.5xx服务器错误代码,比如500表示服务器内部出现错误,也就是服务器崩溃,504,是表示服务器负荷过大了,就会504

9.HTTPS

9.1HTTPS是什么?

HTTPS是一个应用层的协议,是再HTTP的基础上面引入了加密层,防止像HTTP中传输的数据被篡改

9.2HTTPS的工作流程

9.2.1对称加密

对称加密就是通过一个"密钥",把明文加密成暗文,同样也可以反过来,把暗文变成明文

但是这种加密并不安全,当客户端向服务器发出获取密钥的请求之后,黑客在此时就监听劫持,就能得到密钥,从而破解密文,所以引入了非对称加密

9.2.2非对称加密

非对称加密通过使用两个密钥,公钥和私钥,公钥私钥是配对使用的,我们可以通过公钥加密,私钥解密,也可以反过来,私钥加密,公钥解密,这样私钥在服务器端,公钥是客户端发送请求,从服务器获取的,私钥并不会传输,公钥加密后,只能私钥解密,那么黑客就算劫持到了,也无法解密,这样的数据,就变得安全了,但是由于非对称加密需要的工作更多,导致速率和对称加密比较,就会慢了很多,所以在开始协商密钥的时候,也就是客户端请求获取公钥的时候,会用对称加密,这样就能提高一些速率.但是你以为这就结束了?并没有,如果黑客伪造一个公钥,发送给客户端,此时客户端并不知道是谁给的公钥,那么他就会直接加密并且发送过去,这是黑客就通过自己的私钥进行解密,然后把密文通过服务器端的公钥加密,发给送给服务器,这时,因为黑客是个中间人,那么就可以得到两边的传输数据,对此,我们引入了证书的概念

9.2.3引入证书

当我们客户端在刚和服务器创建链接的时候,服务器返回的数据捎带一个证书给客户端,这种证书是通过CA机构申请的一个证书,所以不用怕被伪造,然后后续客户端在收到响应的时候,就会去判断这个数据是否被篡改过,从而就使我们的数据安全了.建立连接返回的数据包括证书发布机构和有效期,还包括公钥,证书所有者签名等等

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

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

相关文章

现代c++中实现精确延时方法总结

程序中实现延时有很多种办法,但是有些不建议用。比如还在用sleep()或者空转计数的方式延时?要么移植性不好,要么不够精确且效率太低。这里总结下现代c中推荐的一种实现精确延时的方法。 之前的一些用法 粗暴空转 long wait 0; while(wait…

十二、Mysql的索引

Mysql的索引十二、Mysql的索引一、什么是索引二、常见索引的种类(算法)三、B树 基于不同的查找算法分类介绍1、B树结构2、B-树四、索引的功能性分类1、辅助索引(S)及构建B树结构2、聚集索引(C)及构建B树结构3、聚集索引和辅助索引构成区别4、关于索引树的高度受什么影响五、索引…

Vue快速入门一:官网、下载、定义变量

Vue官网:Vue.js - 渐进式 JavaScript 框架 | Vue.js Vue2中文文档:Vue.js介绍 — Vue.jsVue.js Vue3中文文档:快速上手 | Vue.js Vue下载: Vue2下载: 引入Vue2版本:打开上面的中文文档,找到这…

Flink窗口及其分类-详细说明

文章目录💎Flink窗口的概念⚽窗口的分类🪩窗口 API 概览⚾窗口分配器(Window Assigners)😃😃😃😃😃 更多资源链接,欢迎访问作者gitee仓库:https:/…

Hive:BUG记录,错误使用动态分区导致的插入失败

1.场景 在Hive中,插入数据时可以指定动态分区,如果通过partition(day_partition)指定动态分区,而实际的select语句是直接把这个属性值写死了(如‘2022-10-13’),就可以不需要指定hive变量set hive.exec.dy…

【牛客】四选一多路器

描述 制作一个四选一的多路选择器,要求输出定义上为线网类型 状态转换: d0 11 d1 10 d2 01 d3 00 信号示意图: 波形示意图: 输入描述: 输入信号 d1,d2,d3,d4 sel 类型 wire 输出描述: 输出信…

【信号处理】扩展卡尔曼滤波EKF(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

学习 MongoDB5 这一篇就够了

文章目录一、相关概念1.1、业务场景1.2、简介1.3、体系结构1.4、数据模型二、安装三、基本常用命令3.1、数据库操作3.2、集合操作3.3、文档基本CRUD1、插入2、查询3、更新4、删除3.4、分页查询3.5、更多查询3.6、小结四、索引4.1、概述4.2、类型4.3、管理操作4.4、索引的使用4.…

四十五、壁面函数理论及y+的确定

0. 前言 什么叫做壁面函数,为什么引入壁面函数的概念?? 因为流体无论流动,还是传热、传质都存在边界层。而之所以有壁面函数这个东西,根源就在于边界层理论。 1. 边界层理论 大家都知道什么是边界层理论,我们想要理解壁面函数…

美国这几年的人口死亡数据

2015年:总死亡271.20万,平均死亡年龄78.8 2016年:总死亡274.40万,平均死亡年龄78.6 2017年:总死亡281.35万,平均死亡年龄78.6 2018年:总死亡283.90万,平均死亡年龄78.7 2019年&#…

Java中的方法是什么?(Java系列2)

目录 前言: 1.什么是方法 2.方法的定义 3.方法调用的执行过程 4.实参和形参的关系 5.方法重载 6.方法签名 7.递归 8.关于“调用栈” 结束语: 前言: 在上一次博客中小编主要和大家分享了Java中的一些基础知识,与小编之前…

Python多任务编程

1.进程与多任务 1. 1 多任务的介绍 1.使用多任务能充分利用CPU资源,提高程序的执行效率,让程序具备处理多任务的能力。 2.多任务执行方式有两种: 并发:在一段时间内交替执行多个任务。 并行:在一段时间内真正的同…

第三周 青海之行——练练构图,培养你的摄影眼

目录3.1 油菜花海,怎么拍更好看?3.2 构图的元素:线条、形状、图案(一)3.3 构图的元素:光影、留白、框景(二)3.4 摄影构图 补充内容构图作业3.1 油菜花海,怎么拍更好看? 祁连山下的百里油菜花海 门源 雪山下…

冲冲冲!!!python计算机二级每日一套_8

文章目录一、选择题二、基本操作三、简单应用四、综合应用声明:例题均来源于网络,仅供学习笔记,若涉侵权请联系删除。所属练题来源于《小黑课堂》一、选择题 1、树的度为3,共有31个结点,但没有度为1和2的结点。则该树…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: clear

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/clear/ 公有成员函数 <deque> std::deque::clear C98 void clear(); C11 void clear() noexcept;清除内容 从deque中删除所有元素&#xff08;已销毁&#xff09;&#xff0c;使容器的size为0。…

MBIST BAP(Bist Access Port)直接访问接口(1)

More articles You can follow the official account&#xff1a;“IC练习生” IC民工不定期更新 BAP BAP会覆盖掉连接到BAP上的memory的一些默认操作模式; 通过消除串行配置控制器的shift cycle,大大缩短测试时间,代价是在BAP和控制器之间额外的连接; BAP的高级访问属性部分…

【渝偲】DSPE-PEG-Mannose磷脂聚乙二醇甘露糖;科研试剂

DSPE-PEG-Mannose磷脂聚乙二醇甘露糖 DSPE-PEG-Mannose 磷脂聚乙二醇甘露糖 英文名称:DSPE-PEG-Mannose 中文名称:磷脂聚乙二醇甘露糖 结构式&#xff1a; 性状: PEG2000分子量为白色粉末溶剂:溶于大部分有机溶剂&#xff0c;如&#xff1a;DCM、DMF、DMSO、THF等等。在水中…

【Linux进程间通信】 管道

这里写目录标题管道有名管道无名管道在使用无名管道时为什么要关闭不使用的另外一端&#xff1f;IPC机制&#xff1a;管道&#xff0c;信号量&#xff0c;共享队列&#xff0c;消息队列&#xff0c; 套接字。 管道&#xff0c;信号量&#xff0c;共享队列&#xff0c;消息队列…

[附源码]SSM计算机毕业设计中青年健康管理监测系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Design A Pastebin

title: Notes of System Design No.03 — Design a PasteBin description: Design a PasteBin ’ date: 2022-05-13 18:01:58 tags: 系统设计 categories: 系统设计 00. What is Pastebin? 这是一个网站 在输入框输入文本 网站上会生成一个URL链接 别人可以通过这个链接 …