http协议深度解析——网络时代的安全与效率(1)

2024-08-01 09:08:59 浏览数 (1)

写在前面:

哈喽大家好,我是网络豆一名云计算运维人员,作为一名运维人员对于网络协议方面的学习也尤为重要,本章文件将会给大家详细讲解http协议。了解http协议的工作原理与作用。

本章目的:

  • http 协议的版本
  • html 文本介绍,架构,生成方式
  • http 协议的报文
  • 请求报文格式介绍

一.http协议

1.http 协议介绍

http:Hyper Text Transfer Protocol 超文本传输协议,是互联网应用最为广泛的一种网络协议,

主要用于 Web 服务。通过计算机处理文本信息,格式为 HTML(Hyper Text Mark Language)

超文本标记语言来实现。

2.http 协议的版本

http 0.9:仅于用户传输 html 文档

http 1.0 :

1.引入了 MIME(Multipurpose Internet Mail Extesions)机制:多用途互联网邮件扩展,引 入这个技术之后,http 可以发送多媒体(比如视频、音频等)信息。此机制让 http 不在单单只支持 html 格式,还可以支持其他格式来进行发送了。

2.引入了 keep-alive 机制,支持持久连接的功能(但这个 keep-alive 原理是在首部添加了某个字段而形成的,并非原生就支持此功能)

3.引入支持缓存功能

http 1.1 :

支持更多的请求方法,更加精细的缓存控制,原生直接支持持久连接功能(presistent)。

http 2.0 :

提供了 HTTP 语义优化的传输,spdy : google 引入了的一个技术,能够加速 http 数据交互,尤其是使用 ssl 加速机制,但是 spdy 现在用的还不多。 目前常用的版本就是 http 1.0 版本和 http 1.1 版本。

3.html 文本介绍

HTML(HyperText Markup Language)即超文本标记语言,是一种用于创建网页和网络应用程序的标准标记语言。它不是一种编程语言,而是一种标记语言,用于描述网页内容的结构和呈现方式。HTML 文档由一系列的 HTML 元素组成,这些元素通过标签(tags)进行定义,告诉浏览器如何显示内容。

代码语言:javascript复制
<html>
 <head>
   <title>TITLE</title>
 </head>
   <body>
    <h1>H1</h1>
   <p></p>
   <h2>H2</h2>
  <p><a href="admin.html">ToGoogle</a> </p>
 </body>
</html>
(1)html 文档的生成方式

静态:

事先就编辑并定义完成的

动态:

通过编译语言编写的程序后输出 html 格式的结果

动态语言有:php,jsp,asp,.net

备注:这些脚本都必须有相应的解释器,比如说 php 需要有 php 解释器等等

(2)静态和动态的方式
静态

1、Web 服务器向内核注册 socket

2、客户端通过浏览器,向 Web 服务器发起 request 请求

3、Web 服务器收到客户端的 request 信息

4、如果用户请求的资源在服务器本地的话,http 服务会向系统内核申请调用

5、内核调用本地磁盘里的数据,并将数据发给 http 服务

6、http 将用户请求的资源通过 response 报文,最终响应给客户端


动态

与静态不同的是,如果用户请求的是动态内容,那么此时 http 服务会调用后端的解析器,由动态语言去处理用户的请求,如果需要请求数据的时候,会向内核申请调用,从而向磁盘中获取用户指定的数据,通过解释器运行,运行的结果通常会生成 html 格式的文件。然后构建成响应报文,最终发回给客户端。


4.http 协议的报文

HTTP 报文中存在着很多行的内容,一般是由 ASCII 码串组成,各字段长度是不确定的。 HTTP

的报文可分为两种:请求报文与响应报文。

1.request Message(请求报文)

客户端 -→ 服务器端

由客户端向服务器端发出请求,不同的网站用于请求不同的资源(html 文档)

2.response Message(响应报文)

服务器端 -→ 客户端

是服务器予以响应客户端的请求


(1)请求报文格式介绍

请求行 请求首部 空白行 请求实体

例如:

代码语言:javascript复制
<method> <request-URL> <version>
<HEADERS>
# 这里一定要是一个空白行
<entity-body>
1.请求行

请求方法字段<method> 请求 URL 字段<request-URL> HTTP 协议版本<version>组成,

用来标识客户端请求的资源时使用的请求方法,请求的资源,请求的协议版本是什么,它们

直接使用“空格”进行分隔!

代码语言:javascript复制
<method> 这次请求的方式是什么,也就是请求方法
<request-URL> 请求的是哪个资源,哪个 URL。可以是相对路径,如/images/log.jpg,
也可以是绝对路径,如 http://www.baidu.com/images.banner.jpg
<version> 请求的协议版本是什么,http 协议版本,格式 HTTP/<major>.<minor>,
例如:HTTP/1.0,HTTP/1.1

上图是用 wireshark 工具抓取 http 请求报文的显示结果。在首部后的“ rn ”表示一个回车和换行,以此将该首部与下一个首部隔开。

或者用 curl 命令获取 http 请求报文

2.请求首部

关键字 关键字的值组成 ,之间使用“:”进行分隔,格式 Name : Value ,请求首部的作用

是通过客户端将请求的相关内容告知服务器端,首部可以不止一个。

<HEADERS> 首部,首部可能不止一个。各种所可以使用的首部信息

3.空白行

请求首部之后会有一个空白行,通过发送回车字符和换行符,用于通知服务器端以下的内容将不会再出现请求首部的信息。

4.请求实体

你需要请求的内容到底是什么

<entity-body> 请求实体,你到底请求的内容是什么


0 人点赞