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

本文主要是介绍应用层协议(上)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(URL、Cookie、Session)内含逻辑图解通俗易懂!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105360

相关文章

Java中八大包装类举例详解(通俗易懂)

《Java中八大包装类举例详解(通俗易懂)》:本文主要介绍Java中的包装类,包括它们的作用、特点、用途以及如何进行装箱和拆箱,包装类还提供了许多实用方法,如转换、获取基本类型值、比较和类型检测,... 目录一、包装类(Wrapper Class)1、简要介绍2、包装类特点3、包装类用途二、装箱和拆箱1、装

Python实现文件下载、Cookie以及重定向的方法代码

《Python实现文件下载、Cookie以及重定向的方法代码》本文主要介绍了如何使用Python的requests模块进行网络请求操作,涵盖了从文件下载、Cookie处理到重定向与历史请求等多个方面,... 目录前言一、下载网络文件(一)基本步骤(二)分段下载大文件(三)常见问题二、requests模块处理

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

Python如何实现 HTTP echo 服务器

《Python如何实现HTTPecho服务器》本文介绍了如何使用Python实现一个简单的HTTPecho服务器,该服务器支持GET和POST请求,并返回JSON格式的响应,GET请求返回请求路... 一个用来做测试的简单的 HTTP echo 服务器。from http.server import HT

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines