【网络世界】HTTP协议

news2024/11/24 3:00:13

目录

🌈前言🌈

📁 概念

📁 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.coloradmin.cn/o/1953417.html

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

相关文章

Web3 职场新手指南:从技能到素养,求职者如何脱颖而出?

随着 2024 年步入下半年,Web3 行业正在经历一系列技术革新。通过改进的跨链交互机制和兼容性,逐步消除市场碎片化的问题。技术的进步为开发者和用户都打开了新的前景。然而,复杂的技术和快速变化的市场环境也让许多新人望而却步。求职者如何找…

编译固件 -- 自用

编译环境 先安装编译环境 git clone <编译仓库路径> git checkout <编译主分支> 更新/下载 然后就是一样的更新下载 ./scripts/feeds update -a ./scripts/feeds install -a 然后直接编译 feeds/puppies/rom/scripts/make.sh 对应型号 make Vs 这里的对应型号可…

gitee的fork

通过fork操作&#xff0c;可以复制小组队长的库。通过复制出一模一样的库&#xff0c;先在自己的库修改&#xff0c;最后提交给队长&#xff0c;队长审核通过就可以把你做的那一份也添加入库 在这fork复制一份到你自己的仓库&#xff0c;一般和这个项目同名 现在你有了自己的库…

Footprint Analytics 助力 Core 区块链实现数据效率突破

Core 是一个基于比特币并兼容 EVM 的 Layer 1 区块链&#xff0c;正通过其创新解决方案引革新特币金融。作为首个引入非托管 BTC 质押协议及全球首个发行收益型 BTC ETP 产品的区块链&#xff0c;Core 站在了区块链技术的最前沿。通过利用超过 50% 的比特币挖矿哈希算力&#x…

24暑假算法刷题 | Day22 | LeetCode 77. 组合,216. 组合总和 III,17. 电话号码的字母组合

目录 77. 组合题目描述题解 216. 组合总和 III题目描述题解 17. 电话号码的字母组合题目描述题解 77. 组合 点此跳转题目链接 题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输…

python爬虫入门小案例

python爬虫 以下内容仅供学习交流,请勿用作其他用途,若涉及隐私和版权问题,请及时联系我删除 闲来无事,学了学爬虫小知识,适合入门,文笔拙劣,还望见谅 爬虫是什么: 爬取网页上的文字,图片,视频,音频 自动化操作浏览器,比如填写表单,打卡,提高工作效率爬虫的注意事项: 爬虫…

lua 游戏架构 之 游戏 AI (九)ai_mgr Ai管理

定义ai_mgr的类&#xff0c;用于管理游戏中实体的AI组件。 先定义 AI行为枚举和优先级&#xff1a; lua 游戏架构 之 游戏 AI &#xff08;八&#xff09;ai_tbl 行为和优先级-CSDN博客https://blog.csdn.net/heyuchang666/article/details/140712839?spm1001.2014.3001.55…

MySQL环境的配置文件json

突然了解到&#xff0c;使用json文件去进行环境的配置&#xff0c;这样修改参数的时候就只需要去改json文件中的内容&#xff0c;不需要去修改代码中的内容&#xff0c;其他人的MySQL和我的MySQL也不同&#xff0c;这时其他人只需要修改json文件中的内容&#xff0c;清晰明了&a…

基于微信小程序+SpringBoot+Vue的核酸检测服务系统(带1w+文档)

基于微信小程序SpringBootVue的核酸检测服务系统(带1w文档) 基于微信小程序SpringBootVue的核酸检测服务系统(带1w文档) 在目前的情况下&#xff0c;可以引进一款医院核酸检测服务系统这样的现代化管理工具&#xff0c;这个工具就是解决上述问题的最好的解决方案。它不仅可以实…

2024年开发者最爱用的Bug跟踪工具

国内外主流的10款BUG管理软件对比&#xff1a;PingCode、Worktile、禅道&#xff08;ZenTao&#xff09;、Bugzilla、Tapd、CODING、Teambition、Testin、Tower、乐道。 在软件开发的世界里&#xff0c;管理和跟踪Bug是一个让许多开发者头疼的问题。选择一个合适的Bug管理工具不…

C++题目_逃生路线总数(dfs)

题目描述 2021年夏天&#xff0c;LSH开开心心的骑着电动车出去玩&#xff0c;结果一不留神&#xff0c;他骑着电动车进入了一只恶犬的领地。恶犬发现它的领地被LSH侵犯了&#xff0c;立马去追LSH&#xff0c;准备咬他一大口。LSH慌忙逃窜&#xff0c;但是他的电动车电量即将耗…

电力电子中的电大、电小尺寸?

01 前言 大家好&#xff0c;这期我们聊一下电力电子中的电大尺寸和电小尺寸。对于大部分电力电子应用工程师来说&#xff0c;可能并不太清楚电尺寸的概念。因为要谈到电尺寸就要考虑电信号的传播速度&#xff0c;一般会在高频、超高频电路中有所涉及&#xff0c;而大部分硅基…

【优秀python系统毕设】基于Python flask的气象数据可视化系统设计与实现,有LSTM算法预测气温

第一章 绪论 1.1 研究背景 在当今信息爆炸的时代&#xff0c;气象数据作为重要的环境信息资源&#xff0c;扮演着关键的角色。然而&#xff0c;传统的气象数据呈现方式存在信息量庞大、难以理解的问题&#xff0c;限制了用户对气象信息的深入理解和利用。因此&#xff0c;基…

[算法题]非对称之美

题目链接: 非对称之美 题目要求求最长非回文子字符串的长度, 那么如果字符串本身不是回文串, 那么长度就是该字符串本身的长度: 如果字符串本身是一个回文串, 那么只需把该字符串去掉一个字母后, 该字符串就不是回文串了, 长度也就是原本的长度减 1, 即: 所以想要求最长非回文…

BCH码误码率ber性能仿真(MATLAB)

BCH码 不同于奇偶校验码只能检验数据传输是否出错&#xff0c;BCH码可以实现对数据的检验和纠错 BCH&#xff08;n&#xff0c;k&#xff09;中的n代表总码元&#xff0c;k代表有效码元&#xff0c;相应的n-k即代表纠错码元 本文着重比较分析BCH(255,207),BCH(255,131),BCH(255…

iOS 自定义 仿苹果地图 半屏滑动效果控件

前言 在前一篇文章AI编程探索- iOS 实现类似苹果地图 App 中的半屏拉起效果我们通过三方库实现了这个功能。可是我发现这个三方不能加阴影效果。也许是我不知道怎么加吧&#xff01;于是只有自己搞咯&#xff01; 拆解功能 这功能给人在感觉上&#xff0c;有点麻烦&#xff0…

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

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

【MySQL进阶之路 | 高级篇】MVCC三剑客:隐藏字段,Undo Log,ReadView

1. 再谈隔离级别 我们知道事务有四个隔离级别&#xff0c;可能存在三种并发问题&#xff1a; 在MySQL中&#xff0c;默认的隔离级别是可重复读&#xff0c;可以解决脏读和不可重复读的问题&#xff0c;如果仅从定义的角度来看&#xff0c;它并不能解决幻读问题。如果我们想要解…

如何用find命令按文件大小快速查找并美化输出显示

背景 在系统中使用find命令查找大于20MB的文件非常简单&#xff0c;但默认情况下&#xff0c;输出结果中只显示文件路径&#xff0c;而不显示文件大小。如下图所示&#xff1a; 如果输出中能够同时显示文件大小&#xff0c;并且对内容进行适当的着色&#xff0c;这将显著提高其…

“论软件测试中缺陷管理及其应用”写作框架,软考高级论文,系统架构设计师论文

原创范文 软件缺陷指的是计算机软件或程序中存在的某种破坏正常运行能力的问题、错误&#xff0c;或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。在目前的软件开发过程中&#xff0c;缺陷是不可避免的。软件测试是发现缺陷的主要手段&#xf…