应用层协议(上)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.rhkb.cn/news/409175.html

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

相关文章

Linux rocky 9.2 安装mysql-8.0.39-linux-glibc2.28-x86_64.tar.xz

数据库官方下载:MySQL :: Download MySQL Community Server 本文也绑定该资源包,免费提供下载学习。 1.系统版本 2.新建目录,存放数据库安装包,并且上传 需要用到的工具:yum -y install vim lrzsz tar 上传解压&…

探索Python交互式编程的新境界:Python-prompt-toolkit的魔法

文章目录 探索Python交互式编程的新境界:Python-prompt-toolkit的魔法背景:为何选择Python-prompt-toolkit?Python-prompt-toolkit是什么?如何安装Python-prompt-toolkit?简单使用:Python-prompt-toolkit的…

C++,std::queue 详解

文章目录 1. 概述2. 包含头文件3. 基本操作3.1 构造函数3.2 赋值操作3.3 成员函数 4. 迭代器5. 示例6. 注意事项参考 1. 概述 std::queue 是 C 标准模板库(STL)中的一个容器适配器,它提供了一种先进先出(FIFO)的数据结…

【研发日记】嵌入式处理器技能解锁(五)——TI C2000 DSP的中断系统

文章目录 前言 背景介绍 中断框架 外设中断 ePIE模块 CPU中断 中断嵌套 应用实例 总结 参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解锁(二)——TI C2000 DSP的SCI(串口)通信》 见…

基于Java的小区物业管理系统APP的设计与实现(论文+源码)_kaic

摘 要 小区物业管理系统是现代社会中非常热门的软件,伴随着社区规模的不断扩大和住户的不断增多,本系统的主要目的是辞别帐本以及传统的单一数据管理系统,快捷的保存用户各种数据信息。本系统针对Java系统展开,使用Java、SpringB…

无人机RTK定位定向技术详解

无人机RTK(Real-Time Kinematic,实时动态差分技术)定位定向技术,是无人机领域的一项高精度导航与定位技术。它结合了全球导航卫星系统(如GPS、GLONASS、Galileo、BDS等)与实时差分技术,通过地面…

超越GPT4V,最强多模态MiniCPM-V2.6模型分享

MiniCPM-V2.6是由OpenBMB开发的一款多模态大型语言模型(MLLM),专为视觉-语言理解设计。 MiniCPM-V2.6模型能够处理图像、视频和文本输入,并提供高质量的文本输出。 MiniCPM-V 2.6模型在单图像理解方面超越了广泛使用的专有模型&…

机器学习课程学习周报九

机器学习课程学习周报九 文章目录 机器学习课程学习周报九摘要Abstract一、机器学习部分1.1 Word Embedding1.1.1 词嵌入的基本概念1.1.2 word2vec连续词袋模型CBOW1.1.3 word2vec跳字模型Skip-gram 1.2 Transformer代码实践DatasetDataloaderModelLearning rate scheduleModel…

windows javascript 打开、关闭摄像头

1. 效果 打开摄像头 关闭摄像头&#xff08;包括指示灯也关了的&#xff09; 2. 代码 open_close_camera.html // open_close_camera.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>use camera</title>…

使用Dotween制作按钮弹性动画效果

效果&#xff1a; 方式&#xff1a; 优点&#xff0c;不需要写任何代码、稳定、可自定义效果

Agent实际落地的应用 未来生活的无形助手

在这个信息爆炸的时代&#xff0c;我们每个人都在追求更高效的生活方式。想象一下&#xff0c;如果有一个无形的助手&#xff0c;能够理解我们的需求&#xff0c;自动处理繁琐的任务&#xff0c;甚至为我们提供个性化的建议&#xff0c;那将是多么美好的体验&#xff01;这正是…

数字模拟IC设计前端、后端、前仿、后仿新版虚拟机

虚拟化平台&#xff1a;VMware Workstation 15 Pro以上版本 操作系统&#xff1a;CentOS Linux release 7.9.2009 (Core) 一、射频模拟IC设计必备软件 Cadence IC06.18.350/IC23.10.080&#xff08;virtuoso&#xff09; Cadence SPECTRE23.10.538-isr10 Cadence ASSURA04.…

Spring Boot OAuth2.0应用

本文展示Spring Boot中&#xff0c;新版本OAuth2.0的简单实现&#xff0c;版本信息&#xff1a; spring-boot 2.7.10 spring-security-oauth2-authorization-server 0.4.0 spring-security-oauth2-client 5.7.7 spring-boot-starter-oauth2-resource-server 2.7.10展示三个服务…

远程供水无障碍,管线车助力全面消防防护_鼎跃安全

夏季是各类自然灾害的高发季节&#xff0c;其中森林火灾尤为频繁。这一时期的气候特征是干旱少雨&#xff0c;伴随着高温和强风&#xff0c;使得森林火灾的发生频率大幅增加。由于夏季空气湿度低&#xff0c;植被含水量减少&#xff0c;一旦出现火源&#xff0c;火势极易蔓延。…

数据结构-链表-第二天

结合leetcode学习c 链表比数组更易增加和删除数据&#xff0c;但访问速度更慢 定义 链表&#xff08;linked list&#xff09;是一种线性数据结构&#xff0c;其中的每个元素都是一个节点对象&#xff0c;各个节点通过“引用”相连接。 引用记录了下一个节点的内存地址&#…

windows本地搭建zookeeper和kafka环境

zookeeper 1.1 下载zookeeper 下载地址 随便进一个站点&#xff0c;默认是新版本&#xff0c;旧版本点击archives进入&#xff0c;选择合适的版本下载&#xff0c;本文使用的是3.7.2 下载时候选择apache-zookeeper-3.7.2-bin.tar.gz 格式的&#xff0c;编译后的&#xff0c;解…

centos 虚拟机器刚刚安装没有ip地址的问题

刚刚安装好的虚拟机器&#xff0c;我们通过 ip addr 查看ip发现是这样的 该虚拟机器没有ip地址&#xff0c;那么怎么办 原来是在/etc/sysconfig/network-scripts/ifcfg-ens33中关于网络的配置有问题 ONBOOTno 表示不开启网卡&#xff0c;我们需要将这个值进行修改为yes 当前…

prolog 基础 - 关系和属性

首先进入环境&#xff1b; 看一下一开始的提示符是 ?- &#xff0c;现在可以用write语句输出一些东西&#xff1b; 根据资料&#xff0c;在prolog中&#xff0c; 两个对象之间的关系&#xff0c;使用括号表示。比如&#xff0c;jack的朋友是peter&#xff0c;写成friend(ja…

嵌入式堆栈、ARM寄存器

栈里面存放的内容&#xff1a;局部变量和系统信息&#xff0c;函数调用链路也是系统信息的一环 ARM寄存器 LR&#xff1a;程序跳转的时候&#xff0c;返回到的地址就保存到此处 PC&#xff1a;程序计数器&#xff0c;pc 要执行的下一条指令地址&#xff0c;就存放在此处&#…

QT error: undefined reference to `vtable for Net‘

报错 C:\Users\Administrator\Desktop\VideoHill\GikISearch\net.cpp:4: error: undefined reference to vtable for Net 以下是两个可能错误原因 1&#xff0c;未定义Q_OBJECT 宏 在头文件中加上 加上#include <QObject>&#xff0c; 改写继承QObject 和定义宏 …