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(超文本传输协议)是在万维网进行通信使用的协议方案,HTTP是应用层协议,

一HTTP概述

1.1Web客户端和服务器

在这里插入图片描述

1.2MIME类型

HTTP会给Web传输的对象打上MIME类型的数据格式标签
在这里插入图片描述
MIME类型是一种文本标记,表示一种主要的对象类型和特定的子类型,中间由一条斜杠分隔.

  • HTML格式文本文档由 text/html 类型标记
  • ASCLL文本文档由 text/plain 类型标记
  • GIF格式图片为 image/gif 类型
  • JPEG格式图片为 image/peg 类型

常见的MIME类型有数百个


1.3URI

统一资源标识符

请脑中联想URI就是身份证号码,它不会重复,可以根据URI找到这个资源

下图显示了URI是怎样指示HTTP协议去访问joes网站上的图片
在这里插入图片描述

1.4URL

统一资源定位符

动物住址协议://地球/中国/浙江省/杭州市/西湖区/某大学/14号宿舍楼/525号寝/张三.人

通过这种方式也可以定位到这个人

不论是定位的方式还是用编码的方式,我们都可以确定一个人,都是URI的实现,而URL减少用定位的方式实现了URI
URL起到了URI的作用,所以URL是URI的子集


1.5事务

一个HTTP事务由
一条(从客户端发给服务器的)请求命令和
一个(服务器返回给客户端的)响应结果组成.
这种通信通过 HTTP报文(HTP message)的格式化数据块进行的
在这里插入图片描述

图为: 一个HTTP事务


1.6方法

每条HTTP请求报文(即客户端给服务端的请求)都包含一个方法.
方法告诉服务端执行什么动作(获取一个Web页面,运行一个网关程序,删除一个文件等)
在这里插入图片描述

图为: HTTP方法


1.7状态码

每条HTTP响应报文返回时携带一个状态码
状态码是一个三位数字的代码,
在这里插入图片描述
伴随着每个数字状态码,HTTP还会发送一条解释性的"原因短句"文本
在这里插入图片描述

图为: 状态码及其"原因短句"


1.8报文

在这里插入图片描述

图为:请求报文 和 响应报文的格式

HTTP报文包括以下三部分:

  • 起始行
    在请求报文中用来说明要做什么,响应报文中说明出现了什么情况
  • 首部字段
    每个首部字段都包含一个名字和一个值,两者用冒号分隔,首部字段以一个空行结束
  • 主体
    主体包含了所用类型的数据…
    起始行和首部字段都是文本形式且都是结构化的,而主体可以包含任意的二进制数据(图片 视频 音轨等).当然,主体也可以包含文本

在这里插入图片描述

图为:http://www.joes-hardware.com/tools.html的 GET 事务实例

如上图
浏览器发送一条HTTP请求报文,这条请求的起始行中有一个GET命令,且本地资源为/tools.html.这条请求说明他使用的是1.0版本的HTTP协议.请求报文没有主体

服务器响应一条HTTP响应报文,这条报文响应包含了HTTP版本号(HTTP/1.0),一个成功状态码(200),一个描述性的原因短语言(OK),
以及一块响应首部字段,在所有内容后跟着包含了所请求文档的响应主体.
Content-Length 首部说明了响应主体的长度,
Content-Type 首部说明了文档的 MIME 类型.


1.9连接

报文通过传输控制协议(TCP)连接从一个地方搬移到赢一个地方

HTTP无需操心网络通信的具体细节;它把联网的细节都交给了通用,可靠地因特网传输协议TCP/IP:

TCP提供了

  • 无差别的数据传输;
  • 按序传输(数据总是按照发送的顺序到达);
  • 未分段的数据流(可以在任意时刻以任意大小将数据发送出去).

因特网自身就是基于TCP/IP的,
TCP/IP是全世界的计算机和网络设备常用的网络协议集,
只要建立了TCP连接,客户端和服务器之间的报文交换就

  1. 不会丢失
  2. 不会被破坏
  3. 不会在接收时出现错序

用网络术语说,
HTTP协议位于TCP的上层,HTTP使用TCP来传输其报文数据
TCP则位于IP的上层
在这里插入图片描述

图为: HTTP网络协议栈


1.10连接,IP地址及端口号

在HTTP客户端想服务器发送报文之前,
需要用 网络协议(Internet,IP)地址端口号在客户端和服务器之间建立一条TCP/IP连接

在TCP中 , 你需要知道服务器的IP地址,已经与服务器运行的特定软件相关的TCP端口号

URL是资源的地址 一起来看几个URL:

http:110.242.68.4:80/index.html
https://www.baidu.com:80/index.html
http://www.baidu.com/index.html

第一个URL使用了机器的IP地址,110.242.68.4以及端口号80.
第二个URL使用的是文本形式的域名,或者称为 主机名(www.baidu.com),主机名就是IP地址比较人性化
第三个URL没有端口号,HTTP的URL没有端口号时,可以假设默认端口号是80

有了 IP地址端口号,客户端就可以方便地通过TCP/IP进行通信
在这里插入图片描述

图为: 基本的浏览器连接处理

步骤如下:

  1. 浏览器从URL解析出服务器的主机名
  2. 浏览器将服务器主机名转换成服务器IP地址
  3. 浏览器将端口号(如果有的话)从URL解析出来
  4. 浏览器建立一条与Web服务器的TCP连接
  5. 浏览器向服务器发送一条HTTP请求报文
  6. 服务器向浏览器回送一条HTTP响应报文
  7. 关闭连接,浏览器显示文档

1.11协议版本

  • HTTP/1.0
    是第一个得到广泛使用的HTTP版本

  • HTTP/1.1
    这个版本是校正HTTP设计中的结构性缺陷,明确语义,引入重要的性能优化


1.12Web结构组件

  • 代理:位于客户端和服务器之间的HTTP中间实体
  • 缓存:就是HTTP的仓库,使常用页面的副本可以保持在离客户端更近的地方
  • 网关:连接其他应用程序的特殊Web服务器
  • 隧道:对HTTP通信报文进行盲转发的特殊代理
  • Agent代理:发起自动HTTP请求的半智能Web客户端

1.12.1 缓存
缓存(Web cache)是一种特殊的HTTP代理服务器,可以将经过代理传送的常用文档复制保存起来,下一次请求同一文档的请求就可以从缓存中读取
在这里插入图片描述

图为: 保存常用文档本地副本以提高性能

1.12.2 网关
网关(gateway)是一种特殊的服务器,作为其他服务器的中间实体使用,通常用于将HTTP流量转换成其他协议,客户端可能并不值得自己正在与一个网关进行通信.
在这里插入图片描述

图为: HTTP网关

1.12.3 隧道
隧道(tunnel)建立起来后,会在两条连接之间对原始数据进行盲转发的HTTP应用程序

隧道的常见用途是通过HTTP连接承载加密的安全套接字层(SSL,Secure Sockets Layer)流量,这样SSL流量就可以穿过只允许Web流量通过的防火墙了.

1.12.4 Agent代理
是代表用户发起HTTP请求的客户端程序
到目前为止,我们只提到一种HTTP Agent代理: Web浏览器
比如,有些自己会在Web上闲逛的自动用户Agent代理,可以在无人监视的情况下发布Http事务并获取内容,这些自动代理的名字通常都很生动,比如"“网络蜘蛛"或者"Web机器人”
在这里插入图片描述

图为: 自动搜索引擎"网络蜘蛛"好是Agent代理,可以从世界范围内获取Web页面


二URL与资源

2.1浏览因特网资源

URL实际上是URI的子集
URI是一个通过的概念,由两个主要的子集URL和URN构成,
URL是通过描述资源的位置来标识资源
URN是通过名字来识别资源,与资源所处的位置无关

HTTP规范将更通用的概念URI作为资源标识符,但实际上,HTTP只是处理URL.

URL分以下三部分:

  • 第一部分是 URL方案.方案告知Web客户端怎样访问资源
  • 第二部分是 服务器的位置
  • 第三部分是 资源路径,路径说明请求的是服务器上那个特定的本地资源
    在这里插入图片描述

图为: URL 是怎样与浏览器、客户端、服务器以及服务器文件系统中的位置进行关联的


2.2URL组件

URL最重要的3个部分是方案(scheme),主机(host),路径(path),
比如http://www.joes-hardware.com:80/index.html
方案是 http
主机是 www.joes-hardware.com
端口是 80
路径是 index.html
在这里插入图片描述
2.2.1 方案-----使用什么协议
方案实际上规定如何访问指定在资源的主要标识符,告诉解析URL的程序使用什么协议
在这里插入图片描述
在这里插入图片描述

2.2.2 主机和端口
主机:
要想在因特网上找到资源,应用程序要知道是哪台机器装载了资源,
端口:
以及在那台机器的什么地方可以找到能对目标资源进行访问的服务器。

2.2.3 用户名和密码
如下几个例子:

ftp://ftp.prep.ai.mit.edu/pub/gnu
ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu
ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
http://joe:joespasswd@www.joes-hardware.com/sales_info.txt

eg1:没有用户名或密码组件,只有标准的方案,主机,路径,如果应用程序使用的URL方案要求输入用户名和密码,但用户没有提供,它通常会插入一个默认的用户名和密码

eg2:显示了一个指定为anonymous的用户名,这个用户名与主机组件组合在一起,字符"@"将用户和密码组件与URL的其它部分分隔开来.

eg3:指定了用户名(anonymous)和密码(my_passwd),两者之间用字符":"分隔

2.2.4 路径
URL的路径组件说明资源位于服务器的什么位置
路径通常像一个分级的文件系统路径
比如:

http://www.joes-hardware.com:80/seasonal/index-fall.html

这个 URL 中的路径为 /seasonal/index-fall.html
每个路径都有自己的参数(param)组件

2.2.5 参数
很多协议还需要更多的信息才能工作
为了向应用程序提供他们所需的输入参数,以便正确地与服务器进行交互,URL中有一个参数组件
这个组件由字符":"将其与URL的其余部分分隔开,

比如:

http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true

这个例子中有2个路径段,hammers和index.html
hammers路径有参数sale,其值为false
index.html段有参数graphics,其值为true

2.2.6 查询
URL的查询组件
可以缩小所请求资源类型范围

http://www.joes-hardware.com/inventory-check.cgi?item=12731

字符"?" 右边的内容是新出现的,这部分被称为 查询(query)组件
URL的查询组件和表示网关资源的URL路径组件一起被发送给网关资源.
查询组件以一系列"名/值"对的形式出现,名值对之间用字符"&"分隔:

http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue
在这里插入图片描述

图为 : 客户端发送给网关的URL查询组件

这个例子中,查询组件由两个名/值对: item=12731和color=blue

2.2.7 片段

为了引用部分资源或资源的一个片段,URL支持使用片段(frag)组件来表示一个资源内部的片段
片段挂在URL的右手边,最前面有一个字符"#"

http://www.joes-hardware.com/tools.html#drills

在上面的;例子中 ,片段drills引用了/tools.html中的一部分,这部分的名字叫做drills
在这里插入图片描述

图为: 服务器处理的是整个对象,因此URL片段仅由客户端使用


2.3URL快捷方式

Web客户端可以使用多种URL快捷方式,相对URL是在某资源内部指定一个资源的便捷缩略方式
也就是用户输入URL的关键部分,由浏览器将其余部分填充

2.3.1 相对URL
相对URL是不完整的,要从相对URL中获取访问资源所需的全部信息,就必须相对于基础URL解析(base URL).

例如:
http://www.joes-hardware.com/tools.html
这个路径在HTML里可以这样写:
在这里插入图片描述
这个HTML文档有一个包含了URL ./hammers.html的超链接
这个 A标签里的超链接是不完整的,但实际上是个合法的相对URL

使用缩略形式的相对URL语法,编写者可以省略URL中的 方案,主机等一些组件
这些组件可以从他们所属资源的基础URL推导出来

再来一个例子:
基础URL为:
http://www.joes-hardware.com/tools.html
有了这个基础URL,我们可以知道资源名为
./hammers.html的方案为http,主机为 www.joes-hardware.com
下图对此进行了说明:
在这里插入图片描述

图为: 通过 基础URL推导 相对URL

2.3.2 自动扩展URL
有些浏览器在用户提交URL后,或者在用户输入时会尝试自动扩展URL.
即用户不需要输入完整的URL,因为浏览器会自动扩展

这些"自动扩展"特性有两个方面

  • 主机名扩展
    比如你在地址栏输入 baidui,浏览器会自动在主机名中插入www. 和.com

  • 历史扩展
    浏览器将以前用户访问过的URL历史存储起来,当你输入URL时和历史记录中的URL前缀进行匹配


2.4各种令人头疼的字符

2.4.1 URL字符集
大多是US-ASCII字符集

[2.4.2 URL编码机制]
base64


三HTTP报文

3.1报文流

HTTP报文是在HTTP应用程序间发送的数据块.

3.1.1 报文流入源端服务器
HTTP使用术语 流入(inbound)流出(outbound) 来描述 事务处理(teansaction) 的方向

报文流入源端服务器, 工作完成之后,会流回用户的 Agent代理
在这里插入图片描述

图为 : 报文 流入 源端服务器并流回 到客户端

3.1.2 报文向下游流动
HTTP报文像河水一样流动,不管是请求报文还是响应报文,
所有报文都向 下游(downstream) 流动
所有报文发送者都在接收者的 上游(upstream)

在下图中,
对于请求报文来说,代理1位于代理3的上游
对于响应报文来说,代理1位于代理3的下游
在这里插入图片描述

图为: 所有报文都向下流动


3.2报文的组成部分

HTTP报文是简单的格式化数据块
他们由三部分组成:
1.8 中有介绍


3.3方法

在这里插入图片描述
3.3.1安全方法
GET方法和HEAD方法都被认为是安全的
GET或HEAD的HTTP请求都不会产生什么动作(实际上,这是有Web开发者决定的)
如果是DELETE方法,则会对某条数据进行删除操作,即会在服务器上引发一些事件

3.3.2GET
GET请求服务器发送某个资源
在这里插入图片描述

图为: 浏览器发送GET方法 ,请求服务器资源

3.3.3HEAD
HEAD方法与GET方法的行为很类似,
HEAD的特点:

  • 在不获取资源的情况下了解资源的情况(比如,判断其类型)
  • 通过查看响应中的状态码,看某个对象是否存在
  • 通过查看首部,测试资源是否被修改

服务器开发者必须确保返回的首部与GET请求所返回的首部完全相同
遵循 HTTP/1.1 规范,就必须实现 HEAD 方法

在这里插入图片描述

图为: HEAD示例

3.3.4PUT
PUT方法会向服务器写入文档在这里插入图片描述

图为: PUT方法修改服务器资源

因为PUT允许用户对内容进行修改或存储,所以很多Web服务器都要求执行PUT前用密码登录

3.3.5POST

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 17:02:28  更:2021-08-12 17:04:19 
 
开发: 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 19:36:31-

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