HTTP协议(RFC2616)学习笔记
1. http/1.0~http/1.1区别
In HTTP/1.0, most implementations used a new connection for each request/response exchange.
In HTTP/1.1, aconnection may be used for one or more request/response exchanges,
although connections may be closed for avariety of reasons
2. http允许使用三种date/time格式
HTTP-date = rfc1123-date | rfc850-date | asctime-date
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
3. http请求(Request)
Request = Simple-Request | Full-Request
Simple-Request = "GET" SP Request-URI CRLF
Full-Request = Request-Line ; Section 5.1
*( General-Header ; Section 4.3
| Request-Header ; Section 5.2
| Entity-Header ) ; Section 7.1
CRLF
[ Entity-Body ] ; Section 7.2
;请求队列Request-line
请求队列以一个方法符号开头,跟在请求URI及协议版本的后面,以CRLF为结尾。
该元素用空格SP分隔。除了最后的CRLF,不允许出现单独的CR或LF符。
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
;**简单请求与完整请求的请求队列之间的区别在于是否有HTTP版本域和是否可以使用除GET以外的其它方法。
注意点:
如果所请求的Method服务器无法识别,将返回501(尚未实现)
如果请求的URI,代理忽略标题域的过期信息限制,它可能使用缓存中的消息
4. 回应(Response)
在接收、解释请求消息后,服务器端返回HTTP回应消息。
Response = Simple-Response | Full-Response
Simple-Response = [ Entity-Body ]
Full-Response = Status-Line ; Section 6.1
*( General-Header ; Section 4.3
| Response-Header ; Section 6.2
| Entity-Header ) ; Section 7.1
CRLF
[ Entity-Body ] ; Section 7.2
格式:Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
5. 实体(Entity)
Entity-Header = Allow ; Section 10.1
| Content-Encoding ; Section 10.3
| Content-Length ; Section 10.4
| Content-Type ; Section 10.5
| Expires ; Section 10.7
| Last-Modified ; Section 10.10
| extension-header
extension-header = HTTP-header
HTTP/1.0请求如果包含主体,就必须在内容长度(Content-Length)标题域中给出合法的值。
6. 方法(Method)
GET:消息包含If-Modified-Since标题域,GET方法的语法就变成“条件GET”,即conditional GET
HEAD:与GET几乎一样,区别在于HEAD方法不让服务器在回应中返回任何实体
POST:指定合法的内容长度(Content-Length)
7. 状态代码定义
1xx:保留
2xx:成功
200 OK
201 Created
202 Accepted 请求被接受,但处理尚未完成
204 No Content 该回应主要是为了在不影响用户代理激活文档视图的前提下,进行script语句的输入及其它操作
205 Reset Content
206 Partial Content
3xx:重定向(Redirection 3xx)
300 Multiple Choices除非是HEAD请求,否则回应的实体中必须包括这些资源的字符列表及位置信息,由用户或用户代理来决定哪个是最适合的
301 Moved Permanently请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源。如果用POST方法发出请求,而接收到301回应状态码。在这种情况下,除非用户确认,否则用户代理不必自动重定向请求,因为这将导致改变已发出请求的环境
302 Moved Temporarily请求到的资源在一个不同的URL处临时保存。因为重定向有时会被更改,客户端应继续用请求URI来发出以后的请求
303 See Other HTTP/1.0前可能无法识别,会用302替代
304 Not Modified如果客户端成功执行了条件GET请求,而对应文件自If-Modified-Since域所指定的日期以来就没有更新过,服务器应当回应此状态码,而不是将实体主体发送给客户端
4xx:客户端错误(Client Error)
400 非法请求(Bad Request)
401 未授权(nauthorized)
403 禁止(Forbidden)该状态码一般用于服务器端不想公布请求被拒绝的细节或没有其它的回应可用
404 没有找到(Not Found)
5xx:服务器错误(Server Error)
500 服务器内部错误(Internal Server Erro)
501 未实现(Not Implemented)
502 非法网关(Bad Gateway)充当网关或代理的服务器从要发送请求的上游(upstream)服务器收到非法的回应
503 服务不可用(Service Unavailable)服务器当前无法处理请求。这一般是由于服务器临时性超载或维护引起的。该状态码暗示情况是暂时性的,要产生一些延迟