HTTP(S)
MIME
- Web服务器是Web资源(Web resource)的宿主。Web资源是Web内容的源头。
- HTTP仔细地给每种要通过Web传输的对象都打上了名为MIME类型(MIME type)的数据格式标签。最初设计MIME(Multipurpose Internet MailExtension,多用途因特网邮件扩展)是为了解决在不同的电子邮件系统之间搬移报文时存在的问题。MIME在电子邮件系统中工作得非常好,因此HTTP也采纳了它,用它来描述并标记多媒体内容
- Web服务器会为所有HTTP对象数据附加一个MIME类型
- MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。
URI
服务器资源名被称为统一资源标识符(Uniform Resource Identifier, URI)
- URI是一个通用的概念,由两个主要的子集URL和URN构成
- URL是通过描述资源的位置来标识资源的
- URN则是通过名字来识别资源的,与它们当前所处位置无关
- HTTP规范将更通用的概念URI作为其资源标识符,但实际上,HTTP应用程序处理的只是URI的URL子集
- 绝对URL中包含有访问资源所需的全部信息
- 相对URL是不完整的。要从相对URL中获取访问资源所需的全部信息,就必须相对于另一个,被称为其基础(base)的URL进行解析
语法
- 方案:
- 规定如何访问指定资源的主要标识符,它会告诉负责解析URL的应用程序应该使用什么协议
- 方案组件必须以一个字母符号开始,由第一个“:”符号将其与URL的其余部分分隔开来
- 方案名是大小写无关的
- 主机与端口:
- 主机组件标识了因特网上能够访问资源的宿主机器,可以使用主机名或者IP地址
- 端口组件标识了服务器正在监听的网络端口
- 对下层使用了TCP协议的HTTP来说,默认端口号为80
- 用户名与密码
- 路径:
- 路径是服务器定位资源时所需的信息
- 每个路径段都有自己的参数(param)组件
- 参数:
- HTTP URL的路径组件可以分成若干路径段。每段都可以有自己的参数。
- 查询字符串:
- 按照常规,很多网关都希望查询字符串以一系列“名/值”对的形式出现,名值对之间用字符“&”分隔
- 片段:
- 服务器处理的是整个对象,因此URL片段仅由客户端使用
编码
- 机制:通过一种“转义”表示法来表示不安全字符的,这种转义表示法包含一个百分号(%),后面跟着两个表示字符ASCII码的十六进制数
- 保留和受限:
%
,/
,.
,..
,#
,?
,;
,:
$
,+
@
,&
,=
:在某些方案的上下文中有特殊含义{
,}
,|
,\
,^
,~
,[
,]
,'
:用于各种传输Agent代理<
,>
,"
0x00-0x1F
,0x7F
:不可打印>0x7F
:需要转义
报文
从Web客户端发往Web服务器的HTTP报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message),此外没有其他类型的HTTP报文。
报文流
- HTTP使用术语流入(inbound)和流出(outbound)来描述事务处理(transaction)的方向
- HTTP报文会像河水一样流动。不管是请求报文还是响应报文,所有报文都会向下游(downstream)流动
报文的组成部分
- 起始行(start line): 对报文进行描述
- 首部(header):包含属性
- 主体(body):可选,包含数据
起始行和首部就是由行分隔的ASCII文本,每行都以CRLF结束
与起始行和首部不同的是,主体中可以包含文本或二进制数据,也可以为空
报文的语法
请求报文的格式:
响应报文的格式:
起始行
请求报文的起始行说明了要做些什么。响应报文的起始行说明发生了什么。
首部
-
HTTP首部字段向请求和响应报文中添加了一些附加信息。本质上来说,它们只是一些名/值对的列表
-
keep-Alive首部只是请求将连接保持在活跃状态。发出keep-alive请求之后,客户端和服务器并不一定会同意进行keep-alive会话。它们可以在任意时刻关闭空闲的keep-alive连接,并可随意限制keep-alive连接所处理事务的数量。
- 除非特别指明,否则HTTP/1.1假定所有连接都是持久的。要在事务处理结束之后将连接关闭,HTTP/1.1应用程序必须向报文中显式地添加一个Connection:close首部。
方法
- HEAD方法与GET方法的行为很类似,但服务器在响应中只返回首部。不会返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。
- PUT方法的语义就是让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,或者,如果那个URL已经存在的话,就用这个主体来替代它
- POST方法起初是用来向服务器输入数据的[插图]。实际上,通常会用它来支持HTML的表单
- TRACE方法允许客户端在最终将请求发送给服务器时,看看它变成了什么样子,主要用于诊断
- OPTIONS方法请求Web服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法
- DELETE方法所做的事情就是请服务器删除请求URL所指定的资源。但是,客户端应用程序无法保证删除操作一定会被执行。因为HTTP规范允许服务器在不通知客户端的情况下撤销请求
- HTTP被设计成字段可扩展的,这样新的特性就不会使老的软件失效了。扩展方法指的就是没有在HTTP/1.1规范中定义的方法。服务器会为它所管理的资源实现一些HTTP服务,这些方法为开发者提供了一种扩展这些HTTP服务能力的手段
状态码
- 100~199 -> 信息性状态码
- 200~288 -> 成功状态码
- 300~399 -> 重定向状态码
- 400~499 -> 客户端错误状态码
- 500~599 -> 服务器错误状态码
HTTP 3
参考链接: