【网络世界】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.作用(做什么?)网…

NestedScrollVew实现原理分析

NestedScrollView 是 Android 中的一个特殊滚动视图,它继承自 ScrollView,但添加了对嵌套滚动(nested scrolling)的支持。这使得 NestedScrollView 可以与其它支持嵌套滚动的视图(如 RecyclerView)协同工作…

从头开始微调Llama 3.1模型

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

链表的中间结点 - 力扣(LeetCode)C语言

876. 链表的中间结点 - 力扣(LeetCode)( 点击前面链接即可查看题目) /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* middleNode(struct ListNode* head) {struct Lis…

如何实现一个大模型在回答问题时同时提供相关内容链接

通义生成 为了让大模型在回答问题时能够提供相关内容链接,通常采用的方法是结合检索增强生成(Retrieval-Augmented Generation, RAG)的技术。这种方法可以让大模型在生成答案的同时,从外部知识源中检索相关信息,并将这…

SpringBoot知识笔记

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

状态模式与订单状态机的实现

状态模式 状态模式(State Design Pattern)是一种行为设计模式,用于在对象的内部状态改变时改变其行为。这种模式可以将状态的变化封装在状态对象中,使得对象在状态变化时不会影响到其他代码,提升了代码的灵活性和可维…

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

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

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

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

数据库之常用函数

目录 一、数值函数 1.求绝对值函数 2.求余函数 3.用于获取整数的函数 4.获取随机数的函数 5.四舍五入函数 6.截取小数函数 二、字符串函数 1.返回字符串长度和字符串中字符个数的函数 2.合并字符串的函数 3.替换字符串的函数 4.字母大小写转换函数 5.获取指定长度…

Webpack、Vite区别知多少?

前端的项目打包,我们常用的构建工具有Webpack和Vite,那么Webpack和Vite是两种不同的前端构建工具,那么你们又是否了解它们的区别呢?我们在做项目时要如何选择呢? 一、工具定义 1、Webpack:是一个强大的静态模块打包工…

用Java手写jvm之实现查找class

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

go语言与UPX

源自:压缩工具之upx_51CTO博客_za压缩工具 下面是直接copy的: 在golang项目中, 最终运行的是打包好的二进制文件,如何才能让这个文件尽可能的小呢? 1.编译阶段的参数处理 go build使用的是静态编译,会将程序的依赖一起打包,这…

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

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

【算法】二进制常用操作

二进制常用操作 求n的二进制中第k位数字: n > > k & 1 n>>k\& 1 n>>k&1​ lowbit(x)的用法:返回x中最后一个1, l o w b i t ( x ) x & ( − x ) lowbit(x)x\&(-x) lowbit(x)x&(−x)​ 输入一个 32 位整数&a…

java如何同时继承接口和抽象类

java中要同时继承接口和抽象,需要用到的语句是 class 类名 extends 抽象类名 implements 接口 示例代码如下 interface Animal02{public String Name"牧羊犬";public void shout();public void info(); } abstract class Action01{public abstract voi…

解锁Vue的潜力:封装递归组件的经验之谈(网站导航层架嵌套)

最近在使用BootstrapVue写一个网站(我也不知道为啥要用这个😂),使用到了NavBarDropDown等一些组件的组合,可以自动创建一个响应式的效果,还不错。But…,这个DropDown只支持到二级。有人2019年就在Github上提了issue- dropdown submenu并且作者…