【Linux网络】应用层http协议&&cookie与session&&https协议

W...Y的主页 😊

代码仓库分享💕 


前言:上篇博客中我们已经认识了应用层,通过实现简易计算器,将ISO制定的七层网络协议的后三层进行了分层体现,自己制定了对应的协议进行网络传输。而今天我们学习一下应用层非常有名的协议HTTP协议。话不多说我们直接进入主题。

HTTP 历史及版本核心技术与时代背景 

HTTP(Hypertext Transfer Protocol,超文本传输协议)作为互联网中浏览器和服务
器间通信的基石,经历了从简单到复杂、从单一到多样的发展过程。以下将按照时间
顺序,介绍 HTTP 的主要版本、核心技术及其对应的时代背景。

HTTP/0.9

核心技术:
• 仅支持 GET 请求方法。
• 仅支持纯文本传输,主要是 HTML 格式。
• 无请求和响应头信息。
时代背景:
• 1991 年,HTTP/0.9 版本作为 HTTP 协议的最初版本,用于传输基本的超文本HTML 内容。
• 当时的互联网还处于起步阶段,网页内容相对简单,主要以文本为主。 

HTTP/1.0 

核心技术:
• 引入 POST 和 HEAD 请求方法。
• 请求和响应头信息,支持多种数据格式(MIME)。
• 支持缓存(cache)。
• 状态码(status code)、多字符集支持等。
时代背景:
• 1996 年,随着互联网的快速发展,网页内容逐渐丰富,HTTP/1.0 版本应运而生。
• 为了满足日益增长的网络应用需求,HTTP/1.0 增加了更多的功能和灵活性。
• 然而,HTTP/1.0 的工作方式是每次 TCP 连接只能发送一个请求,性能上存在一定局限。 

HTTP/1.1 

核心技术:
• 引入持久连接(persistent connection),支持管道化(pipelining)。
• 允许在单个 TCP 连接上进行多个请求和响应,提高了性能。
• 引入分块传输编码(chunked transfer encoding)。
• 支持 Host 头,允许在一个 IP 地址上部署多个 Web 站点。
时代背景:
• 1999 年,随着网页加载的外部资源越来越多,HTTP/1.0 的性能问题愈发突出。
• HTTP/1.1 通过引入持久连接和管道化等技术,有效提高了数据传输效率。
• 同时,互联网应用开始呈现出多元化、复杂化的趋势,HTTP/1.1 的出现满足了这些需求。 

HTTP/2.0 

核心技术:
• 多路复用(multiplexing),一个 TCP 连接允许多个 HTTP 请求。
• 二进制帧格式(binary framing),优化数据传输。
• 头部压缩(header compression),减少传输开销。
• 服务器推送(server push),提前发送资源到客户端。
时代背景:
• 2015 年,随着移动互联网的兴起和云计算技术的发展,网络应用对性能的要求越来越高。
• HTTP/2.0 通过多路复用、二进制帧格式等技术,显著提高了数据传输效率和网络性能。
• 同时,HTTP/2.0 还支持加密传输(HTTPS),提高了数据传输的安全性。 

HTTP/3.0 

核心技术:
• 使用 QUIC 协议替代 TCP 协议,基于 UDP 构建的多路复用传输协议。
• 减少了 TCP 三次握手及 TLS 握手时间,提高了连接建立速度。
• 解决了 TCP 中的线头阻塞问题,提高了数据传输效率。
时代背景:
• 2022 年,随着 5G、物联网等技术的快速发展,网络应用对实时性、可靠性的要求越来越高。
• HTTP/3.0 通过使用 QUIC 协议,提高了连接建立速度和数据传输效率,满足了这些需求。
• 同时,HTTP/3.0 还支持加密传输(HTTPS),保证了数据传输的安全性。 

 HTTP 协议

虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。
在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如 HTML 文档)。
HTTP 协议是客户端与服务器之间通信的基础。客户端通过 HTTP 协议向服务器发送请求,服务器收到请求后处理并返回响应。HTTP 协议是一个无连接、无状态的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。

认识 URL 

平时我们俗称的 "网址" 其实就是说的URL,也叫做统一资源定位符。

1.首先我们的协议方案名表示我们本次所使用的协议具体内容。
一般常见的协议方案名有:

  1. HTTP (HyperText Transfer Protocol):超文本传输协议,用于从Web服务器传输超文本到本地浏览器。

  2. HTTPS (HTTP Secure):安全超文本传输协议,是HTTP协议的安全版本,通过SSL/TLS提供加密传输。

  3. FTP (File Transfer Protocol):文件传输协议,用于在网络上的计算机之间传输文件。

  4. SFTP (Secure File Transfer Protocol):安全文件传输协议,是FTP的安全性加强版本,使用SSH进行加密。

  5. SMTP (Simple Mail Transfer Protocol):简单邮件传输协议,用于发送电子邮件。

  6. POP3 (Post Office Protocol version 3):邮局协议第三版,用于接收电子邮件。

  7. IMAP (Internet Message Access Protocol):互联网消息访问协议,用于访问和管理电子邮件。

  8. SSH (Secure Shell):安全外壳协议,用于安全地访问远程计算机。

  9. Telnet:一种网络协议,用于远程登录到服务器并执行命令,但由于安全问题,已逐渐被SSH所取代。

  10. DNS (Domain Name System):域名系统,将域名转换为IP地址。

  11. DHCP (Dynamic Host Configuration Protocol):动态主机配置协议,用于自动分配IP地址给网络中的设备。

  12. SNMP (Simple Network Management Protocol):简单网络管理协议,用于网络管理。

  13. LDAP (Lightweight Directory Access Protocol):轻量级目录访问协议,用于访问和维护分布式目录信息服务。

  14. RTP (Real-time Transport Protocol):实时传输协议,用于传输音频和视频数据。

  15. RTSP (Real Time Streaming Protocol):实时流媒体协议,用于控制流媒体服务器中的会话。

  16. XMLRPC (XML Remote Procedure Call):XML远程过程调用,一种使用XML编码的RPC协议。

  17. JSON-RPC (JSON Remote Procedure Call):JSON远程过程调用,一种使用JSON格式的数据交换协议。

  18. SOAP (Simple Object Access Protocol):简单对象访问协议,一种基于XML的、用于网络服务的协议。

  19. BGP (Border Gateway Protocol):边界网关协议,用于互联网上进行网络之间的路由。

  20. NTP (Network Time Protocol):网络时间协议,用于同步网络设备的时钟。

2.登录信息
在这种方式中,用户名和密码被编码并附加到URL中,以供访问受保护的资源。以下是登录信息在URL 。处于安全考虑用户名和密码在URL中是明文传输,可能被网络监听者截获,所以现代Web应用通常会避免在URL中直接传递登录信息,而是使用更为安全的认证机制。

3.服务器地址

也就是我们所说的ip(域名),这样可以准确的找到我们的服务器来获取资源。例如www.baidu.com等等都属于服务器地址。

4.服务器端口号

我们在socket编程中使用listen进行监听时需要绑定对应的端口号,如果服务器监听的不是默认端口(如HTTP的80或HTTPS的443),则需要指定端口号。

常见的知名端口号:

  1. HTTP - 80:用于Web服务器,传输超文本的协议。
  2. HTTPS - 443:HTTP的安全版本,通过SSL/TLS加密传输。
  3. FTP - 21:文件传输协议,用于文件的上传和下载。
  4. SSH - 22:安全外壳协议,用于安全远程登录和其他安全网络服务。
  5. Telnet - 23:远程登录服务,已逐渐被SSH取代。
  6. SMTP - 25:简单邮件传输协议,用于发送电子邮件。
  7. POP3 - 110:邮局协议第三版,用于接收电子邮件。
  8. IMAP - 143:互联网消息访问协议,用于访问和管理电子邮件。
  9. LDAP - 389:轻量级目录访问协议,用于访问和维护分布式目录信息。

5.带层次的文件路径

http超文本传输协议就是为了拿取资源,而资源全部都在服务器中。我们想要确定一个资源首先就要确定其IP+port找到服务器唯一进程,再通过文件路径找到具体的哪一个资源。所以我们就要提供唯一路径来获取资源。

 6.查询字符串

用于提供附加参数,用?开始,后面跟着参数名和值,多个参数用&分隔。查询字符串的内容通常由键值对组成,每个键值对用等号=连接。

查询字符串的作用:

  1. 数据传递:在表单提交时,将表单中的数据作为查询字符串附加在URL后,以便发送到服务器。

  2. 过滤和排序:在API请求中,查询字符串用于指定过滤条件、排序规则或搜索关键字。

  3. 用户偏好设置:保存用户的偏好设置或配置,例如主题、语言或布局。

  4. 状态信息:传递状态信息或标识,如会话标识、用户ID或访问令牌。

  5. 页面导航:在某些单页面应用(SPA)中,查询字符串用于在不重新加载页面的情况下传递状态或导航信息。

  6. 跟踪和分析:包含跟踪参数,用于网站分析或广告跟踪。

  7. 重定向和链接管理:在重定向URL或管理链接时,使用查询字符串传递额外信息。

 比如我们在百度中搜索CSDN,其中查询字符串中就有一个wd = cddn的键值对。

7.片段标识符:它在URL的末尾,跟在井号(#)后面。片段标识符用于指向资源内部的特定部分,这个资源可以是HTML页面、PDF文件、或者其他类型的文档。

主要用途:

  1. 页面内导航:在HTML文档中,片段标识符可以用来链接到页面内的一个特定部分,如一个章节、图片、表格或脚注。

  2. 滚动位置:当用户点击包含片段标识符的链接时,浏览器会滚动到文档中相应的位置。

  3. 用户界面更新:在单页面应用(SPA)中,片段标识符可以用来更新页面的UI组件,而无需重新加载整个页面。

  4. 持久链接:创建指向页面特定部分的持久链接,使得用户可以书签或分享这些链接。

  5. 内容锚点:在文档中,片段标识符可以作为内容的锚点,用于引用或注释。

  6. 避免页面刷新:在动态内容加载的情况下,使用片段标识符可以更新页面的特定部分而避免整个页面的刷新。

  7. 跟踪和分析:网站分析工具可能使用片段标识符来跟踪用户在页面上的行为。

  8. 状态恢复:在某些应用中,片段标识符可以用于保存和恢复页面的状态。

 urlenco

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W…Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值