- **作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 **
- 公众号:网络豆云计算学堂
- 座右铭:低头赶路,敬事如仪
- 个人主页: 网络豆的主页****
写在前面:
** 哈喽大家好,我是网络豆一名云计算运维人员,作为一名运维人员对于网络协议方面的学习也尤为重要,本章文件将会给大家详细讲解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)进行定义,告诉浏览器如何显示内容。
<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)请求报文格式介绍 **
**请求行 + 请求首部 + 空白行 + 请求实体 **
例如:
<method> <request-URL> <version>
<HEADERS>
# 这里一定要是一个空白行
<entity-body>
**1.****请求行 **
由请求方法字段<method>+请求 URL 字段<request-URL>+**HTTP 协议版本<version>**组成,
用来标识客户端请求的资源时使用的请求方法,请求的资源,请求的协议版本是什么,它们
直接使用“空格”进行分隔!
<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 请求报文的显示结果。在首部后的“\r\n”表示一个回车和换行,以此将该首部与下一个首部隔开。
或者用 curl 命令获取 http 请求报文
**2.****请求首部 **
由关键字+关键字的值组成,之间使用“:”进行分隔,格式 Name:Value,请求首部的作用
是通过客户端将请求的相关内容告知服务器端,首部可以不止一个。
<HEADERS> 首部,首部可能不止一个。各种所可以使用的首部信息
**3.****空白行 **
请求首部之后会有一个空白行,通过发送回车字符和换行符,用于通知服务器端以下的内容将不会再出现请求首部的信息。
**4.****请求实体 **
你需要请求的内容到底是什么
<entity-body> 请求实体,你到底请求的内容是什么
敬请关注博主,我们将持续为您带来云计算行业及更多前沿技术的最新信息,助您把握技术动态,领先一步!
版权归原作者 网络豆 所有, 如有侵权,请联系我们删除。