【网络世界】HTTP协议

秋刀鱼的滋味@ 2024-08-20 16:07:02 阅读 93

目录

🌈前言🌈

📁 概念

📁 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♪(・ω・)ノ



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。