HTTP报文就是一些简单的格式化数据块,每个报文包含来自客户端的请求,或者是服务器端的响应,报文可以通过起始行,头部和主体来描述
GET /lihui/lihui.txt HTTP/1.0 Accept: text/* Host: www.lihuia.com HTTP/1.0 200 OK Content-type: text/plain Content-length: 12 Hello World!
起始行和头部是由\r\n(ASCII为13和10)组成的终止符作为结束,可以写成CRLF;Content-type说明了主体是什么,Content-Length说明了主体有多大
主体部分是可选的,也就是主体部分既可以包含文本或者其它二进制数据,也可以为空
HTTP报文包括请求和响应,客户端发送请求报文,服务器收到请求之后发送响应报文给客户端
method
客户端请求服务器对资源的操作步骤,比如GET,POST等,通常有
GET 不包含主体 从服务器获取亿份文档 HEAD 不包含主体 只从服务器获取文档的首部 POST 包含主体 向服务器发送需要处理的数据 PUT 包含主体 将请求的主体部分存储在服务器上 TRACE 不包含主体 对可能经过代理服务器传送到服务器上去的报文进行跟踪 OPTIONS 不包含主体 决定可以在服务器上执行哪些方法 DELETE 不包含主体 从服务器上删除一份文档 CONNECT 不包含主体 让服务器代替用户去访问其它网页,返回数据
request-URL
所请求的资源,或者包含有路径的完整URL,绝对和相对都是可以的
version
报文锁使用的HTTP版本,一般来说格式是这样的
HTTP/<major>.<minor>
major是主要版本号,minor是次要版本号,都是正数
status-code
是一个三位数,描述请求的返回状态码
100 ~ 101 信息提示 200 ~ 206 成功 300 ~ 305 重定向 400 ~ 415 客户端错误 500 ~ 505 服务器错误 200 OK 成功,请求的所有数据都在响应主体中 401 Unauthorized(未授权) 需要输入用户名和密码 404 Not Found 服务器无法找到所请求URL对应的资源
reason-phrase
数字状态码,原因短语是响应起始行中最后一个组件,为状态码(比如200)提供了文本形式的解释(比如OK);原因短语和状态码是成对出现的
header
可以有0或者多个头部,每个头部都包含一个key,后面跟着冒号,接着空格可选,接着就是value,最后就是CRLF;而头部都是以单独CRLF结束,表示头部的结束和主体的开始
body
主体部分包含了一个由任意数据组成的数据块,而主体是可选的