一、HTTP概述
1.资源
Web服务器是Web资源的宿主,资源不一定是静态文件,还可以是根据需要生成内容的软件程序
1.1 媒体类型 MIME(Multipurpose Internet Mail Extension)
Web服务器会为所有HTTP对象数据附加一个MIME类型,MIME是一种文本标记:主对象类型/子对象类型,例如:text/html image/gif
1.2 URI / URL /URN
URI:统一资源标识符(Uniform Resource Identifier ), URI有两种形式:URL和URN:
URL:统一资源定位符(Uniform Resource Locator ) ,URL描述了特定服务器上某资源的特定位置,现在几乎所有的URI都是URL,统一命名方式:scheme(方案,通常就是http协议,告知Web客户端怎样访问资源):// 服务器地址/资源路径
URN:统一资源名(Uniform Resource Name),URN作为特定内容的唯一名称使用,与目前的资源所在地无关。URL的缺点在于如果资源被移走了,URL就无效了,为了应对这个问题,提出了URN,无论对象搬移到什么地方,URN都能为对象提供一个稳定的名称
2. 连接
浏览器从URL中解析出服务器的主机名、浏览器将主机名解析为IP地址、浏览器从URL中解析端口号、浏览器建立一条与Web服务器的TCP连接、浏览器向服务器发送一条HTTP请求报文、服务器向浏览器回送一条HTTP响应报文、关闭连接,浏览器显示文档
3. Web的结构组件
- Web浏览器与Web服务器
- 代理
位于客户端和服务器之间,接收所有客户端的HTTP请求,并将这些请求转发给服务器,期间可能会对请求和响应进行修改或过滤
- 缓存
- 网关(gateway)
- 隧道(tunnel)
- Agent代理
二、URL
1. 组成
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
scheme(方案),http协议的默认端口是80,https使用了网景的SSL,SSL为HTTP连接提供了端到端的加密机制,默认端口号为443
params(参数),由字符“;”将其与URL的其余部分以及各【名值对】分隔开
query(查询字符串),由字符“?”开头,用“&”将各【名值对】分隔开
frag(片段),为了引用部分资源或资源中的一个片段,URL支持使用frag组件表示一个资源内部的片段,比如某本书的某个章节。客户端不将片段传送给服务器,而是获得整个资源后,根据片段来显示部分资源,所以URL片段仅由客户端使用。
2. 相对URL
相对URL是在资源内部指定另一个资源位置的便捷缩略方式,比如我们在编写html时引用的那些相对资源路径;要从相对URL中获取访问资源的全部信息,就需要补全这个相对URL,而补全则需要相对base URL进行解析。baseURL可以:
a. 在资源中显式提供,比如html文档中的<base>标记,那么浏览器将使用指定的基本 URL 来解析所有的相对 URL
b. 未显式提供时,默认将它所属资源的URL作为基础
3. PURL
是用URL来实现URN功能的一个例子。其基本思想是在搜索资源的过程中引入另一个中间层。通过一个【中间资源定位符(Resource Locator)服务器】对资源的【实际URL】进行【登记和跟踪】。客户端可以向定位符请求一个永久URL,定位符可以以一个资源作为响应,将客户端【重定向】到资源当前实际的URL上去。
三、HTTP报文
1. 报文流
HTTP报文流是指在应用程序之间发送的数据块,这些报文在客户端、服务器、代理之间流动。使用术语“流入”(inbound)、“流出”(outBound)来描述事务处理的方向。报文总是向下游(downstream)流动,所有报文的发送者都在接收者的上游(upstream)
2. 报文的组成部分
HTTP报文分为请求报文(request message)和响应报文(response message);报文由起始行、首部、主体组成。起始行和首部是由行分隔的ASCII文本,主体是可选的数据块,可以包含文本或二进制数据
2.1 start line(起始行)
请求报文的start line:<method> <request-url> <version>
响应报文的start line:<version> <status-code> <reason-phrase>
请求报文的起始行说明了要做什么,响应报文的起始行说明发生了什么。reason-phrase(原因短语)仅对人类有意义,即使响应行为 HTTP/1.0 200 NOT OK,同样会被当做成功指示处理。
2.1.1 方法
1)GET
2)HEAD:与GET方法的行为很类似,但服务器只返回首部,不返回实体的主体部分,这就允许客户端在不获取资源的情况下,检查、了解资源情况等,比如判断其类型、确认其是否存在。服务器开发者必须保证返回的首部与GET请求返回的首部完全相同。
3)POST
4)PUT:让服务器用请求的主体部分来创建一个文档,此文档以请求的URL命名,如果此URL已存在,则用此主体覆盖;为了安全,很多服务器要求在执行PUT之前用密码登录。POST向服务器发送数据,PUT向服务器的资源中存储数据
2.1.2 状态码
2XX 成功
3XX 重定向
4XX 客户端错误
5XX 服务端错误
2.1.3 版本号
将自己所遵循的协议版本告知对方,以便了解对方的能力,版本号说明了应用程序支持的最高HTTP版本,HTTP/x.y 中x和y都被当做单独的数字处理,所以比较版本高低时,数字应该单独比较,比如 HTTP/2.22 就比 HTTP/2.3 版本高,因为22 > 3
2.2 header
通用首部:在请求和响应报文中都可以出现
请求首部:补充更多请求相关的信息
响应首部:补充更多响应相关的信息
实体首部:描述实体的长度、内容、或资源本身
扩展首部:规范中没有定义的新首部
网友评论