以下内容部分都摘自博客:http://kb.cnblogs.com/page/130970/#statecode
以下内容部分都摘自书本:《HTTP权威指南》
一、HTTP
1.1 HTTP是什么
HTTP,Hyper Text Transfer Protocol
,简称 超文本传输协议,是用于万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传输协议。
HTTP属于应用层(Application Layer),是一个基于TCP/IP通信协议来传递数据(包括HTML文件、图片、查询结果等等),并且它工作在 客户端-服务端 的架构上。
1.2 HTTP的特点
1)、简单快速
- 客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
2)、灵活
- HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
3)、无连接
- 无连接的含义是 限制每次连接只处理一个请求 。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
4)、无状态
- HTTP协议是 无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
5)、支持B/S及C/S模式
二、HTTP之URI
2.1 什么是URI
URI,Uniform Resource Identifier
,统一资源标识符。服务器资源名被称为统一资源标识符。
HTTP使用统一资源标识符来传输数据和建立连接。
2.2 URI的分类
URI 有两种:URN 以及 URL。
2.2.1 URN
- URN,
Uniform Resource Name
,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com
2.2.2 URL
- URL,
Uniform Resource Locator
,统一资源定位符,是一种特殊类型的URI,包含了用于查找某个资源的足够的信息,也是互联网上用来标识某一处资源的地址。
URL的组成部分:<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
- URL 的组成部分请看下图
- 对应的
location.xxx
:
- URL 的例子请看下图
三、HTTP报文
3.1 什么是HTTP报文
HTTP
报文是在HTTP
应用程序之间发送的模块。这些数据块以一些文本形式的元信息(meta-infomation
)开头,这些信息描述了报文的内容以及含义,后面跟着可选的数据部分。
3.2 HTTP报文流
3.2.1. 报文流入源端服务器
- HTTP 使用术语流入(
inbound
)和流出(outbound
)来描述事务处理(transaction
)的方向。报文流入源端服务器,工作完成之后,会流回用户的 Agent 代理中。以下是图例:
3.2.2. 报文向下游流动
- HTTP 报文会像河水一样流动。不管是请求报文还是响应报文,所有报文都会向下游(
downstream
)流动。所有报文的发送者都在接收者的上游(upstream
)。
3.3 HTTP报文的组成成分
HTTP
报文由三个部分组成:对报文进行描述的起始行(start line
)、包含属性的首部(header
)块,以及可选的、包含数据的主体(body
)部分。
3.4 HTTP报文分类
HTTP
报文有两种:请求报文(Request Message
)和响应报文(Response Message
)。接下来就开始谈一下这两种报文。
3.4.1 请求报文(Request Message
)
- 以下是请求报文的图例
请求报文的起始行说明了要做些什么。接下来就聊一聊请求报文的起始行。
3.4.1.1 方法(method
)
- 方法用来告知服务器要做些什么。以下是常用的HTTP方法:
3.4.1.2 URL
- URL是命名所请求的资源
3.4.1.3 版本(version
)
- 报文所使用的HTTP版本。其格式为
HTTP/major.minor
。【major
是主要版本号,minor
是次要版本号,两个都是整数】
3.4.2 响应报文(Response Message
)
- 以下是响应报文的图例
3.4.2.1 版本(version
)
可参考请求报文的 3.4.1.3 版本(
version
)。
3.4.2.2 状态码(status code
)
- 状态码用来告诉客户端,究竟发生了什么事情。以下是状态码的分类图:
以下是常用状态码:
200 OK
:表明该请求被成功地完成,所请求的资源发送回客户端。302 Found
:重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。
例如在IE中输入http://www.google.com. HTTP服务器会返回304, IE取到Response中Location header的新URL, 又重新发送了一个Request。304 Not Modified
:代表上次的文档已经被缓存了, 还可以继续使用。400 Bad Request
:客户端请求与语法错误,不能被服务器所理解。403 Forbidden
:服务器收到请求,但是拒绝提供服务。404 Not Found
:请求资源不存在(输错了URL)。500 Internal Server Error
:服务器发生了不可预期的错误。503 Server Unavailable
:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
3.4.2.3 原因短语(reason phrase
)
- 原因短语为状态码提供文本形式的解释。原因短语和状态码是成对出现的。原因短语是状态码的可读版本,应用程序开发者将其传送给用户,用以说明在请求期间发生了什么情况。
例子:
200 OK