发表于: 2017-11-12 22:37:53
1 972
一.今日完成
今天准备和梳理小课堂相关知识点,讲解关于HTTP协议和报文的小课堂.
一、背景介绍
HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所用的协议方案.HTTP有很多应用,但最著名的是用于Web客户端和Web服务器之间的双工通信.因此HTTP被称为互联网的多媒体信使.( HTTP/2当前版本,于2015年5月作为互联网标准正式发布)
We服务器是Web资源(Web resources)的宿主,Web资源是Web内容的源头.Web服务器会为所有的HTTP对象数据附加一个MIME type(Mutipurpose Internet Mail Extension),表示一种主要的对象类型和一个特定的子类型.如:text/html,text/plain,image/jpeg.
每个Web服务器资源都有一个名字,即URI(Uniform Resource Identifier),在世界范围内唯一标识并定位该资源.
1) URL: scheme+host+path
http://www.jnshu.com/occupation/5/skillList
ftp://ftp.lots-o-books.com/pub/complete-price-list.xls
ssh://root:**********@39.108.61.3:22
2) URN: urn:ietf:rfc:2141
(URN是作为特定内容的唯一名称使用的,与目前的资源所在地无关)
一个HTTP事务(transaction)由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成.这种通信是通过HTTP报文(HTTP message)的格式化数据块进行的.这些报文在客户端,服务器和代理之间流动.
HTTP支持几种不同的请求命令,称之为HTPP方法(HTTP method).每条HTTP请求报文都包含一个方法,告诉服务器执行什么动作.(GET,PUT,DELETE,POST,HEAD).
每条HTTP响应报文返回时都会携带一个三位数的状态码,告知客户端请求是否成功或者需要采取其他动作.
二、知识剖析
1.HTTP请求和响应报文的结构
HTTP报文是由一行行的简单字符串组成,不是二进制代码,便于开发者读写.从Web客户端发往Web服务器端的HTTP报文称为请求报文(request message),从服务器端发往客户端的报文称为响应报文(response message).
HTTP报文包括以下三部分:
起始行(start line)
报文第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现什么情况.
首部字段(header)
起始行后有〇个或者多个首部字段.每个首部字段包含name/value,为了便于解析,两者之间用 : 来分隔.首部以一个空行结束.
主体(body)
空行之后就是主体,其中包含了所有类型的数据.起始行和首部都是文本形式且都是格式化的,而主体则不然.
2.连接
HTTP是应用层协议,无需关心网络通信的具体细节,它把联网的细节交给了通用的.可靠的因特网传输协议TCP/IP协议.TCP/IP是全世界的计算机和网络设备的常用的层次化分组交换网络协议,隐藏了各种网络和硬件的特点及弱点,使各种类型的计算机和网络都能够进行可靠的通信.
只要建立了TCP连接,客户端和服务器之间的报文交换就不会丢失,破坏或者在接收时出现错序.
基本的浏览器连接处理:
浏览器从URL中解析出服务器的主机名
浏览器将主机名转换成服务器的IP地址
浏览器将端口号从URL中解析出来
浏览器建立一条与Web服务器的TCP连接
浏览器向服务器发送一条HTTP请求报文
服务器向浏览器发送一条HTTP响应报文
关闭连接,浏览器显示文档
3.首部 (header)
HTTP首部可以分为以下几类:
(1)通用首部:即可以出现在请求报文中也可以出现在响应报文中
a.Connection:允许客户端和服务器指定与请求/响应连接有关的选项
b.Date:提供日期和时间标志,说明报文是什么时间创建的
c.MIME-Version:给出了发送端使用的MIME版本;
d.Trailer:如果报文采用了分块传输编码(chunked transfer encoding)方式,就可以用这个首部列出位于报文拖挂(trailer)部分的首部集合.
e.Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式.
f.Update:给出了发送器可能想要”升级”使用的新版本或协议
g.Via:显示了报文经过的中间节点(代理,网关)
HTTP/1.0引入了第一个允许HTTP应用程序缓存对象本地副本的首部,这样就不需要总是从源端服务器获取了.
Cache-Control:用于随报文传送缓存指示
Pragma:另一种随报文传送指示的方式,但并不专用于缓存.
(2)请求首部:只在请求报文中有意义的首部,提供更多有关请求的信息
请求的信息性首部
a.Client-IP 提供了与你选哪个客户端的机器的IP地址
b.Prom 提供了客户端用户的E-mail地址
c.Host 给出了接收请求的服务器的主机名和端口号
d.Referer:提供了包含当前请求的URI的文档的URL
e.UA-Color:提供了与客户端显示器的显示颜色有关的信息
f.UA-CPU:给出了客户端CPU的类型或制造商
g.UA-Disp:提供了与客户端显示器(屏幕)能力有关的信息
h.UA-OS:给出了运行在客户端机器上的操作系统名称及版本
i.UA-Pixels:提供了客户端显示器的像素信息
User-Agent:将发起请求的应用程序名称告知服务器
1)Accept首部
Accept首部为客户端提供了一种将其喜好和能力告知服务器的方式,包括它们想要什么,可以使用什么,以及最重要的,它们不想要的.
Accept, Accept-Charset, Accept-ncoding, Accept-Language,TE
2)条件请求首部
通过条件请求首部,客户端为请求加上限制,要求服务器在对请求进行响应之前,确保某个条件为真.
Expect,If-Match,If-Nodified-Since, If-None-Match, If-Range, If-Unmodified-Since,
Range.
3)安全请求首部
HTTP本身支持一种简单的机制,可以对请求进行质询/响应.
Authorization,Cookie,Cookie2
4)代理请求首部
Max-Forward,Proxy-Authorization,Proxy_Connection
(3)响应首部:提供更多有关响应的信息
请求的信息性首部
a.Age: 从最初创建开始响应持续时间
b.Public:服务器为其资源支持的请求方法列表
c.Retry-After:如果资源不可用的话,在此事件或日期重试.
d.Server:服务器应用程序软件的名称和版本
e.Title:对HTML文档来说,就是HTML文档的源端给出的标题
f.Warning:比原因短语更详细的警告报文
1)协商首部
如果资源有多种表示方法,比如服务器上有某文档的法语和德语译稿,HTTP/1.1可以为服务器和客户端提供对资源进行协商的能力.
Accept-Ranges,Vary.
2)安全协商首部
HTTP的质询/响应认证机制的响应侧.
Proxy-Authenticate,Set-Cookie,Set-Cookie2,WWW-Authenticate
(4)实体首部:描述实体的长度和内容或者资源本身,两种类型的报文中都可能出现实体首部.
请求的信息性首部
a.Allow:列出可以对此实体执行的请求方法.
b.Locaton:告知客户端尸体实际上处于何处用于将接收端定向到资源的位置上.
1)内容首部
提供了与实体内容有关的特定信息,说明了其类型,尺寸以及处理它所需的其他有用信息.
Context-Base, Context-Encoding, Context-Language, Context-Length, Context-Location, Context-MDS, Context-Range, Context-Type
2)实体缓存首部
通用的缓存首部说明了如何或者什么时候进行缓存.实体的缓存首部提供了与被缓存实体有关的信息.
ETag,Expires,Last-Modified.
三、常见问题
HTTPS是什么,它与HHTP有什么联系与区别?
四、解决方案
HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
与HTTP的差异:
与HTTP的URL由“http://”起始且默认使用端口80不同,HTTPS的URL由“https://”起始且默认使用端口443。
在HTTP中,客户端首先打开一条到Web服务器端口443的连接.一旦建立了TCP连接,客户端和服务器就会初始化SSL层,对加密参数进行沟通,并交换密钥.握手完成之后,SSL初始化就完成了.
五、扩展思考
常见状态码含义:
1xx消息——请求已被服务器接收,继续处理
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误
虽然 RFC 2616 中已经推荐了描述状态的短语,例如"200 OK","404 Not Found",但是WEB开发者仍然能够自行决定采用何种短语,用以显示本地化的状态描述或者自定义信息。
评论