TCP/IP(八)应用层

 1. 应用层概述

1.1 应用层简介

负责与用户交互,处理用户通过不同的应用发出的请求和接收的回应,TCP/IP协议中预存了各类通用的应用服务,比如FTP(文件传输协议),网络共享文件的传输协议,比如将本地文件上传到远程计算机,这时就使用FTP协议。HTTP(超文本传输协议),使用万维网就是在使用HTTP协议,DNS(域名解析协议)负责域名和IP地址的映射,电子邮件传输使用SMTP协议,远程登陆使用talent协议。

1.2 应用层--应用软件

两种:客户/服务器和P2P体系结构

1)客户/服务器(client/server)

这种类型,就是我们很熟悉的客户端,服务器模型,客户端请求服务器,服务器响应客户端这样的一种方式进行“交流”。

2)P2P

也称为对等体系结构。P2P相当于每个人的电脑都可以当服务器,也可以当客户端,不单单限制于只能客户端访问服务器,你自己的计算机可以去访问别人的计算机上的内容,别的同样可以访问你计算机上的内容,这样达到一种共享的状态。

2. 应用层协议--DNS协议

2.1 DNS协议概述

(1)简述

域名系统(DomainNameSystem)是基于描述名字-地址映射的分布式计算机系统的实现,其作用是提供主机名和IP地址间的映射关系。

名字到IP地址的解析是由若干个域名Server组成的,域名Server程序在专设的结点上运行,运行这些程序的机器成为域名服务器(DomainServer);

(2)层次域名空间:

 

 Internet采用了层次树状结构的命名方法,任何一个连接在因特网上的主机或路由器都有一个唯一的层次结构的名字,即域名;

域名的结构由标号序列组成,各标号之间用“.”分隔开:

….三级域名.二级域名.顶级域名;

各标号分别代表不同级别的域名;

域名只是个逻辑概念,并不代表计算机的物理位置,变长的域名和使用有助于记忆的字符串来便于人们使用.而IP地址是定长的32位二进制数字则非常便于计算机处理;

(3)域名服务器

域名服务器的四种类型

1)根域名服务器:最高层次的域名服务器。记录着所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助于根域名服务器。在因特网上共有13组根域名服务器;

2)顶级域名服务器:负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址)。

3)权限域名服务器:是负责一个区域的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器。

4)本地域名服务器:当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。每一个因特网服务提供者ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为默认域名服务器。

DNS协议工作过程/域名解析过程

(1)通过域名访问网页,客户应用程序调用客户端一个称为解析器的库函数,将目的主机的域名作为参数传给解析器;

(2)计算机会先将域名发送到一个解析域名的服务器,即解析器通过网络向本地域名服务器53号端口发送一个以UDP数据报封装的DNS请求报文,询问与该域名对应的IP地址;

1)在其服务器上有很多服务器,能解析各种各样的域名,比如有专门解析.org的,解析.com的,解析.net的等等,最主要的有一个根域名服务器;

2)域名解析(在服务器上查找IP地址)的过程有2种算法,迭代查询、递归查询(少用)。一般是两种查询的结合;

3)本地域名服务器查找自己的域名数据库(映射文件),将域名对应的IP地址组成一个以UDP数据报封装的DNS响应报文,返回给解析器;若在本地域名数据库中查不到,则此域名服务器就暂时成为全球DNS中的一个客户,并向其它域名服务器(或者去找根域名服务器,根域名服务器知道所有的子服务器,他知道该域名所对应的IP地址在那个子服务器)发出查询请求,直至找到能回答请求的域名服务器为止,并将解析结果响应给本地域名服务器;本地域名服务器再将解析结果返回给客户端解析器;

(3)客户端解析器最终收到响应报文后,再将解析得到的IP地址返回给应用程序。

 

  

 (5)域名高速缓存

每个域名服务器都维护一个高速缓存,存放最近用过的名字以及从何处获得名字映射信息的记录。可大大减轻根域名服务器的负荷,使因特网上的DNS查询请求和回答报文的数量大为减少。

为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器,并处理超过合理时间的项。当权限域名服务器回答一个查询请求时,在响应报文中都指明绑定有效存在的时间值。

3. 应用层--WWW/万维网

WWW以客户/服务器方式工作。使用端口80的浏览器就是在用户计算机上的WWW客户程序。WWW文档所驻留的计算机运行服务器程序,也称为WWW服务器。客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的WWW文档。

在万维网客户程序与万维网服务器程序之间进行交互所使用的协议是超文本传送协议HTTP(Hyper Text Transfer Protocol),HTTP使用TCP连接进行可靠的传送。HTTP是面向事务的应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。

WWW使用统一资源定位符URL(Uniform Resource Locator)来标志万维网上的各种文档,使每一个文档在整个因特网的范围内具有唯一的标识符URL。URL的一般格式

<协议>://<主机>:<端口号>/<路径>

超文本标记语言HTML(HyperTextMarkupLanguage)使得万维网页面的设计者可以很方便地用一个超链接从本页面的某处链接到因特网上的任何一个万维网页面,并且能够在自己的计算机屏幕上将这些页面显示出来。

万维网的工作过程:

<设URL为http://www.tmtpost.com/99682.html>用户点击鼠标后所发生的事件:

(1)浏览器分析超链指向页面的URL。

(2)浏览器向DNS请求解析www.tmtpost.com的IP地址。

(3)域名系统DNS解析出钛媒体服务器的IP地址。

(4)浏览器与服务器建立TCP连接

(5)浏览器发出取文件命令:GET/99682.html

(6)服务器给出响应,把文件99682.html发给浏览器。

(7)TCP连接释放。

(8)浏览器显示钛媒体相关网页文件99682.html中的所有文本。

4. 应用层协议--HTTP协议

4.1 HTTP协议概述

(1)HTTP简述

1)协议:计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。

2)HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

3)HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1200OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。

4)HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。

5)HTTP协议工作于客户端-服务端架构。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。

尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。

(2)特点

1)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

2)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

3)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

注意:

①HTTP使用了面向连接的TCP向上提供的服务。但HTTP协议本身是无连接的。

②HTTP1.0协议是非持续连接。建立TCP连接后,一个HTTP请求过去,一个HTTP响应过来,然后就断开TCP连接。

③不同于HTTP/1.0,HTTP/1.1协议使用持续连接。

万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。而且这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。目前一些流行的浏览器(如IE6.0)的默认设置就是使用HTTP/1.1。

4)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

5)支持B/S及C/S模式。

(3)请求和响应报文的格式

格式都一样,内容不一样。

请求行响应行

请求头部响应体

请求数据响应数据

1)请求报文格式图

 

 2)响应报文格式图

 

 (4)HTTP协议功能

HTTP协议(HyperTextTransferProtocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,

还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,

仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

我们在浏览器的地址栏里输入的网站地址叫做URL(Uniform Resource Locator,统一资源定位符)。就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址。当你在浏览器的地址框中输入一个URL或是单击一个超级链接时,URL就确定了要浏览的地址。浏览器通过超文本传输协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。

补充:

持续连接的两种工作方式

非流水线方式:客户在收到前一个响应后才能发出下一个请求。虽然这比非持续连接的两倍RTT的开销节省了建立TCP连接所需的一个RTT时间,但服务器在发送完一个对象后,其TCP连接就处于空闲状态,浪费了服务器资源。

流水线方式:客户在收到HTTP的响应报文之前就能够接着发送新的请求报文。一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。使用流水线方式时,客户访问所有的对象只需花费一个RTT时间,使TCP连接中的空闲时间减少,提高了下载文档效率。

4.2 URL和URI

(1 )URL

HTTP使用统一资源标识符(UniformResourceIdentifiers,URI)描述一个网络上的资源,来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。

URL,全称是UniformResourceLocator,中文叫统一资源定位符,是互联网上用来标识某一处资源的地址,它的组成部分是:

格式:<协议>://<主机>:<端口>/<路径>

http://www.zyh.com:8080/woss/index.html?username=10086&password=123456#name

从上面的URL可以看出,一个完整的URL包括以下几部分:

1)协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符

2)域名部分:该URL的域名部分为“www.zyh.com”。一个URL中,也可以使用IP地址作为域名使用

3)端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口(80)

4)虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/woss/”

5)文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.html”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

6)锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分

7)参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“username=10086&password=123456”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

(2)URI和URI的区别

1)URI,是uniformresourceidentifier,统一资源标识符,用来唯一的标识一个资源。

Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的;

URI一般由三部组成:

  • 访问资源的命名机制;
  • 存放资源的主机名;
  • 资源自身的名称,由路径表示,着重强调于资源。

2)URL是uniformresourcelocator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。

采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:

  • 协议(或称为服务方式);
  • 存有该资源的主机IP地址(有时也包括端口号);
  • 主机资源的具体地址。如目录和文件名等。

4.3 工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:

1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

我们用图来理解一下:

当我们打开浏览器,在地址栏中输入URL,然后我们就看到了网页。

实际上我们输入URL后,我们的浏览器给Web服务器发送了一个Request,Web服务器接到Request后进行处理,生成相应的Response,然后发送给浏览器,浏览器解析Response中的HTML,这样我们就看到了网页,过程如下图所示:

 

 我们的Request有可能是经过了代理服务器,最后才到达Web服务器的。过程如下图所示:

 

 代理服务器就是网络信息的中转站,它的功能是:

  • 提高访问速度,大多数的代理服务器都有缓存功能。
  • 突破限制,也就是FQ了
  • 隐藏身份。

注意:

HTTP是基于传输层的TCP协议,而TCP是一个端到端的面向连接的协议。所谓的端到端可以理解为进程到进程之间的通信。所以HTTP在开始传输之前,首先需要建立TCP连接,而TCP连接的过程需要所谓的“三次握手”。

下图所示TCP连接的三次握手。

在TCP三次握手之后,建立了TCP连接,此时HTTP就可以进行传输了。一个重要的概念是面向连接,既HTTP在传输完成之间并不断开TCP连接。在HTTP1.1中(通过Connection头设置)这是默认行为。

 

 4.4 HTTP中请求消息(request)

请求消息格式

客户端发送一个HTTP请求到服务器的请求消息是有一定的格式:

 

 从上面可以看出来,请求消息由四部分组成:

请求行(requestline)、请求头部(header)、空行和请求数据四个部分组成

 

 第一行中的Method表示请求方法,比如"POST","GET",Path-to-resoure表示请求的资源(url),Http/version-number表示HTTP协议的版本号

当使用的是"GET"方法的时候,body是为空的。

用GET请求的请求报文

当我们访问搜狐的官网的时候,我使用的是Firebug抓取的请求消息

 

 第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本。

GET/http://www.sohu.comHTTP/1.1请求行,只不过这里被分开了,请求的方式URL版本

第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息。

1)Host:主机名www.solu.com

2)User-Agent:使用什么代理服务器,这里就是FireFox,也就是火狐

3)Accept:能接收的数据类型有哪些

4)Accept-Language:表示用户希望优先想得到的版本,一次排列下去,先是中文,再是英文

5)Accept-Encoding:通知服务端可以发送的数据压缩格式

6)Cookie:浏览器端的一个技术,在服务器上记录用户信息,但是也会在浏览器中保存一份。

7)Connection:连接的方式,有两种,非持续连接和持续连接,非持续连接,一次请求/响应就对应一个TCP连接,接到了响应该连接就关闭,然后在发送请求就在建立TCP连接,持续连接就相反,这里使用的是持续连接

8)Upgrade-Insecure-Requests:该指令用于让浏览器自动升级请求从http到https,用于大量包含http资源的http网页直接升级到https而不会报错.简洁的来讲,就相当于在http和https之间起的一个过渡作用。

第三部分:空行,请求头部后面的空行是必须的

即使第四部分的请求数据为空,也必须有空行。

第四部分:请求数据也叫主体,可以添加任意的其他数据。

使用GET方式请求时请求数据为空。

由于一般请求报文都不会有请求数据的,所以在9后面就没有内容了,一般如果想要发送数据过去度会通过在域名后面加?然后将数据创送过去

用POST请求的请求报文

 

第一部分:请求行,第一行明了是post请求,以及http1.1版本。

第二部分:请求头部,第二行至第六行。

第三部分:空行,第七行的空行。

第四部分:请求数据,第八行。

4.5 HTTP请求详解

(1)HTTP请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。

HTTP1.0定义了三种请求方法:GET,POST和HEAD方法。

GET:请求指定的页面信息,并返回实体主体。

POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头

HTTP1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。

PUT:从客户端向服务器传送的数据取代指定的文档的内容。

DELETE:请求服务器删除指定的页面。

CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

OPTIONS:允许客户端查看服务器的性能。

TRACE:回显服务器收到的请求,主要用于测试或诊断。

(2)GET和POST请求的区别

Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE.。一个URL地址用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。

我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

1)提交数据方式:GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接。

例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

POST提交:把提交的数据放置在是HTTP包的包体中。在前面的例子中提交的数据就是在回车换行的下面。

2)传输数据的大小:首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。而在实际开发中存在的限制主要有:

GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。

因此对于GET提交时,传输数据就会受到URL长度的限制。

POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。

3)安全性:POST的安全性要比GET的安全性高。比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存;(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,

除此之外,使用GET提交数据还可能会造成Cross-siterequestforgery攻击。

4)Httpget,post,soap协议都是在http上运行的

get:请求参数是作为一个key/value对的序列(查询字符串)附加到URL上的查询字符串的长度受到web浏览器和web服务器的限制(如IE最多支持2048个字符),不适合传输大型数据集同时,它很不安全;

post:请求参数是在http标题的一个不同部分(名为entitybody)传输的,这一部分用来传输表单信息,因此必须将Content-type设置为:application/x-www-form-urlencoded。

post设计用来支持web窗体上的用户字段,其参数也是作为key/value对传输。但是:它不支持复杂数据类型,因为post没有定义传输数据结构的语义和规则。

soap:是httppost的一个专用版本,遵循一种特殊的xml消息格式,Content-type设置为:text/xml任何数据都可以xml化。

(3)总结上面所说的,GET和POST的区别:

GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。POST方法是把提交的数据放在HTTP包的Body中.

GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。

GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

打开一个网页需要浏览器发送多次Request请求

1)当你在浏览器输入URLhttp://www.cnblogs.com的时候,浏览器发送一个Request去获取http://www.cnblogs.com的html.服务器把Response发送回给浏览器.
2)浏览器分析Response中的HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件。
3)浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
4)等所有的文件都下载成功后。网页就被显示出来了。

4.6 HTTP中响应消息(response)

(1)响应消息格式

一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。格式如下:

 

 HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

响应消息

 

 第一部分:状态行,由HTTP协议版本号,状态码,状态消息三部分组成。

第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)

第二部分:消息报头,用来说明客户端要使用的一些附加信息

第二行和第三行为消息报头。Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8

第三部分:空行,消息报头后面的空行是必须的

第四部分:响应正文,服务器返回给客户端的文本信息。

空行后面的html部分为响应正文。

(2)响应状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

1xx:指示信息--表示请求已接收,继续处理;

2xx:成功--表示请求已被成功接收、理解、接受;

3xx:重定向--要完成请求必须进行更进一步的操作;

4xx:客户端错误--请求有语法错误或请求无法实现;

5xx:服务器端错误--服务器未能实现合法的请求;

(3)常见的状态码有:

200OK//客户端请求成功

400BadRequest//客户端请求有语法错误,不能被服务器所理解

401Unauthorized//请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403Forbidden//服务器收到请求,但是拒绝提供服务

404NotFound//请求资源不存在,eg:输入了错误的URL

500InternalServerError//服务器发生不可预期的错误

503ServerUnavailable//服务器当前不能处理客户端的请求,一段时间后可能恢复正常

4.7 HTTP工作原理

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,

请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

HTTP请求/响应的步骤:

1)客户端连接到Web服务器

一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。

2)发送HTTP请求

通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

3)服务器接受请求并返回HTTP响应

Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

4)释放连接TCP连接

若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

5)客户端浏览器解析HTML内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。

客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址;

解析出IP地址后,根据该IP地址和默认端口80,和服务器建立TCP连接;

浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器;

服务器对浏览器请求作出响应,并把对应的html文本发送给浏览器;

释放TCP连接;

浏览器将该html文本并显示内容;

posted @ 2020-12-02 10:53  哈哈哈嘿呀  阅读(1105)  评论(0)    收藏  举报