应用层协议(上)Http(URL、Cookie、Session)内含逻辑图解通俗易懂!

绪论​
“少年没有乌托邦 心向远方自明朗”,本章是应用层常用且重要的协议htttp,没看过应用层建议一定先看那一篇后再看本章才能更好的去从上到下的理解应用层。
请添加图片描述
话不多说安全带系好,发车啦(建议电脑观看)。


1.Http协议

Http:协议超文本传送协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

2.1URL:

在这里插入图片描述

在WWW上(在网络中),每一信息资源都有统一的且在网上的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器),它是WWW的统一资源定位标志(每一个网页会有一个确定的网址,通过网址就能进入),就是指网络地址(俗称网址)。

具体内容(看标注):
在这里插入图片描述
其中URL包括了:

  1. ip + port(上网本质就是进行进程间通信)
  2. 上网行为:获取的资源(网页、图片、视频、音频等资源本质也都是文件->存在Linux中)、上传的数据(也就是IO)

其中还有参数是通过urlencode和urldecode来实现:

对特殊的字符进行处理,像/*?这样的字符在URL中是有特殊意义的,所以就会把用户输进行转译避免冲突,将其转换成16进制的形式来代替将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式
在这里插入图片描述

2.2http格式

在http中分为请求协议和应答协议:

  1. http请求协议:
    格式为:
    在这里插入图片描述
    如:在这里插入图片描述

其中格式的元素的意义:

  1. 请求行如(首行:[方法] + [url] + [版本]):
    在这里插入图片描述

    1. Method方法:Http的方法:
      在这里插入图片描述
      最长用的方法:
      1. GET:通常用来获取资源,也可以用来传递参数
      2. POST:上传数据
    2. 资源url路径:
      1. 网页、图片资源的路径(默认访问web根目录(/),也表示根目录放着该网站的首页)
    3. http协议版本
      1. http/1.0(适合学习,短连接(仅进行一次的请求与回复))
      2. http/1.1(主流,长连接)
      3. http/2.0
  2. Header(也就是上图的请求报文中很多的 K:V 部分)请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔,遇到空行表示Header部分结束在这里插入图片描述
    HTTP常见Header(咱们通过实际的协议后面理解记忆即可):

    1. Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上
    2. Content-Length: Body的长度
    3. Content-Type: 数据类型(text/html等)
    4. User-Agent: 声明用户的操作系统和浏览器版本信息;
    5. referer: 当前页面是从哪个页面跳转过来的;
    6. location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
    7. Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
      在这里插入图片描述
      http的报头中的关键字段
      Content-Type: 数据类型(text/html等)
  3. Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个==Content-Length(上图是36byte)==属性来标识Body消息体(即实体数据)的长度在这里插入图片描述


http协议需要处理的问题:

  1. 报头和有效载荷如何分离
    1. 空行区分 (格式的红色标记处)
  2. 有效载荷如何交付
    1. 通过缓冲区和对应的函数
  3. http如何读到完整报文
    1. 一直读取,直到读到空行
    2. 其中空行(红色\r\n)是用来区分报头和有效载荷的
    3. 请求报头中会有存着 K:V = Content-Length : XXX,表示着正文(有效载荷)的长度
  4. http如何进行反序列化
    1. 直接根据\r\n进行区分出报头和数据然后反序列化即可

  1. http响应协议:
    在这里插入图片描述

    1. http协议版本(上方已经描述了就省略了)

    2. 状态码:在这里插入图片描述
      如常见的:
      200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)

    3. 状态码描述:ok


现在有了请求协议和应答协议
对于用户端和服务端就有:

当用户发送请求后,服务器就会响应回来(如下图)
在这里插入图片描述
其中两边协议都是有http协议版本的:
客户端中表示的是:浏览器支持的http版本(用户一般是使用浏览器来发送请求报文)、服务端中表示的是:server支持的http版本

  1. 灰度上线:版本更新先给一定用户,确定软件稳定好用后再推广给更多用户更新使用,所以版本不同就有不同的功能。
  2. telnet:远程登录服务命令

如果网页中包含了图片,那么该图片也需要再发送请求

因为HTTP协议是基于请求-响应模型的,即客户端(如浏览器)向服务器发送请求,服务器处理请求后返回响应。在网页中,每张图片都是通过HTML中的标签引入的,而浏览器在解析到这个标签时,会识别出图片资源的URL,并针对该URL发送一个新的HTTP GET请求到服务器,以获取图片数据。

你要请求的所有的资源都有后缀,后缀决定了文件的类型,在http response 给浏览器响应的时候,正文部分是什么类型,是通过文件后缀和Content-Type的映射表来判定!

所以总结:http超文本传输协议,可以支持很多内容的发送,根据请求资源的后缀,判定Content-Type是什么

用户如何请求方法(实现上网行为):

  1. 用户获取资源,发送请求报文,接收服务端返回的应答资源
  2. 向服务器进行传参,要把的数据上传到服务器(登录,注册,搜索等等),下面使用GET/POST再结合 HTML表单来实现一个登录界面底层

GET方法:

下图的HTML代码是用到了HTML表单不会可看看w3wschool的HTML对表单的使用教学
在这里插入图片描述
在这里插入图片描述
当在输入框中输入后:helloworld、123456789
url将会变成:
在这里插入图片描述

其中包含了

  1. 所打开的目录(之前表单中设置的action):“/dira/dirb/x.html”
  2. 输入的参数(对应的名称和输入的参数):myname = helloworld、…

所以GET可以通过form表单提交参数,参数提交的方式,是通过url提参的,其实输入的数据是给了浏览器


当不起指定写的时候:默认是GET方法


POST方法:

如果我们用POST方法传递参数,是通过请求正文进行参数传递
在这里插入图片描述

在这里插入图片描述


GET方法 vs POST方法

总结:
GET方法将参数拼接在url中、POST方法将参数写在正文,是在有效载荷中。
所以:
1. url传参:字节个数有限制(有些浏览器会限制url长度),POST方法:参数长度没有限制。
2. GET 私密性更差一些(直接就是在url上),POST方法能好一些(GET和POST方法都不安全,POST也能被抓包)


Http的状态码(响应码)补充:

在这里插入图片描述

  1. 当状态码是307(temporary Redirect 临时重定向):重定向可以用来进行页面的跳转。
    客户端会在服务器发来的报头中找到location报头信息(一般是一个网址)然后通过这个网址就能重定向跳转到location存的网页
    在这里插入图片描述

  2. 301 永久性重定向,搜索引擎 – 获取网页(url、关键字:无数个网络链接进行对应)
    如果一个网站过期了(之前的域名、url等改变了),当返回301 Location它就会-更新一下老的链接

2.3cookie和session

Http是无连接、无状态(http不会记录历史发送过的请求)的。

但不难发现http虽然是无状态的但,对于许多网站在登录后就会一直认识我,因为要根据身份区分我的权限(会员/非会员),这就是通过cookie技术实现的

cookie:分为文件级(较长时间有效)、内存级(短时间有效),cookie方法又称会话管理

浏览器保存数据Set Cookie,这样在后面用的时候就无需再次输入相关信息(具体如下图),浏览器就会自动的去帮你发送请求登录上你的账号(如下图set-cookie会自动添加你之前使用的信息)
在这里插入图片描述
像微软的Edge浏览器它就会存cookie信息
在这里插入图片描述
在这里插入图片描述
当我们把Cookie信息删除后就无法自动登录了就得重新登录:
在这里插入图片描述

可能存在的问题:
当别人拿着你的cookie文件岂不是就能直接用你身份去登录某些网站了。

解决方法:
通过sessionid(仅仅只是个标记)来代替cookie信息(存的就是用户的账号和密码),通过sessionid去服务端找到对应的cookie认证,也就是将cookie信息存在服务端。
在这里插入图片描述
这样我们就能再通过管理session来防止被别人盗用账号
session:可以通过用户的时间(一段时间后cookie失效)、地址(ip地址突然跳转到外地)来判断是否需要更新cookie认证是否是本人

所以说服务器上就会有大量session、session在服务器上就需要被管理


本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量计算机网络细致内容,早关注不迷路。

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

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

相关文章

Mac移动硬盘选什么格式最好 Mac怎么用ntfs移动硬盘

在使用Mac电脑的过程中,很多用户可能有需要扩展存储空间的需求。选择合适的移动硬盘格式对于数据传输的效率和兼容性至关重要。本文将详细介绍Mac移动硬盘选什么格式好,以及Mac怎么用ntfs移动硬盘,帮助用户优化Mac的使用体验。 一、Mac移动硬…

悬浮翻译工具有哪些?工作学习必备的5款悬浮翻译工具

当我们身处异国他乡,或是工作中遇到多语种交流的需求时,语言障碍往往会成为一道难以逾越的高墙。 不过,在这个充满创新的时代里,技术已经为我们准备好了答案——屏幕翻译器app。它们不仅能够即时翻译屏幕上的文字,还能…

电脑回收站清空了怎么恢复?

在日常使用电脑的过程中,不小心清空回收站导致重要文件丢失的情况时有发生。面对这种情况,我们不必过于慌张,因为有多种方法可以尝试恢复被清空的文件。本文将为您详细介绍几种有效的恢复方法,帮助您找回宝贵的文件。 方法一&…

芯片后端之 PT 使用 report_timing 产生报告 之 -nets 选项

今天,我们再学习一点点 后仿真相关技能。 那就是,了解 report_timing 中的 -nets 选项 。 如果我们仅仅使用如下命令,执行后会发现: pt_shell> report_timing -from FF1/CK -to FF2/d -delay_type max 我们使用命令 report_timing 报出的如上路径延时信息,仅仅显示…

Maven的一些相关知识【重修】《包括私服搭建!》

mvnrepository.com Maven 下载jar包的位置! 【该部分有教程】 这是什么nb代码投稿视频-这是什么nb代码视频分享-哔哩哔哩视频 MAVEN 的私服搭建: https://zhuanlan.zhihu.com/p/520107316 2、maven私服搭建及应用(下)_哔哩…

R7RS标准之重要特性及用法实例(三十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列…

frameworks 之InputReader

frameworks 之InputReader InputManagerService 初始化InputManagerService 启动InputReader 事件的读取设备节点注册和监听设备输入事件的读取 InputReader 事件的处理设备的添加和删除处理触摸事件的处理数据的加工和分发 android 输入事件 主要分 2个流程 事件读取 和 事件…

python的jieba库中文分词词频统计和合并

可能在设置问题模板的时候需要分析已有问句,然后统计词频,根据词频设计问题模板

31套科技风PPT免费分享

目录 部分展示 部分展示 #PPT下载 「科技风模板」链接:https://pan.quark.cn/s/fb2f39a1d343 链接永久有效,点击这里下载,记得给个赞哦

Java生成一个5位的随机验证码(大小写字母和数字)

生成验证码 内容:可以是小写字母,也可以是大写字母,还可以是数字 规则:长度为5 内容中四位字母,一位数字 其中数字只有一位,但是可以出现在任意位置。 package test;impo…

QT error: expected ‘:‘ before ‘slots‘ public slots:

C:\Users\Administrator\Desktop\VideoHill\GikISearch\net.h:10: error: expected : before slots public slots: 先看看头文件里有没有加上引用包含#include <xxxx> 也就是一个引用包含都没有 没有就会报这个。至少一个。 加上后

【架构-24】XML和JSON

XML&#xff08;可扩展标记语言&#xff09;和JSON&#xff08;JavaScript对象表示法&#xff09;是两种常用的数据格式&#xff0c;用于在不同系统之间传输和交换数据。它们各有优点和缺点&#xff0c;适用于不同的场景。下面是对XML和JSON的简要介绍以及它们之间的对比。 XM…

Chapter 01 Vue入门

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 前言一、Vue简介二、el:挂载点三、data&#xff1a;数据对象四、第一个Vue程序五、安装 Vue 开发者工具 前言 Vue 是一个框架&#xff0c;也是一个生态&#xff0c;其功能覆盖…

Modbus-TCP——Libmodbus安装和使用(Ubuntu22.04)

1、简介 Modbus是一种通信协议&#xff0c;广泛用于工业自动化和过程控制领域&#xff0c;允许不同设备之间进行数据交换。libmodbus是一个用于 Modbus 协议的开源库&#xff0c;主要用于开发和实现 Modbus 协议的客户端和服务器应用程序。libmodbus 以 C 语言编写&#xff0c…

【云原生】MySQL的源码编译

1、实验环境 &#xff08;1&#xff09;虚拟机版本&#xff1a;RHEL7.9 &#xff08;2&#xff09;主机 主机名称IP地址mysql-node1172.25.254.10mysql-node2172.25.254.20 2、实验步骤 注意&#xff1a;我们的两台主机都要进行MySQL源码编译&#xff0c;并且操作相同&…

探索 InternLM 模型能力边界

一、任务介绍 在 CompassArena 中选择双模型对话&#xff0c;与InternLM2.5及另外任意其他模型对话&#xff0c;收集 5 个 InternLM2.5 输出结果不如其他模型的对话案例&#xff0c;以及 InternLM2.5 的 5 个 Good Case。 任务地址&#xff1a;Docs Bad Case 1&#xff1a; 模…

Transforms的学习以及地址问题

一、地址问题 在学习Dataset类的实战与Tensboard的学习中&#xff0c;有出现一些地址的问题&#xff1a; 1、相对地址 相对地址的使用&#xff1a; 使用于在从端口中&#xff0c;打开TensorBoard的页面。使用的就是相对地址&#xff1b;例如&#xff1a; tensorboard --log…

新书推荐:《分布式商业生态战略:数字商业新逻辑与企业数字化转型新策略》

近两年&#xff0c;商业经济环境的不确定性越来越明显&#xff0c;市场经济受到疫情、技术、政策等多方因素影响越来越难以预测&#xff0c;黑天鹅事件时有发生。在国内外经济方面&#xff0c;国际的地缘政治对商业经济产生着重大的影响&#xff0c;例如供应链中断&#xff0c;…

rabbitMQ安装与简单demo

安装 mac安装有了brew很方便&#xff0c;windows的可参考 win10 安装rabbitMQ详细步骤 brew install rabbitmq启动 brew services start rabbitmq关闭 brew services stop rabbitmq出了问题之后可以重启一下 brew services restart rabbitmqsome issue 某些库下载超时 比…

使用vagrant、virtualbox、快速创建kali linux

使用vagrant、virtualbox、快速创建kali linux 初始化kali下载vagrant相应镜像vagrant添加相应镜像创建vagrantfile在vagrantfile根目录执行cmd虚拟机登录密码修改sshd配置 用shell远程链接(可选)可视化界面设置成中文创建成功展示图 添加实体网卡使用kali 破解WiFi密码解决 on…