http
1. HTTP版本
HTTP/1.0
HTTP/1.1
HTTP-NG
2. 会话方式
HTTP/1.0
建立连接->请求->响应->断开连接
每次连接只处理一次请求和相应,对资源的每一次访问都要建立一个单独的连接。
浏览器到服务器的每次通讯都是完全分开的。
没有Host域,所以不可以创建基于主机头的虚拟主机。
HTTP/1.1
在一个TCP连接中可以传送多个HTTP请求和响应
不需要等待上次HTTP响应完毕,可以多个HTTP请求同时进行。服务器会根据浏览器发送的请求顺序来按顺序进行响应,这被称作管线。
有Host域,可以建立虚拟主机。
3. 请求消息
结构:
请求行
若干消息头(可选)
(CRLF)
实体内容(可选)
GET无实体内容
4. 响应消息
结构:
状态行
若干消息头(可选)
(CRLF)
实体内容(可选)
5. HTTP消息
对于HTTP/1.1,如果消息中包括实体内容,且没有采用Transfer-Encoding: chunked传输编码方式,则必须要有Content-Length消息头。否则浏览器和服务器都不知道何时消息结束。
6. 简单请求消息和简单响应消息
没有消息头。
其中,简单请求消息只可用于GET方式,且请求行中不指定HTTP版本号,
对于简单请求消息,服务器将会返回简单响应消息,只返回实体内容。
如:
ROOT /index.html
7. HTTP消息头概述
浏览器通过消息头,比如可以告诉服务器浏览器的国家语言版本信息,可以告诉服务器访问者是从哪个页面访问到当前页面的。
服务器通过消息头,比如可以告诉浏览器隔多长时间刷新一下,用哪种字符集显示内容,创建Cookie。
结构:
头字段名称(不区分大小写):_值,值,值(CRLF)
头字段名称(不区分大小写):_值,值,值(CRLF)
头字段名称(不区分大小写):_值,值,值(CRLF)
(可以任意顺序排列)
分为:通用信息头、请求头、响应头、实体头四类。
8. 请求行
结构:
请求方式_资源路径_HTTP版本号(CRLF)
如:
GET /index.htm HTTP/1.1
请求方式:
Method |
|
GET |
请求获取Request-URI所标识的资源 |
POST |
在Request-URI所标识的的资源后附加新的数据 |
HEAD |
请求获取Request-URI所标识的资源的响应消息报头 |
PUT |
请求服务器存储一个资源,并用Request-URI作为资源标识 |
DELETE |
请求服务器删除Request-URI所标识的资源 |
TRACE |
请求服务器回送收到的请求信息,主要用于测试和诊断 |
CONNECT |
保留将来使用 |
OPTIONS |
请求查询服务器的性能,或者查询与资源相关的选项和需求 |
9. 状态行
结构:
HTTP版本号_状态码_状态描述(CRLF)
如:
HTTP/1.1 200 OK
10. 使用GET和POST传递参数
GET使用URL传递参数
如:
GET /List.aspx?Catagoryid=5&Cityid=23 HTTP/1.1
POST使用实体内容传递参数
如:
POST /List.aspx HTTP/1.1
Content-Type:application/x-www-form-urlencoded
Content-Length:22
Catagoryid=5&Cityid=23
在POST消息头中要设置Content-Type的值为application/x-www-form-urlencoded,以及使用Content-Length 以标识实体内容的长度。
当Content-Length长度比实体内容长度短时,则会忽略多出部分的实体内容。当Content-Length少于实体长度时,则会继续等待。
11. 响应状态码
状态代码由三位数字组成,第一位定义了响应的类别:
1xx:指示信息——表示请求已接收,继续处理。
2xx:成功——表示请求已被成功接收、理解、接受。
3xx:重定向——要完成请求必须进行更进一步的操作。
4xx:客户端错误——请求有语法错误或请求无法实现。
5xx:服务器端错误——服务器未能实现合法的请求。
常见状态码:
Status-Code |
Reason-Phrase |
|
200 |
OK |
客户端请求成功 |
206 |
|
客户端发送了带有Range头的GET请求,服务器正确的返回了该范围的数据 |
302/307 |
|
指出被请求的文档已经临时移动到别处,此文档的新的URL在Location响应头中给出 |
304 |
|
客户机缓存的版本是最新的,客户机应该继续使用它 |
400 |
Bad Request |
客户端请求有语法错误,不能被服务器理解 |
401 |
Unauthorized |
表示客户机访问的是一个受口令和密码保护的页面,并且在WWW-Authenticate响应头提示客户机应重新发出一个带有Authorization头的请求信息。 |
403 |
Forbidden |
服务器收到请求,但是拒绝提供服务 |
404 |
Not Found |
请求的资源不存在 |
500 |
Internal Server Error |
服务器端的CGI、ASP、JSP发生错误 |
503 |
Server Unavaliable |
服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |