【网络世界】HTTP协议

目录

🌈前言🌈

📁 概念

📁 URL

 📂 urlencode 和 urldecode

📁 协议格式

📁 方法

 📂 GET/get

 📂 POST/post

📁 常见的报头

📁 状态码

 📂 分类

 📂 重定向状态码

📁 Cookie 和 Session

 📂 Cookie技术

工作原理

分类

基本格式

安全性

 📂 Session技术

📁 总结


🌈前言🌈

        欢迎收看本期【网络世界】,本期内容将讲解应用层协议之一的HTTP协议。HTTP协议作为我们日常使用次数最多的,应用最为广泛的协议之一,学习HTTP协议,可以更好的帮助我们来初窥应用层。

        本文旨在研究学习HTTP协议的底层机制,协议格式中各个参数的含义,如何正确使用,此外通过HTTP协议学习Cookie和Session技术。

        此外,学习了HTTP协议,也是我们学习接下来的HTTPS协议的基础。

📁 概念

        HTTP(HyperText Transfer Protocol,超文本传输协议),是互联网世界中一个至关重要的协议。它定义了客户端(如浏览器)如何和服务器之间进行通信,用来交换的传输超文本(如HTML文档,音视频等)。

        应用层的协议是由我们程序员自助来实现,但是有一些大佬定义了一些现成的,非常好用的应用层协议,本着拿来主义的思想,我们直接拿来用就是了,但是,身为一个合格的程序员,我们还是需要了解如何实现的,才能更好的使用。    

        HTTP协议是一个无连接的,无状态的协议。

        无连接指的是,通信双方无需建立连接,直接向对象读写数据即可,通过TCP协议建立的连接进行通信。 

        无状态指的是,通信双方每次请求都要建立新的连接,即服务器不会保存用客户端的状态信息。        

📁 URL

        平时我们所说的网址,就是URL = 协议名://主机域名:端口号/文件路径

        但是,HTTP协议常使用80端口号。因此,80端口作为知名端口号,强绑定给HTTP协议,一般用户不能自主分配80端口号(0~1023默认用户不能更改)

 📂 urlencode 和 urldecode

        在URL中一些特殊字符被重载,用作特殊用途,因此这些字符不能出现在URL中,但是如果URL的要传递的参数中就有这个特殊字符,就要对特殊字符进行转义编码。

转义规则如下:

        将需要转码的字符转为16进制,然后从右向左,取4位(不足4为直接处理),每两位为1位,前面加上%,编码成%XY格式。

        +号就被编码为%2B。

        urldecode就是urlencode的逆过程,将被转义的编码重新转义成原来的字符。

下面是一个编码工具网址:

UrlEncode编码/UrlDecode解码 - 站长工具

📁 协议格式

        HTTP协议格式分为请求报文格式,响应报文格式        

请求报文格式

        ● 请求行:[请求方法] + [URI] + [HTTP版本]。其中URI就是URL中的文件路径。HTTP版本不作为重点,不做讲解。

        ● 请求报头(Header):请求的属性,是一个键值对(key:val),每一组属性用\r\n 分割,遇到空行表示Header结束

        ● Body:空行后面的内容都是Body,即正文。表示客户端向服务器发送数据参数。Body可以为空字符串,如果Body存在,则Header里会有一个Content-Length属性表示Body长度。

响应报文格式

        

        ● 响应行:[HTTP版本] + [状态码] + [状态码描述]。

        ● 响应报头(Header):响应的属性,是一个键值对(key:val),每一组属性用\r\n 分割,遇到空行表示Header结束

        ● DATA:与Body类似,表示服务器向客户端写入数据,在Header中有一个属性Content-Length表示DATA的大小。

📁 方法

        其中最为常用的就是GET和POST方法,也是重点讲解的方法,其余方法不做讨论。

 📂 GET/get

        表示获取资源,也可以用来传输通过URL传递参数。将要传递的参数数据添加至URL的后面,以“?”表示开始。

        例如,网页中我们有一个表单要提交,数据就通过url传递。

        但是附加在URL末尾,意味着所有参数和数据都会以明文的形式出现在URL中,如果传输的是敏感信息(用户个人信息),他们以明文的形式在网上传播,容易被中间人窃取,安全性较差,且能传输的参数体量较小。

 📂 POST/post

        通常用来传递参数数据,通过Body正文部分传递参数一次能传输大量数据,和GET方法相比,Body部分对普通用户不可见,安全性较好。

📁 常见的报头

        ● Content-Type: 数据类型(text/html 等)

        ● Content-Length: Body 的长度

        ● Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;

        ● User-Agent: 声明用户的操作系统和浏览器版本信息;

        ● referer: 当前页面是从哪个页面跳转过来的;

         Location: 搭配 3xx 状态码使用, 告诉客户端接下来要去哪里访问

        ● Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;

        ● connection: 用于控制和管理客户端和服务器之间的连接状态。核心作用,管理持久连接。持久 连接允许客户端和服务器在请求/响应完成后不立即关闭 TCP 连接,以便在同一个连接 上发送多个请求和接收多个响应。

Connection: keep-alive;    表示希望保持连接以复用 TCP 连接
Connection: close;    表示请求/响应完成后,应该关闭 TCP 连接

📁 状态码

 📂 分类

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

 📂 重定向状态码

        这里,我们以301(永久重定向)和302(临时重定向)作为讲解。它们依赖于Location。

        当服务器返回301状态码时,表示请求资源已经永久移到新的位置,服务器会在响应中添加一个Location头部,用于指定资源的新位置。这个Location头部包含了新的URL地址,浏览器会重定向到该地址,之后就会直接访问所在位置,不会再回原来服务器所在位置进行请求。

        当服务器返回302状态码时,表示请求的资源临时移到新的位置。同样地,服务器也会在响应中添加一个 Location 头部来指定资源的新位置。浏览 器会暂时使用新的 URL 进行后续的请求,但不会缓存这个重定向。

        无论是 HTTP 301 还是 HTTP 302 重定向,都需要依赖 Location 选项来指定资 源的新位置。这个 Location 选项是一个标准的 HTTP 响应头部,用于告诉浏览器应该 将请求重定向到哪个新的 URL 地址。

📁 Cookie 和 Session

        HTTP是无连接,无状态的的协议,但是服务器为了业务需要,提高客户体验,可能需要知道用户身份。

        例如在视频网站看视频,需要登录才能观看,用户再点开一个电影后登录观看,退出想要看一部电视剧时,因为HTTP是无状态的,所以用户需要重新登陆,这样对用户十分不方便。

        因此,引入了Cookie和Session技术,基于HTTP协议,帮助服务器标识用户身份,可以一次登录,服务器长时间识别用户身份。        

 📂 Cookie技术

        HTTP Cookie(Web Cookie)是服务器发送到客户端的并保存在客户端的一小块数据,它会在客户端向服务器发送请求时携带在报头发送到服务器,用于告知服务器用户信息。

工作原理

(1)当用户第一次访问服务器时,服务器会在响应包头中添加Set-Cookie属性(含有用户相关属性),传送到客户端。

(2)客户端收到响应后,检测到Cookie,将Cookie保存在本地。

(3)下一次请求时,将其添加至请求报头属性中的Cookie字段,发送给服务器。

分类

会话Cookie:浏览器关闭时失效。保存在内存的浏览器进程的空间中。

持久Cookie:浏览器关闭时不会失效。保存在硬盘中浏览器的工作路径下。

        如果Set-Cookie没有设置失效时间,默认是会话cookie。如果cookie是一个持久cookie,保存cookie的文件是一个二进制文件或sqlist格式存储,一般不能直接查看。

基本格式

完整格式:

        ● expires=data。用于设置Cookie的过期时间。

        ● path=some_path。限制Cookie发送到服务器的哪些路径。默认为设置它的路径。例如只有访问/a/b路径文件,才可以发送Cookie。

        ● domain=domain_name。用于指定哪些服务器/主机可以接受Cookie。例如B站的cookie不会发给腾讯视频的服务器中。

        ● secure:晋档使用HTTPS协议时才发送Cookie。有助于防止Cookie在不安全的HTTP连接中获取。

        ● HTTPOnly:意味着Cookie不能被客户端脚本(JavaScript)访问,有助于跨站脚本攻击(XSS)。

        每个 Cookie 属性都以分号(;)和空格( )分隔。

        名称和值之间使用等号(=)分隔。

        如果 Cookie 的名称或值包含特殊字符(如空格、分号、逗号等),则需要 进行 URL 编码。

安全性

        Cooki保存在客户端内,客户端防护能力较差,且Cookie内含很多用户敏感信息(用户身份,密码登),有很大的风险被窃取泄漏,因此单纯使用Cookie是非常不安全的。

 📂 Session技术

        HTTP Session 是服务器用来跟踪用户与服务器交互期间用户状态的机制。可以理解为,将用户信息保存在服务器中,服务器建立一个Session对象保存用户信息,将Seesion对象通过Hash函数,得到唯一的Sessionid,将Session发送给用户。

        此后,用户收到的Cookie就不再是用户信息,而是一个Sessionid,这样大大降低了窃取风险。

        服务器端会设置相应的机制,防止用户信息被窃取(如异地登录登),且服务器性能更好,防风险能力更高。

        Session 可以设置超时时间,当超过这个时间后,Session 会自动失效。 服务器也可以主动使 Session 失效,例如当用户登出时。

        HTTP协议采取明文传输,意味着报文在网络中是裸奔的,不安全的。Cookie和Session技术都不能保证在网络中Cookie不被窃取,造成用户数据泄漏,只能通过一些机制,最大可能避免用户身份被冒领,泄漏用户数据。

        想要解决这个问题,就得对传输的报文进行加密,这就是HTTPS协议所做的。

📁 总结

        以上,就是本期【网络世界】HTTP协议的主要内容了,主要讲解什么是HTTP,HTTP协议格式中各个参数的含义,以及HTTP作为无状态,无连接的协议,如何通过Cookie和Session技术来提高用户体验,实现一次登陆,上时间识别用户身份。

        以及引入了HTTPS的概念,下一篇文章,将讲解HTTPS是如果实现安全传输,对报文进行加密的。

        如果感觉本期内容对你有帮助,欢迎点赞,收藏,关注Thanks♪(・ω・)ノ

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

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

相关文章

模型大小的指标和模型量化的指标和手段

一、模型大小的指标 1.计算量 计算次数,反映了模型对硬件计算单元的需求。计算量的单位是 OPs(Operations) 。最常用的数据格式 为 float32,因此float32类型下的计算量单位被写作 FLOPs (Floating Point Operations),即浮点计算次数。模型的…

3D Web轻量化引擎HOOPS Communicator针对复杂大模型Web端可视化的解决方案

随着工程设计、制造和建筑领域中三维模型的日益复杂化,如何在Web端高效处理和展示这些大规模数据成为一大挑战。HOOPS Communicator作为一款强大的3D可视化工具,提供了一套针对复杂大模型的轻量化解决方案,涵盖了模型轻量化及格式转换、超大模…

PostgreSQL成为最受欢迎的数据库; TiDB马拉松大赛开启, Serverless和Vector为比赛焦点

重要更新 1. TiDB Hackathon大赛报名开启,总奖金达21万,主题是基于 TiDB Serverless 内置的向量搜索功能(Vector Search)构建 AI 创新应用,感兴趣的可以报名参加。( [1] ) 2. Stack Overflow 2024 开发者调研结果公布…

自学JavaScript(放假在家自学第一天)

目录 JavaScript介绍分为以下几点 1.1 JavaScript 是什么 1.2JavaScript书写位置 1.3 Javascript注释 1.4 Javascript结束符 1.5 Javascript输入输出语法 JavaScript(是什么?) 是一种运行在客户端(浏览器)的编程语言,实现人机交互效果。 2.作用(做什么?)网…

从头开始微调Llama 3.1模型

在今天的科技专栏中,我们将深入探讨如何微调Llama 3.1模型,以使其更好地适应您的特定领域数据。微调大型语言模型(如Llama)的主要目的是为了在特定领域的数据上表现更好,从而生成更符合您需求的输出。以下是我们将要介…

SpringBoot知识笔记

一、基本概念 1.1 特性 起步依赖 自动配置 其它特性:内嵌的Tomcat、Jetty(无需部署WAR文件),外部配置,不需要XML配置(properties/yml)。 1.2 配置文件 SpringBoot提供了多种属性配置方式 //application.properties server.port=9090 server.servlet.context-path…

Python爬虫知识体系-----Urllib库的使用

数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新:https://blog.csdn.net/grd_java/article/details/140574349 文章目录 1. 基本使用2. 请求对象的定制3. 编解码1. get请求方式:urllib.parse.quote()2. ur…

邦布带你从零开始实现图书管理系统(java版)

今天我们来从零开始实现图书管理系统。 图书管理系统 来看我们的具体的实现,上述视频。 我们首先来实现框架,我们要实现图书管理系统,首先要搭框架。 我们首先定义一个书包,在书包中定义一个书类和一个书架类,再定义…

用Java手写jvm之实现查找class

写在前面 完成类加载器加载class的三阶段,加载,解析,初始化中的加载😀😀😀 源码 。 jvm想要运行class,是根据类全限定名称来从特定的位置基于类加载器来查找的,分别如下:…

【SQL 新手教程 2/20】关系模型 -- 主键

💗 关系数据库建立在关系模型上⭐ 关系模型本质上就是若干个存储数据的二维表 记录 (Record): 表的每一行称为记录(Record),记录是一个逻辑意义上的数据 字段 (Column):表的每一列称为字段(Colu…

吴恩达的TranslationAgent学习

TranslationAgent构成 整个[TranslationAgent (github.com)]在流程上分为短文本的一次性翻译和长文本的分chunk翻译(按照Token进行划分)。 但是不论长文本翻译还是短文本翻译,总体流程遵循执行、纠正再执行的逻辑循环实现。 这种按照自省思路…

【数字IC/FPGA】使用Verdi对比两个波形

步骤一: 使用verdi打开第一个波形 bsub verdi -ssf 1.fsdb添加需要观察的信号,如下图所示: 步骤二: 新建容器,依次点击Window --> Dock to --> New Container Window。 然后输入容器的名字,如下图所…

SQL数据库:通过在视频监控平台服务器上直接使用SQL存储过程,在海量记录中查询特定时间段内-某个摄像头的所有视频片段

目录 一、背景 1、存储过程 2、视频监控系统 二、需求和数据表 1、具体要求 2、数据表 3、部分数据 三、实现 1、目标 2、创建存储过程 (1)存储过程代码 (2)创建成功 3、存储过程的解释 4、SQL命令调用方式 5、调用…

Java----队列(Queue)

目录 1.队列(Queue) 1.1概念 1.2队列的使用 1.3队列的模拟实现 1.4循环队列 1.4.1循环队列下标偏移 1.4.2如何区分队列是空还是满 1.5双端队列 (Deque) 1.队列(Queue) 1.1概念 队列:只允许在一端进行插入数据…

Linux Redhat ens33不显示IP问题

优质博文:IT-BLOG-CN 【第一步】:查看系统网卡设备 : ip addr show 【第二步】:修改网卡配置参数 cd /etc/sysconfig/network-scripts/ vi ifcfg-ens33 修改ONBOOT参数为yes 【第三步】:重启网卡,然后ping检测…

奇怪的Excel单元格字体颜色格式

使用VBA代码修改单元格全部字符字体颜色是个很简单的任务,例如设置A1单元格字体颜色为红色。 Range("A1").Font.Color RGB(255, 0, 0)有时需要修改部分字符的颜色,如下图所示,将红色字符字体颜色修改为蓝色。代码将会稍许复杂&am…

Linux:Linux进程控制

目录 1. 进程概念 1.1 并行和并发 2. 进程创建 2.1 fork()函数初识 2.2 写时拷贝 2.3 fork常规用法 2.4 fork调用失败的原因 3. 进程终止 3.1 进程场景 3.2 进程常见退出方法 4. 进程等待 4.1 进程等待必要性 4.2 进程等待的方法 4.2.1 wait方法: 4.…

2024年起重信号司索工(建筑特殊工种)证模拟考试题库及起重信号司索工(建筑特殊工种)理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年起重信号司索工(建筑特殊工种)证模拟考试题库及起重信号司索工(建筑特殊工种)理论考试试题是由安全生产模拟考试一点通提供,起重信号司索工(建筑特殊工种)证模拟考试题库是根据起重信号司索工(建筑特…

2.9.GoogLeNet

GoogLeNet ​ 主要解决了什么样大小的卷积核是最合适的:有时使用不同大小的卷积核组合是有利的 1.Inception块 ​ Inception块由四条并行路径组成。 前三条路径使用窗口大小为11、33和55的卷积层,从不同空间大小中提取信息。 ​ 中间的两条路径在输入…

谷粒商城实战-58-商品服务-API-三级分类-删除-批量删除小结

文章目录 一,增加一个批量删除的按钮并绑定事件二,全栈工程师三,逆向工程在全栈开发中的应用提升效率的方式:使用案例: 这一节的主要内容是开发批量删除分类的功能。 一,增加一个批量删除的按钮并绑定事件 …