IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络应用层(一):HTTP协议详解 -> 正文阅读

[网络协议]计算机网络应用层(一):HTTP协议详解

前言

本博客参考内容来自**《计算机网络自顶向下方法》**与网络博客总结

HTTP概况

Web的应用层协议为HTTP协议(超文本传输协议),是web的核心。
HTTP由两个程序实现:用户程序、服务器程序。

基本Web术语

  • Web页面:Web页面(文档)由对象组成。一个对象只是一个文件,比如HTML文件,JPEG文件等。多数Web页面含有一个HTML页面和多个引用对象。
  • Web浏览器:实现HTTP的客户端。
  • Web服务器:实现HTTP的服务端,存储Web对象,每个对象由URL寻址。
  • 往返时间(Round-Trip Time,RTT):指一个短分组从客户到服务器然后再返回客户所花费的时间。包括分组传播时延,分组在中间路由器和交换机上的排队时延以及分组处理时延。

HTTP使用TCP作为其支撑运输协议,服务器向客户发送被请求的文件,不存储任何有关用户的信息,则HTTP是一个无状态协议

持续连接与非持续连接

  • 非持续连接:每个请求/响应对经过一个新的TCP单独发送。
  • 持续连接:每个请求/相应对通过同一个TCP发送。

非持续连接的HTTP

在HTTP1.0中,默认非持续连接。我们可以知道在进行HTTP连接之前,我们要先建立TCP连接,建立TCP连接耗时一个RTT,并且建立一个HTTP耗时一个RTT。因此一次请求/响应对所花费的时间为2*RTT。

缺点:

  • 必须为每一个请求对象建立和维护一个全新的连接,需要在客户和服务器中都分配TCP缓冲区和保持TCP变量,为服务器带来严重负担。
  • 一次HTTP请求需要两倍RTT时间。

持续连接的HTTP

在HTTP1.1中,默认HTTP为持续连接。服务器在发送响应后保持TCP打开,此后相同的客户和服务器之间后续请求和响应可以通过同一个TCP进行传输。

HTTP报文格式

HTTP报文分为两种:请求报文与响应报文

请求报文

HTTP请求报文
HTTP请求报文的第一行为请求行,后续的行称为首部行
请求行分为三个字段:

  1. 方法字段
  2. URL字段
  3. HTTP版本字段

方法字段有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT八种。

响应报文

响应报文分为三个部分:初始状态行、首部行、实体类。
实体行是其报文主要部分,包含请求本身。
状态行有三个字段:HTTP协议版本、响应码、响应状态信息。

响应报文
可以看到,其实除了状态行与请求不同以外,其他的都与请求报文相同。
在开发过程中,常见的HTTP响应报文状态码有

  1. 200 OK ,请求成功
  2. 400 Bad Request,这是开发过程中经常遇到的bug,在平时的SpringBoot编码中,一般是请求参数写错了。在HTTP中,指示该请求无法被服务器理解。
  3. 404 Not Found,找不到资源。

用户与服务器的交互

我们刚刚提到了,HTTP是一种无状态协议,他并没有办法保留用户状态。但是有的时候,一些网站希望服务器能够记住客户,因此诞生了Cookie技术。

Cookie技术有四个组件:

  1. 在HTTP响应报文中的一个cookie首部行;
  2. 在HTTP请求报文中的一个cookie首部行;
  3. 在用户端系统中保留一个cookie文件,并且由用户浏览器进行管理;
  4. 位于web沾点的一个后端数据库。

相当于整个请求过程中所有状态都进行了保存。
在我所写的项目中,使用到了JWT生成Token进行单点登录,将Token保存在Cookie或者LocalStorage中,这样就保存了用户响应的状态。
但是Cookie技术一直都存在隐私泄露等各种问题。

Web缓存技术

缓存技术是计算机中常用的以空间换时间的技术,其思路其实非常简单,在客户与服务器之间加入一台中间代理服务器。

假设浏览器发起一个请求,其将会按照下列步骤运行:

  1. 浏览器先创建一个倒Web缓冲器的TCP连接,向Web缓冲器中的对象发送一个请求。
  2. Web缓冲器检查是否存储了对象副本,若有那么Web缓存器向客户浏览器用HTTP响应报文返回对象。
  3. 若没有该对象,Web缓存器打开一个与该对象的初始服务器的TCP连接。收到请求后,初始服务器向Web缓冲器发送具有相同对象的HTTP响应。
  4. Web缓冲器在接收到初始服务器的对象之后,在本地存储一个副本, 并向客户浏览器发送带有对象的响应报文。

条件GET方法

相信大家看到这个Web缓存技术的流程之后可以发现,他只是保存了副本,但是并没有更新副本的操作,也就是说你不知道他是否已经是过期的资源。

条件GET方法步骤如下:

  1. Web服务器向Web缓冲器发送一个带有Last-Modified的字段的响应报文,该字段映射该对象最后一次修改的时间.
  2. 在一段时间后,缓冲器发送一个条件GET执行检查,该请求带有If-modified-since字段,该字段为Last-Modified保存的时间.
  3. 假设没有修改过,则Web服务器向缓冲器发送一个带空实体类的响应.,并且状态码为304.

总结

通过这篇博客HTTP的基础内容便是讲完了,HTTP是基于请求/响应模式的协议,并且是一种无状态协议。
但是由于某些应用想要基于某些原因记录用户,那么便产生了Cookie技术,Cookie技术可以保存用户的部分信息。
又基于以空间换时间的思想,增加了Web缓存,并且用条件Get方法来避免缓存主存不一致性问题。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 12:17:20  更:2021-07-17 12:18:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:51:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码