HTTP报文:它是HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文都是在客户端、服务器和代理之间流动。缓存
HTTP报文的流动方向:一次HTTP请求,HTTP报文会从“客户端”流到“代理”再流到“服务器”,在服务器工做完成以后,报文又会从“服务器”流到“代理”再流到“客户端”服务器
报文的语法:全部的HTTP报文均可以分为两类,请求报文和响应报文。请求和响应报文的基本报文结构大体是相同的,只有起始行的语法有所不一样。cookie
请求报文:它会向Web服务器请求一个动做测试
请求报文的格式:编码
起始行: <method> <request-URL> <version>spa
头部: <headers>操作系统
主体: <entity-body>代理
响应报文:它会将请求的结果返回给客户端。code
响应报文的格式:视频
起始行: <version> <status> <reason-phrase>
头部: <headers>
主体: <entity-body>
下面是对各部分的简要描述:
一、方式(method):客户端但愿服务器对资源执行的动做,是一个单独的词,好比,GET、POST或HEAD
二、请求URL(request-URL):要直接与服务器进行对话,只要请求URL是资源的绝对路径就能够了,服务器能够假定本身是URL的主机/端口
三、版本(version):报文所使用的HTTP版本。其格式:HTTP/<主要版本号>.<次要版本号>
四、状态码(status-code):状态码是三位数字,描述了请求过程当中所发生的状况。每一个状态码的第一位数字都用于描述状态的通常类别(好比,“成功”、“出错”等等)
五、缘由短语(reason-phrase):数字状态码的可读版本,包含行终止序列以前的全部文本。缘由短语只对人类有意义,所以,尽管响应行HTTP/1.0 200 NOT OK和HTTP/1.0 200 OK中缘由短语的含义不一样,但一样都会被看成成功指示处理
六、头部(header):能够有零个或多个头部,每一个首部都包含一个名字,后面跟着一个冒号(:),而后是一个可选的空格,接着是一个值,最后是一个CRLF首部是由一个空行(CRLF)结束的,表示了头部列表的结束和实体主体部分的开始
七、实体的主体部分(entity-body):实体的主体部分包含一个由任意数据组成的数据块,并非全部的报文都包含实体的主体部分,有时,报文只是以一个CRLF结束。
展现一些假想的请求和响应报文:
HTTP报文的组成部分:对报文进行描述的起始行、包含属性的头部块、可选的,包含数据的主体部分
1、起始行:全部的HTTP报文都以一个起始行做为开始。请求报文的起始行说明了要作些什么。响应报文的起始行说明发生了什么。
请求报文的起始行:该行包含了一个方法和一个请求的URL,还包含HTTP 的版本。
响应报文的起始行:该行包含了响应报文使用的HTTP版本、数字状态码、缘由短语。
二、头部:HTTP首部字段向请求和响应报文中添加了一些附加信息。本质上来讲,它们只是一些名/值对的列表。头部和协议配合工做,共同决定了客户端和服务器能作什么事情。
头部的分类:
通用头部:既能够出如今请求报文中,也能够出如今响应报文中,它提供了与报文相关的最基本的信息
Connection:容许客户端和服务器指定与请求/响应链接有关的选项
Date:提供日期和时间标志,说明报文是什么时间建立的
MIME-Version:给出了发送端使用的MIME版本
Trailer:若是报文采用了分块传输编码方式,就能够用这个首部列出位于报文拖挂部分的首部集合
Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式
Update:给出了发送端可能想要“升级”使用的新版本或协议
Via:显示了报文通过的中间节点(代理、网关)
Cache-Control:用于随报文传送缓存指示
请求头部:请求头部是只在请求报文中有意义的头部。用于说明是谁或什么在发送请求、请求源自何处,或者客户端的喜爱及能力
Client-IP:提供了运行客户端的机器的IP地址
From:提供了客户端用户的E-mail地址
Host:给出了接收请求的服务器的主机名和端口号
Referer:提供了包含当前请求URI的文档的URL
UA-Color:提供了与客户端显示器的显示颜色有关的信息
UA-CPU:给出了客户端CPU的类型或制造商
UA-OS:给出了运行在客户端机器上的操做系统名称及版本
UA-Pixels:提供了客户端显示器的像素信息
User-Agent:将发起请求的应用程序名称告知服务器
Accept:告诉服务器可以发送哪些媒体类型
Accept-Charset:告诉服务器可以发送哪些字符集
Accept-Encoding:告诉服务器可以发送哪些编码方式
Accept-Language:告诉服务器可以发送哪些语言
TE:告诉服务器可使用那些扩展传输编码
Expect:容许客户端列出某请求所要求的服务器行为
Range:若是服务器支持范围请求,就请求资源的指定范围
If-Match:若是实体标记与文档当前的实体标记相匹配,就获取这份文档
If-Modified-Sinec:除非在某个指定的日期以后资源被修改过,不然就限制这个请求
If-None-Match:若是提供的实体标记与当前文档的实体标记不相符,就获取文档
If-Range:容许对文档的某个范围进行条件请求
If-Unmodified-Since:除非在某个指定日期以后资源没有被修改过,不然就限制这个请求
Authorization:包含了客户端提供给服务器,以便对其自身进行认证的数据
Cookie:客户端用它向服务器传送数据
Cookie2:用来讲明请求端支持的cookie版本
Max-Forward:在通往源端服务器的路径上,将请求转发给其余代理或网关的最大次数
Proxy-Authorization:这个首部在与代理进行认证时使用的
Proxy-Connection:这个首部是在与代理创建链接时使用的
响应头部:响应头部为客户端提供了一些额外信息,好比谁在发送响应、响应者的功能,甚至与响应相关的一些特殊指令
Age:(从最初建立开始)响应持续时间
Public:服务器为其资源支持的请求方法列表
Retry-After:若是资源不可用的话,在此日期或时间重试
Server:服务器应用程序软件的名称和版本
Title:对HTML文档来讲,就是HTML文档的源端给出的标题
Warning:比缘由短语更详细一些的警告报文
Accept-Ranges:对此资源来讲,服务器可接受的范围类型
Vary:服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端
Proxy-Authenticate:来自代理的对客户端的质询列表
Set-Cookie:在客户端设置数据,以便服务器对客户端进行标识
Set-Cookie2:与Set-Cookie相似
WWW-Authenticate:来自服务器的对客户端的质询列表
实体首部:描述主体的长度和内容,或者资源自身
Allow:列出了能够对此实体执行的请求方法
Location:告知客户端实体实际上位于何处,用于将接收端定向到资源的位置(URL)上去
Content-Base:解析主体中的相对URL时使用的基础URL
Content-Encoding:对主体执行的任意编码方式
Content-Language:理解主体时最适宜使用的天然语言
Content-Length:主体的长度
Content-Location:资源实际所处的位置
Content-MD5:主体的MD5校验和
Content-Range:在整个资源中此实体表示的字节范围
Content-Type:这个主体的对象类型
ETag:与此实体相关的实体标记
Expires:实体再也不有效,要从原始的源端再次获取实体的日期和时间
Last-Modified:这个实体最后一次被修改的日期和时间
扩展首部:规范中没有定义的新首部,开发者能够自定义一个首部的值/对
3、实体的主体部分:该部分其实就是HTTP要传输的内容,是可选的。HTTP报文能够承载不少类型的数字数据,好比,图片、视频、HTML文档电子邮件、软件应用程序等等。
HTTP方法:并非每一个服务器都实现了全部的方法。即便服务器实现了全部这些方法,这些方法的使用极可能也是受限的。例如,支持DELETE方法或PUT方法的服务器可能并不但愿任何人都可以删除或存储资源,这些限制一般都是在服务器的配置中进行设置的。
经常使用的HTTP方法:
GET方法:一般用于请求服务器发送某个资源。不包含主体
HEAD方法:与GET方法相似,但服务器在响应中只返回首部,使用HEAD方法能够,在不获取资源的状况下了解资源的状况(好比,判断其类型);经过查看响应中的状态码,看看某个对象是否存在;经过查看首部,测试资源是否被修改了;不包含主体
POST方法:该方法是用来向服务器发送数据的,经常使用于HTML表单,包含主体
PUT方法:该方法的语义就是让服务器用请求的主体部分来建立一个由所请求的URL命名的新文档,若是那个URL已经存在的话,就用这个主体来替代它。包含主体
TRACE方法:主要用于验证请求是否如愿穿过了请求/响应链,不包含主体
OPTIONS方法:决定能够在服务器上执行那些方法,不包含主体
DELETE方法:该方法就是请服务器删除请求URL所指定的资源,可是客户端应用程序没法保证删除操做必定会被执行,由于HTTP规范容许服务器在不通知客户端的状况下撤销请求,不包含主体
扩展方法:指的是没有在HTTP/1.1规范中定义的方法,这些方法为开发者提供了一种扩展这些HTTP服务能力的手段。
状态码:HTTP状态码被分红了五大类。状态码为客户端提供了一种理解事务处理结果的便捷方式。
1、100~199(信息性状态码):HTTP/1.1向协议中引入了信息性状态码
2、200~299(成功状态码):客户端发起请求时,这些请求一般都是成功的。服务器有一组用来表示成功的状态码,分别对应于不一样类型的请求
3、300~399(重定向状态码):重定向状态码要么告知客户端使用替代位置来访问他们所感兴趣的资源,要么就提供一个替代的响应而不是资源的内容
4、400~499(客户端错误状态码):有时客户端会发送一些服务器没法处理的东西。浏览网页时,咱们都看到过臭名昭著的404 Not Found错误码,这只是服务器在告诉咱们,它对咱们请求的资源一无所知
5、500~599(服务器错误状态码):有时客户端发送了一条有效请求,服务器自身却出错了,这些会返回5xx状态码