第二十六节 http协议原理

标签(空格分隔): Linux实战教学笔记-陈思齐

---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处,作者信息和本声明。否则将追究法律责任。http://www.cnblogs.com/chensiqiqi/


目录

第1章 Web服务基础

1.1 http服务重要基础

1.1.1 用户访问网站基本流程

  • 我们每天都会使用Web客户端上网浏览网页。最常见的Web客户端就是Web浏览器,如通用的微软Internet Explorer(IE)以及技术人员偏爱的火狐浏览器,谷歌浏览器等。当我们在Web浏览器里输入网站地址(例如:www.baidu.com)时,很快就会看到网站的内容。这看起来很神奇的背后,到底是怎样的实现流程呢?也许普通的上网者无需关注,但作为一个IT技术人员,特别是合格的Linux运维人员,就需要清晰的掌握了。

  • 下面就给大家介绍从客户端用户在Web浏览器里输入网站地址,到看到网站内容的完整访问流程。

  • [x] 第一步:客户端用户从浏览器里输入www.baidu.com网站地址,回车后,系统首先会查找系统本地的DNS缓存及hosts文件信息,查找是否存在www.baidu.com域名对应的IP解析记录,如果有就直接获取IP地址,然后去访问这个IP地址对应域名www.baidu.com的服务器,一般第一次请求时,DNS缓存是没有解析记录的,而hosts多在内部临时测试时使用。

  • [x] 第二步:如果客户端本地hosts及DNS缓存及hosts文件没有www.baidu.com域名对应的解析记录,那么,系统会把浏览器的解析请求发送给客户端本地设置的DNS服务器地址(通常称此DNS为LDNS,即Local DNS)解析,如果LDNS服务器的本地缓存有对应的解析记录就会直接返回IP地址给客户端,如果没有,则LDNS会负责继续请求其他的DNS服务器。

  • [x] 第三步:LDNS会从DNS系统的(.)开始请求www.baidu.com域名的解析,针对各个层级的DNS服务器系统进行一系列的查找,最终会查找到baidu.com域名对应的授权DNS服务器,而这个授权DNS服务器正是企业购买域名时用于管理域名解析的服务器,这个授权服务器会有www.baidu.com对应的IP解析记录,如果此时没有,就表示企业的域名管理人员没有为www.baidu.com域名做解析设置,即网站还没架设好。

  • [x] 第四步:baidu.com域名的授权DNS服务器会把www.baidu.com对应的最终IP解析记录发给LDNS。

  • [x] 第五步:LDNS把收到的来自授权DNS服务器www.baidu.com对应的IP解析记录发给客户端浏览器,并且再LDNS把本地域名和IP的对应解析缓存起来,以便下一次更快的返回相同解析请求的记录,这些缓存记录在指定的时间(DNS TTL值控制)内不会过期。

  • [x] 第六步:客户端浏览器获取到了www.etiantian.org的对应IP地址,接下来,浏览器会请求获得的IP地址对应的网站服务器,网站服务器接收到客户端的请求并响应处理(此处的处理可能是数百台集群的服务器系统,也可能是一台云主机),将客户请求的内容返回给客户端浏览器,至此,一次访问浏览网页的完整过程就完成了。

提示:

上述仅仅是客户端用户第一次访问网站的基本过程,连续访问后,系统本地和LDNS层级都会有缓存记录,再访问时流程就会有些变化,会直接取本地缓存记录,这样访问过程就很快了。在上述整个访问流程里,包含了DNS的解析流程以及HTTP协议的通信原理等重要的技术点。

1.1.2 DNS系统解析基本流程

  • 了解完用户访问网站的基本流程后,再来了解下DNS解析的基本流程,这是企业针对运维岗位进行招聘时经常会面试的问题,因此,必须要熟练掌握了。

  • DNS,全称Domain Name System/Serve,它在一个网站运行中起来了至关重要的作用,它的主要作用是负责把网站域名解析为对应的IP地址,例如:把www.baidu.com解析为对应的IP地址记录如1.1.1.1,这个从域名到IP的解析过程,称作A记录,即Address Record。

  • DNS系统除了负责这个最重要的A记录解析外,还有很多的功能。例如:

    • 设置CNAME别名记录,这个别名解析功能常被CDN加速服务商应用。
    • 设置MX邮件记录,这个MX记录功能,在购买或搭建邮件服务时会被用到。
    • 设置PTR记录,反向解析,即把IP地址解析为对应的域名,和A记录的解析相反,邮件服务等业务中会用到。
  • DNS 系统的架构类似于一颗倒挂着的树(和Linux系统目录结构类似),它的顶点也是根("."),只不过这个根是用点(.)来表示的,不是目录的根斜线(/)。

DNS解析原理流程

(1)DNS解析流程说明

  • 在“用户访问网站基本流程”一节,我们了解了用户访问网站的基本实现过程,那么客户端是怎样一步步通过各个层级的DNS,获取到域名对应的IP的呢?这里给大家做一个较为详细的说明。
  • DNS的解析流程实际上就是从用户在客户端浏览器中输入网站地址并按回车开始的,一直持续到获取域名对应的IP,整个过程可分为如下几个步骤。
  • [x] 第一步:客户端用户从浏览器里输入www.baidu.com网站地址后回车,系统首先会查找系统本地的DNS缓存及hosts文件信息,确定是否存在www.baidu.com域名对应的IP解析记录,如果有就直接获取到IP地址,然后去访问这个IP地址对应的www.baidu.com域名的服务器,一般第一次请求时,DNS缓存是没有解析记录的,而hosts多为内部临时测试使用。
  • [x] 第二步:如果客户端DNS缓存及本地hosts文件没有www.baidu.com域名对应的解析记录,那么,系统会把浏览器的解析请求发送给在客户端本地设置的DNS服务器地址(通常称此DNS为LDNS,即:Local DNS)解析,如果LDNS服务器的本地缓存有对应的解析记录就会直接返回IP地址给客户端:如果没有,则LDNS会负责继续请求其他的DNS服务器。
  • [x] 第三步:LDNS会从DNS系统的(.)根开始请求www.baidu.com域名的解析,根DNS服务器在全球一共有13台,根服务器下面是没有www.baidu.com域名解析记录的,但是根下面有www.baidu.com对应的顶级域.org的解析记录,因此,根会把.org对应的DNS服务器地址返回给LDNS。
  • [x] 第四步:LDNS获取到.org对应的DNS服务器地址后,就会去.org服务器请求www.baidu.com域名的解析,而.org服务器下面也没有www.baidu.com域名对应的解析记录,但是有baidu.com域名的解析记录,因此,.org服务器会把baidu.com对应的DNS服务器地址返回给LDNS
  • [x] 第五步:同理,LDNS获取到baidu.com对应的DNS服务器地址后,就会去baidu.org服务器请求www.baidu.com域名的解析,baidu.com域名对应的DNS服务器是该域名的授权DNS服务器,这个DNS服务器正是企业购买域名时管理解析所在的服务器(也可能是自建的授权DNS服务器),这个服务器会有www.baidu.com对应的IP解析记录,如果此时没有,就表示企业的域名人员没有为www.baidu.com域名做解析,即网站还没架设好。
  • [x] 第六步:baidu.com域名DNS服务器会把www.baidu.com对应的IP解析记录发给LDNS
  • [x] 第七步:LDNS把收到的来自授权DNS服务器www.baidu.com对应的IP解析记录发给客户端浏览器,并且LDNS会把本地域名和IP的对应解析记录缓存起来,以便下一次更快的返回相同解析请求的记录。至此,整个DNS的解析流程就完成了。

(2)DNS解析流程图

1.2 HTTP协议

1.2.1 HTTP协议简介

  • HTTP协议,全称HyperText Transfer Protocol,中文名为超文本传输协议,是互联网中最常用的一种网络协议。HTTP的重要应用之一是WWW服务。设计HTTP协议最初目的就是提供一种发布和接收HTML(一种页面标记语言)页面的方法(请求返回)。
  • HTTP协议是互联网上常用的通信协议之一。它有很多的应用,但最流行的就是用于Web浏览器和Web服务器之间的通信,即WWW应用或称Web应用。
  • WWW,全称World Wide Web,常称为Web,中文译为“万维网”。它是目前互联网上最受用户欢迎的信息服务形式。HTTP协议的WWW服务应用的默认端口为80(端口的概念),另外的一个加密的WWW服务应用https的默认端口为443,主要用于网银,支付等和钱相关的业务。当今,HTTP服务,WWW服务,Web服务三者的概念已经混淆了,都是指当下最常见的网站服务应用。

1.2.2 常见的HTTP请求方法

HTTP方法 作用描述
GET 客户端请求指定资源信息,服务器返回指定资源
HEAD 只请求响应报文中的HTTP首部
POST 将客户端的数据提交到服务器,例:注册表单
PUT 从客户端向服务器传送的数据取代指定的文档内容
DELETE 请求服务器删除Request-URI所标识的资源
MOVE 请求服务器将制定的页面移至另一个网络地址

1.2.3 HTTP状态码

  • HTTP状态码(HTTP Status Code)是用来表示Web服务器响应http请求状态的数字代码。每当Web客户端向Web服务器发送一个HTTP请求时,Web服务器都会返回一个状态响应代码。这个状态码是一个三位数字代码,作用是告知Web客户端此次的请求是否成功,或者是否要采取其他的动作方式。
  • HTTP协议1.1版本中的状态吗可以分为五大类,如下表:
状态码范围 作用描述
100-199 用于指定客户端相应的某些动作
200-299 用于表示请求成功
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息
400-499 用于指出客户端的错误
500-599 用于指出服务器端的错误

提示:

http响应的状态码种类很多,但是在实际工作场景中,经常遇到的状态码却不多,我把生产场景常见的重要状态码及对应的作用整理为下表。

生产场景常见的状态吗及其对应的作用

状态代码 详细描述说明
200~OK 服务器成功返回网页,这是成功的http请求,返回的标准状态码
301-Moved Permanently 永久跳转,所有请求的网页将永久跳转到被设定的新的位置,例如:从baidu.com跳转到www.baidu.com
403-Forbidden 禁止访问,这个请求是合法的,但是服务器端因为匹配了预先设置的规则而拒绝响应客户端的请求,此类问题一般为服务器或服务权限配置不当所致。
404-Not Found 服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源导致
500-Internal Server Error 内部服务器错误,服务器遇到了意料不到的情况,不能完成客户的请求。这是一个较为笼统地报错,一般为服务器的设置或者内部程序问题导致。例如SElinux开启,而又没有为http设置规则许可,客户端访问就是500
502-Bad Gateway 坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成响应网关服务器。一般为反向代理服务器下面的节点出问题导致。
503-Service Unavailable 服务当前不可用,可能因为服务器超载或停机维护导致,或者是反向代理服务器后面没有可以提供服务的节点
504-Gateway Timeout 网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求,一般是服务器过载导致没有在指定的时间内返回数据给前端代理服务器。

1.2.4 HTTP响应报文介绍

HTTP响应报文由起始行,响应头部,空行和响应报文主体几个部分组成,和HTTP请求报文格式类似。报文如下表:

报文格式 报文信息
起始行 协议及版本号 数字状态码 状态信息
响应头部 字段1:值1 字段2:值2
空行 空白内容
响应报文主体 就是html的网页

下面对响应报文的每个部分逐一阐述:

(1)起始行

响应报文的起始行,也叫状态行,用来说明服务器响应客户端请求的状况。一般为协议及版本号,数字状态码,状态情况。例如:HTTP/1.1 200 OK

(2)响应头部

和请求报文类似,起始行的后面一般有若干个头部字段。每个头部字段都包含一个名字和一个值,两者之间用冒号分隔。头部结尾也是以一个空行结束。常见的头部信息有:

(3)空行

最后一个响应头部信息之后是一个空行,发送回车符和换行符,通知客户端空行下文无头部信息。

(4)响应报文主体

响应报文主体中装载了要返回给客户端的数据。这些数据可以是文本,也可以是二进制的(图片,视频)。

1.2.5 HTTP协议原理及重点分析

回顾:数据包,传输过程

HTTP协议属于OSI模型中的第七层应用层协议,HTTP协议的重要应用就是WWW服务应用,下面就以WWW服务应用为例介绍HTTP协议的通信原理了,HTTP协议进行通信时,需要有客户端(即终端用户)和服务端(即Web服务器),在Web客户端向Web服务器发送请求报文之前,先要通过TCP/IP协议在Web客户端和服务器之间建立一个TCP/IP连接。整个http协议请求的工作流程如下:

1)终端客户在Web浏览器地址栏输入访问地址http://www.baidu.com

2)Web浏览器请求DNS服务器把域名www.baidu.com转换成Web服务器的IP地址,此处的解析过程就是DNS解析的原理流程,前面已经讲过了,此处不再叙述。

3)Web浏览器将端口号(默认80)从访问地址(URL)中解析出来。

4)Web浏览器通过解析后的IP地址及端口号于Web服务器之间建立一条TCP连接

5)建立TCP连接后,Web浏览器向Web服务器发送一条HTTP请求报文,请求报文内容格式及信息细节前面已经讲过了,此处不在叙述。

6)Web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文,响应报文内容格式及信息细节前文也已经讲过了,此处不在叙述。

7)Web服务器关闭http连接,关闭TCP连接,Web浏览器显示访问的网站内容到屏幕。

上述就是HTTP协议通信原理过程,整个通信原理的重要知识点有:

  • [x] 用户访问网站的流程
  • [x] DNS解析流程细节
  • [x] 建立TCP连接过程(TCP/IP三次握手原理知识)(11种状态)
  • [x] 发送HTTP报文及HTTP请求报文内容细节。
  • [x] Web服务器响应客户端请求处理细节(网站集群架构细节)
  • [x] 响应HTTP报文及HTTP响应报文的细节
  • [x] 关闭TCP连接,涉及TCP/IP协议四次挥手原理

事实上,DNS解析原理,http协议原理,tcp/ip协议原理都是高薪面试的重点,是高级运维必备知识,这里对其中的重要知识点进行汇总,如下:

  • [x] http协议位于OSI模型中第7层应用层
  • [x] http协议的重要应用是www服务。
  • [x] 用户上网流程,DNS解析原理流程
  • [x] DNS解析获取的IP后,建立TCP连接,然后发送http请求细节和服务器响应细节。
  • [x] HTTP请求报文与HTTP响应报文知识
  • [x] 到达HTTP服务后请求后端集群节点流程为Nginix-->fastcgi-->PHP-->(数据库,存储等)
  • [x] TCP/IP协议三次握手和四次挥手原理。

1.3 HTTP资源

1.3.1 媒体类型

  • 互联网上的数据有很多不同的数据类型,Web服务器会把通过Web传输的每个对象都打上名为MIME类型(MIME Type)的数据格式标签。最初涉及MIME(Multipurpose Internet Mail Extension 多用途因特网邮件扩展)是为了解决在不同的电子邮件系统之间搬移报文时存在的问题。MIME在电子邮件系统中工作的非常好,后来,HTTP也支持了这个功能,用它来把数据描述并标记不同的数据内容类型。
  • 当Web服务器响应HTTP请求时,会为每一个HTTP对象数据加一个MIME类型,当Web浏览器获取到服务器返回的对象时,会去查看相关的MIME类型,进行相应处理。
  • MIME类型存在于HTTP响应豹纹的响应头部信息里,它是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。
MIME类型 文件类型
text/html html htm shtml文本类型
text/css css文本类型
text/xml xml文本类型
image/gif gif图像类型
image/jpeg jpeg jpg图像类型
application/javascript js文本类型
text/plain txt文本类型
application/json json文本类型
text.plain txt文本类型
application/json json文本类型
video/mp4 mp4视频类型
video/quicktime mov视频类型
video/x-flv flv视频类型
video/x-ms-wmv wmv视频类型
video/x-msvideo avi视频类型

可以从www的重要服务软件Nginx的配置文件conf目录下,查看其支持的媒体(MIME)类型,相关命令及内容为:

[root@chensiqi conf]# head -10 mime.types

types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
以下内容省略....

1.3.2 URL介绍

URL,全称Uniform Resource Location,中文翻译为统一资源定位符,也被称为网页地址(网址)。如同在网络上的门牌,它是因特网上标准的资源唯一地址。通俗地说,URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户端和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件,服务器的地址和目录等。严格的说,每个URL都是一个URI,它标识一个互联网资源,并指定对其进行操作或取得该资源的方法。

URL的格式由下列三部分组成:

  • [x] 第一部分是协议,例如:http
  • [x] 第二部分是主机资源服务器IP地址或域名(端口号),例如:www.baidu.com
  • [x] 第三部分是主机资源的具体地址,如目录和文件名等,例如:chensiqi/index.html

提示:

第一部分和第二部分之间用“

Linux实战教学笔记26:http协议原理的更多相关文章

  1. Linux实战教学笔记24:SSH连接原理及ssh-key

    目录 第二十四节 SSH连接原理及ssh-key讲解 第1章 SSH服务 1.1 ssh介绍 1.2 知识小结 第2章 ssh结构 2.1 SSH加密技术 第3章 ssh服务认证类型 3.1 基于口令 ...

  2. Linux实战教学笔记

    Linux实战教学笔记01:计算机硬件组成与基本原理 Linux实战教学笔记02:计算机系统硬件核心知识 Linux实战教学笔记03:操作系统发展历程及系统版本选择 Linux实战教学笔记04:Lin ...

  3. Linux实战教学笔记15:磁盘原理

    第十五节 磁盘原理 标签(空格分隔): Linux实战教学笔记 1,知识扩展 非脚本方式的一条命令搞定批量创建用户并设置随机10位字母数字组合密码. 1.1 sed的高级用法 [root@chensi ...

  4. Linux实战教学笔记16:磁盘原理

    第十五节 磁盘原理 标签(空格分隔): Linux实战教学笔记 1,知识扩展 非脚本方式的一条命令搞定批量创建用户并设置随机10位字母数字组合密码. 1.1 sed的高级用法 [root@chensi ...

  5. Linux实战教学笔记21:Rsync数据同步工具

    第二十一节 Rsync数据同步工具 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载 ...

  6. Linux实战教学笔记02:计算机系统硬件核心知识

    标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 互联网企业常见服务器介绍 1.1 互联网公司服务器品牌 - DELL(大多数公司,常用) - HP - IBM(百度在用) 浪潮 联想 航天联 ...

  7. Linux实战教学笔记14:用户管理初级(下)

    第十四节 用户管理初级(下) 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,用户查询相关命令id,finger,users,w,who,last,lastlog,gr ...

  8. Linux实战教学笔记18:linux三剑客之awk精讲

    Linux三剑客之awk精讲(基础与进阶) 标签(空格分隔): Linux实战教学笔记-陈思齐 快捷跳转目录: * 第1章:awk基础入门 * 1.1:awk简介 * 1.2:学完awk你可以掌握: ...

  9. Linux实战教学笔记22:企业级NFS网络文件共享服务

    目录 第二十二节 企业级NFS网络文件共享服务 第一章 NFS网络文件共享服务 1.1 NFS介绍 1.2 NFS系统原理介绍 1.3 NFS服务端部署环境准备 1.4 NFS server端的设置 ...

随机推荐

  1. 《selenium2 python 自动化测试实战》(18)——自动化测试模型(一)

    线性测试 已经被淘汰了:线性测试就是一个脚本完成一个场景,代码基本没有复用,每一个脚本都要从头开始写——这哪行. 模块化与类库 这个就是分模块:有点类似面系那个对象,把功能(比如登录)单独拿出来,当下 ...

  2. drone 学习六 发布部署&&集成私有容器仓库&&构建代码s3 保存

    备注:      需要进行drone 以及gitlab 环境的配置,可以参考相关资料   1. 参考项目 https://github.com/rongfengliang/drone-appdemo ...

  3. osquery简单试用

    备注: osquery  facebook 开源的将操作系统指标转换为sql 查询,方便好用,很适合devops 性能分析,系统监控 1. 安装 参考 https://osquery.io/downl ...

  4. DiscuzX 3. 3搭建和学习

    Discuz!全局变量$_G详解 http://jingyan.baidu.com/article/cb5d610516048c005c2fe0c8.html UCenter uc_user_synl ...

  5. python官网

    https://www.python.org/ https://docs.python.org/2/library/pydoc.html

  6. springboot注册bean失败

    启动的主类应该放在和其他包一样的目录,不能放在一个目录里面

  7. UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 7: ordinal not in range(128) [duplicate]

    Python在往文件里写东西的时候,如果ascii码报错 参考 http://stackoverflow.com/questions/19833440/unicodeencodeerror-ascii ...

  8. mstsc遇到CredSSP加密Oracle修正

    Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\P ...

  9. Java经典练习题_Day04

    一.选择题 1. 下列关于数组的说法正确的是:(A) A. 在Java中数组的长度是可变的 B. 数组中存储的数据的类型是相同的 C. 数组在进行扩容操作的时候源数组的地址不发生改变 D. int[] ...

  10. 第十章 Secret & Configmap(下)

    10.4 ConfigMap Secret可以为Pod提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如一些配置信息,则可以用ConfigMap. configMap的使用方式与Secre ...