HTTP报文格式说明

来源:互联网 发布:网络流行词汇及解释 编辑:程序博客网 时间:2024/06/06 03:15

web概述

Web是一种超文本信息系统,它的主要概念是超文本链接,它使得文本不会再像一本书一样固定、线性的,而是从可以从一个位置跳到另外一个位置,正是由于可以实现这种多连接性我们才把它称为web

Web服务

Web服务通常可以分为静态Web服务与动态Web服务两种

一、静动之分

1、静态Web服务是指采用静态网页对Web请求给予响应的一种方式

静态Web服务最直观的表现是,网站的Web的页面只能格式化显示电子文本,一经生成,无法改变其内容,只能更改网页文件,这样给网站的维护带来了极大不便。到了后来也就出现动态网页。

2、所谓的动态Web服务,是指跟静态Web服务相对的一种网页编程技术。相对静态网页而言,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。

而请求Web服务响应的对象,则称为客户端,在Web客户端不断的增强其信息展现能力和客户交互能力的同时,Web服务也悄悄的由静态向动态逐步发展,不断完善着。但最早的Web服务器只能响应Web客户端发送的HTTP请求,并将存储在Web服务器上的文件返回。如果要是能够根据客户的不同请求来动态的创建HTML文件,是不是会更好?基于这样的理论也就产生了CGI(Common Gate Interface,通用网关接口)技术。

二、CGI技术

CGI是用于连接网页和应用程序的接口,通过CGI的技术,可以实现在Web服务端进行数据库查询等复杂操作,并对其进行一系列操作后的数据进行封装,动态产生HTML文件响应给客户端,这为客户端和服务器端间交互动态信息起了传输纽带的作用。

三、HTTP协议

HTTP(HyperText Transfer Protocol,超文本传输协议)是分布式的Web应用的核心技术协议,该协议基于请求/响应模式,无状态,在TCP/IP协议栈中属于应用层,之所以说HTTP是无状态协议,是因为此协议一次请求和响应构成一个独立的事务,各事务间没有状态的联系。

1、客户端访问Web服务器的几个阶段

建立请求

客户端(浏览器)使用HTTP命令(GET或POST方法)向服务器发出Web请求。(在此处需要DNS能够解析到服务器的IP地址后,通知到客户端才能知道服务器在那里)

接收连接

  服务器端接收到请求后,服务器响应该请求,并在客户和服务器之间建立连接。

处理请求

Web服务器查找客户端所请求的资源,有两种结果:其一,资源不存在,则服务器发送一个相应的错误提示文档给客户端。

访问资源

其二,如果Web服务器查找到所需要的资源。

构建响应

则会将所请求的资源进行整合,并封装。

发送响应

由服务器端发送响应到客户端

记录日志

服务器端将资源传输到客户端后,会将事务日志处理过程记录到日志之中。

当客户端浏览资源成功后,便会与服务器断来连接。

  • HTTP报文详解

    HTTP有两种报文:请求报文和响应报文,具体介绍如下

    一、HTTP请求报文

    先上个图,细细分析

    wKioL1MpX-qwK1-PAAExXPRpR8M814.jpg

    HTTP请求报文主要包括请求行、请求头部以及请求的数据(实体)三部分

    请求行(HTTP请求报文的第一行)

    请求行由方法字段、URL字段和HTTP协议版本字段。其中,方法字段严格区分大小写,当前HTTP协议中的方法都是大写,方法字段如下介绍如下:

    方法字段

    ①GET:请求获取Request-URI(URI:通用资源标识符,URL是其子集,URI注重的是标识,而URL强调的是位置,可以将URL看成原始的URI),所标识的资源

    ②POST:在Request-URI所标识的资源后附加新的数据;支持HTML表单提交,表单中有用户添入的数据,这些数据会发送到服务器端,由服务器存储至某位置(例如发送处理程序)

    ③HEAD:请求Request-URI所标识的资源响应消息报头,HEAD方法可以在响应时不返回消息体。

    ④PUT:与GET相反,请求服务器存储一个资源,并用Request-URI做为其标识;例如发布系统。

    ⑤DELETE:请求删除URL指向的资源

    ⑥OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项

    ⑦TRACE:跟踪请求要经过的防火墙、代理或网关等,主要用于测试或诊断

    ⑧CONNECT保留将来使用

    URL

    一个完整的包括类型、主机名和可选路径名的统一资源引用名,如:http://www.example.com/path/to/file.html

    请求头部:位于请求行的下面

    请求报文中常见的标头有:

    Connetion标头(连接管理)、Host标头(指定请求资源的主机)、Range标头(请求实体的字节范围)、User-Agent标头(包含发出请求的用户信息)、Accept标头(首选的媒体类型)、Accept-Language(首选的自然语言)

    HTTP首部:

    通用首部:请求和响应都可以使用的;

    Connection:定义C/S之间关于请求/响应的有关选项对于http/1.0, Connection: keep-aliveVia: 显示了报文经过的中间节点

    Cache-Control: 缓存指示

    实体首部:用于指定实体属性

    实体主体用于POST方法中。用户向Web服务器提交表单数据的时候,需要使用POST方法,此时主体中包含用户添写在表单的各个属性字段的值,当Web服务器收到POST方法的HTTP请求报文后,可以从实体中取出需要的属性字段的值。

    也就是说,当用户通过Web浏览器向Web服务器发送请求时,Web浏览器会根据用户的具体请求来选择不同的HTTP请求方法,再将相应的URL和HTTP协议版本及相关的标头填入头部行中,若是POST方法,还会将相关的表单数据填入实体主体中,产生一个HTTP请求报文,然后将这个报文发送给Web服务器。

     

    Location: 资源的新位置Allow: 允许对此资源使用的请求方法1、内容首部:Content-Encoding:支持的编码Content-Language:支持的自然语言Content-Length:文本长度Content-Location:资源所在位置Content-Range:在整个资源中此实体表示的字节范围

    Content-Type:主体的对象类型

    2、缓存首部:ETag: 实体标签Expires: 过期期限Last-Modified: 上一次的修改时间

    请求首部:

    Host: 请求的主机名和端口号,虚拟主机环境下用于不同的虚拟主机Referer:指明了请求当前资源的原始资源的URL

    User-Agent: 用户代理,使用什么工具发出的请求

    1、Accept首部:用户标明客户自己更倾向于支持的能力Accept: 指明服务器能发送的媒体类型Accept-Charset: 支持使用的字符集Accept-Encoding: 支持使用的编码方式

    Accept-Language: 支持使用语言

    2、条件请求首部:Expect: 告诉服务器能够发送来哪些媒体类型If-Modified-Since: 是否在指定时间以来修改过此资源If-None-Match:如果提供的实体标记与当前文档的实体标记不符,就获取此文档跟安全相关的请求首部:Authorization: 客户端提交给服务端的认证数据,如帐号和密码

    Cookie: 客户端发送给服务器端身份标识

    wKiom1MphduAsu6XAAM_loPLbc0713.jpg

    上图展示一般请求所带有的属性

    =====================================================================================

    二、响应报文

    上图分析

    wKiom1MpmHWALc2UAADu14JLceA655.jpg

    HTTP响应报文同样也分为三部分,有状态行、首部行、实体

    状态行:HTTP响应报文的第一行

    状态行包括三个字段:协议版本、状态码与原因短语。

    状态码:

    1xx:

    这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。

    2xx:

    这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。

    3xx:

    这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。

    4xx:

    这类的状态码代表客户端类的错误

    5xx:

    服务器类的错误

    常遇到的状态码说明

     

    状态码状态描述简要说明200OK客户端请求成功201Created请求已经被实现,而且有一个新的资源已经依据请求的需要而创建,且其URI已经随Location头信息返回。301Moved Permanently被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一302Found在响应报文中使用首部“Location: URL”指定临时资源位置304Not Modified条件式请求中使用403Forbidden请求被服务器拒绝404Not Found服务器无法找到请求的URL405Method Not Allowed不允许使用此方法请求相应的URL500Internal Server Error服务器内部错误502Bad Gateway代理服务器从上游收到了一条伪响应503Service Unavailable服务器此时无法提供服务,但将来可能可用505HTTP Version Not Supported服务器不支持,或者拒绝支持在请求中使用的HTTP版本。这暗示着服务器不能或不愿使用与客户端相同的版本。响应中应当包含一个描述了为何版本不被支持以及服务器支持哪些协议的实体。

    响应首部(首部行):位于响应报文状态行之后

    Date标头:消息产生的时间

    Age标头:(从最初创建开始)响应持续时间

    Server标头: 向客户端标明服务器程序名称和版本

    ETage标头:不透明验证者

    Location标头:URL备用的位置

    Content-Length标头:实体的长度

    Content-Tyep标头:实体的媒体类型

    协商首部:Accept-Ranges: 对当前资源来讲,服务器所能够接受的范围类型Vary: 首部列表,服务器会根据列表中的内容挑选出最适合的版本发送给客户端跟安全相关的响应首部:Set-Cookie: 服务器端在某客户端第一次请求时发给令牌

    WWW-Authentication: 质询,即要求客户提供帐号和密码

    响应首部一般包含如下内容:

    wKiom1MprnXiYF18AALhmNtc3OE334.jpg

    实体:位于首部行之后

    实体包含了Web客户端请求的对象。Content-Length标头及Content-Type标头用于计算实体的位置、数据类型和数据长度。当Web服务器接收到Web客户端的请求报文后,对HTTP请求报文进行解析,并将Web客户端的请求的对象取出打包,通过HTTP响应报文将数据传回给Web客户端,如果出现错误则返回包含对应错误的错误代码和错误原因的HTTP响应报文。


0 0
原创粉丝点击