HTTP协议

1.  请求

1.1.  规则

请求报文 = 请求行 *((常规头部 | 请求头部 | 实体头部) CRLF) CRLF [消息体]

请求行 = 方法 SP 请求URI SP HTTP版本 CRLF

方法 = “OPTIONS” | “GET” | “POST” | “PUT” | “DELETE” | “HEAD” | “TRACE” | “CONNECT” | 扩展方法

HTTP版本 = “HTTP/1.0” | “HTTP/1.1”

常规头部 = Cache-Control | Connection | Date | Pragma | Trailer | Transfer-Encoding | Upgrade | Via |Warning

请求头部 = Accept |Accept-Charset | Accept-Encoding | Accept-Language | Authorization | Expect |From | Host | If-Match | If-Modified-Since | If-None-Match | If-Range | If-Unmodified-Since | Max-Forwards | Proxy-Authorization | Range | Referer | TE | User-Agent

实体头部 = Allow | Content-Encoding| Content-Language | Content-Length | Content-Location | Content-MD5 | Content-Range | Content-Type | Expires | Last-Modified | 扩展头部

1.2.  说明

1.2.1.      方法各字段及含义

OPTIONS:请求查询服务器性能,或查询与资源相关的选项

GET:请求获取目标资源

POST:请求在目标资源末尾增加新的数据

PUT:请求以目标资源为地址存储数据

DELETE:请求删除目标资源

HEAD:请求获取目标资源的响应报文头部

TRACE:请求服务器回送请求报文,用于测试

CONNECT:保留字段,用于能够动态切换通道的代理

扩展方法:用户自定义的方法

1.2.2.      各头部字段含义

详见:http://blog.csdn.net/sadfishsc/article/details/7231688

其中,扩展头部表示用户自定义的头部字段,常见的如Cookie,用于将浏览器保存在该域名下的cookie发送给服务端

2.  响应

2.1.  规则

响应报文 = 状态行 *((常规头部 | 响应头部 | 实体头部) CRLF) CRLF [消息体]

状态行 = HTTP版本 SP 状态码 SP 状态描述 CRLF

响应头部 = Accept-Ranges | Age | Etag | Location | Proxy-Authorization | Retry-After | Server | Vary | WWW-Authenticate

2.2.  说明

2.2.1.      各头部字段含义

响应报文头部中除了专有的响应头部与请求报文的请求头部不同外,其它可用的字段都是相同的。同样请参见上面的链接

2.2.2.      状态码与状态描述

详见:http://blog.csdn.net/sadfishsc/article/details/7242582

3.  CRLF注入攻击

参见:http://drops.wooyun.org/papers/2466

简单地说,预防CRLF注入攻击的方法就是过滤掉请求参数中的 \r \n 字符

4.  本文规则语法

本文请求和响应报文规则中所采用的规则是与HTTP协议文档(RFC2616)一致的语法,即ABNF(扩展的巴科斯范式)

其中:

等于(=)表示“被定义为”

圆括号(())表示括起来的部分合起来是一个元素

星号(*)表示其后面紧接的元素会重复至少0次

竖线(|)表示或

方括号([])表示括起来的元素是可选项

双引号(“”)表示引起来的字符串作为值使用,且不区分大小写

CRLF表示回车换行,即\r\n

SP表示真实的空格

规则中的空格( )没有实际含义,只是为了增加可读性

你可能感兴趣的:(HTTP协议)