Web服务基础之(http服务的重要基础、http协议)一 - Go语言中文社区

Web服务基础之(http服务的重要基础、http协议)一


一、HTTP服务的重要基础

      用户访问网站的基础

      我们每天几乎都会打开浏览器进行网上冲浪,基本是一个这样的流程,打开浏览器(谷歌、360、火狐等)-->输入网址如:www.baidu.com-->然后就会弹出搜索主页......这个过程可能只需要不到几十秒,看起来好像很简单,实际背后蕴含着大量技术原理,假如你和我一样是一位IT爱好者,那么请你和我一起来探究一下这个过程是怎么实现的;假如你是一名普通的上网者,也可以忽略我的博客。 

      下面开始介绍一下用户在web浏览器第一次访问网站的完整流程,如图1:所示


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

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

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

      第四步:baidu.com域名的授权DNS服务器会把www.baidu.com对应的最终IP解析记录(例如:1.2.3.4)发给LDNS。

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

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

注意:上述是客户端第一次访问网站的基本过程,连续访问后,系统本地和LDNS层级都会有缓存记录,再访问时流程就会有些变化,会直接取本地缓存记录,这样访问过程就很快了。

二、HTTP协议

(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服务三者的概念已经混淆了,大家现在几乎都认同是同一种服务。

(2)HTTP协议版本

      HTTP协议版本HTTP协议从诞生之初到现在已经经历了若干个版本,其中最主要的版本为HTTP/1.0、HTTP/1.1。HTTP/1.0是第一个得到广泛使用的版本,而HTTP/1.1为当前使用的主流版本。

1.HTTP/1.1简介

      HTTP/1.1的重点是修复HTTP设计中的缺陷,从可扩展性、缓存处理、带宽优化、持久连接、host头、错误通知、消息传递、内容协商等多个方面做了相关改进。HTTP/1.1是当前互联网主流的HTTP版本。

      在连接方面,HTTP/1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和时间延迟。

      在请求头方面,HTTP/1.1增加更多的请求头和响应头信息,用以增强HTTP功能。例如:host主机头功能,可以让Web浏览器使用主机头名来明确表示要访问服务器上的哪个Web站点,这样就可以使用Web服务器在同一个IP地址和端口号上配置多个虚拟Web站点。

      HTTP/1.1的持久连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,表示客户端通知服务器返回本次请求结果保持连接;Connection请求头的值为close时,表示客户端通知服务器返回本次请求结果后关闭连接。HTTP/1.1还提供了与身份证、状态管理和Cache缓存等机制相关的请求头和响应头等。

(3)HTTP请求方法

      在HTTP通信中,每个HTTP请求报文都包含一个方法。用以告诉Web服务器端需要执行哪些具体的动作,这些动作包括:获取指定Web页面、提交内容到服务器、删除服务器上资源文件等,这些HTTP请求报文中包含的方法被称为HTTP请求方法。其中,常用的HTTP请求方法见表1

表1:


(4)HTTP状态码

1.HTTP状态码介绍

      HTTP状态码(HTTP Status Code)是用来表示Web服务器响应HTTP请求状态的数字代码。每当Web客户端向Web服务器发送一个HTTP请求时,Web服务器都会返回一个状态响应代码。这个状态码是一个三位数字代码,作用是告知Web客户端此次请求是否成功,或者是否要采取其他的动作方式。

      HTTP协议1.1版本中的状态码可以分为五大类,如表2

表2:


      通过表2可知道,HTTP响应的状态码种类很多,但是在实际工作场景中,经常遇到的状态码却不多,以下是常用的HTTP状态码列表3

表3:


2.HTTP状态码的命令行查看

      可以通过curl命令(附带相关参数)在Linux命令行查看HTTP响应的数字状态码,命令如下:


(5)HTTP报文

      HTTP报文中有很多行内容,这些行的字段都是由一些ASCII码串组成,但各个字段的长度都是不相同的。HTTP报文可分为两种,一种是从Web客户端发往Web服务器的HTTP报文,称为请求报文(Request Message)。另外一种是从Web服务器发往Web客户端的报文,称为响应报文(Response Message),HTTP的请求和响应报文的格式类似。

1.HTTP请求报文(Request Message)介绍

      HTTP请求报文由请求行、请求头部(header)、空行和请求报文主体几个部分组成,表4给出了请求报文的一般格式。

表4:


      下面是对HTTP请求报文的每个部分逐一阐述。

1.1请求行

      请求行是请求报文的第一行,用来说明客户端想要做什么。内容由请求方法字段、URL字段和HTTP协议版本字段组成,他们之间用空格分隔。下面以GET/index.html HTTP/1.1为例来说明请求报文的起始请求行信息详情,见表5。

表5:


1.2请求头部

      请求头部由关键字/值组成,每对一行,关键字和值用英文冒号":"分隔。请求头部的作用是通过客户端把请求的相关信息告诉给服务器,常见的请求头部信息见表6.

表6:


      与请求报文相关的最常用的请求头是Content-Type和Content-Length。

1.3空行

      最后一个请求头部信息之后是一个空行,通过发送回车符和换行符,通知Web服务器空行以下不会有请求头部的信息了。

1.4请求报文主体

      请求报文主体包括了要发送给Web服务器的数据信息。请求报文主体不会应用于HTTP的GET命令的方法,而是应用于POST方法。POST方法适用于需要客户填写表单的场合。请求报文的主体信息此处不再举例。

2.HTTP响应报文(Response Message)介绍

      HTTP响应报文由起始行、响应头部(header)、空行和响应报文主体这几个部分组成,和HTTP请求报文格式类似。表7给出了响应报文的一般格式。

表7:

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

1.1起始行

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

1.2响应头部

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

      Content-Type:text/html;  charset=utf-8

      Content-Length:78

      ......

1.3空行

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

1.4响应报文主体

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

3.一个简单的请求报文和应答报文示例

    图2为HTTP报文请求应答流程图,从该图中的示例可以看出,Web客户端发送了一条HTTP请求报文,请求资源http://www.baidu.com/index.html,请求报文的起始行中有一个GET命令,资源名称为/index.html。使用的是HTTP/1.1协议,由于请求的方法为GET,因此请求报文不需要有主体,因为从服务器上获取(GET)一个简单的页面不需要在请求报文的主体中发送请求数据。

图2:




响应主体:


      Web服务器接受到请求后,返回一条HTTP响应报文。这条响应报文中包含了HTTP的版本号(HTTP/1.1)、成功的状态码(200)、状态描述(OK),以及若干响应头部字段,在所以这些内容之后跟着包含了请求资源的响应主体。Content-Length首部说明了响应主体的长度,Content-Type首部说明了文档的MIME类型。

(6)HTTP协议原理及重点分析

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

1.终端用户在Web浏览器地址栏输入访问地址http://www,baidu.com/index.html。

2.Web浏览器请求DNS服务器把域名www.baidu.com转换成Web服务器的IP地址,此处的解析过程就是DNS解析过程,上篇博客有讲到(DNS域名解析服务器),此处不再说明。

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

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

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

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

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

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

1)用户访问网站的流程。

2)DNS解析流程。

3)建立TCP连接发送HTTP报文的过程。

4)HTTP请求报文的细节。

5)HTTP响应报文的细节。

6)Web服务器请求后端集群的细节(可参考前面几篇关于LVS、HAproxy的博客)


版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_40470303/article/details/80654410
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-08-27 14:35:17
  • 阅读 ( 1193 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢