文章定位:翻译HTTP协议中,较为常用的部分。(NOTE:这是HTTP1.0,HTTP1.1已经在2014年发布,RFC7231。)
术语:
1. connection:两个程序为了通信(communication)在传输层建立的虚电路
2. message:HTTP通信的基本单元
3. request:一个HTTP请求消息
4. response:一个HTTP响应消息
5. resource:一个网络上的数据对象或服务,可以用URI(通用资源标识符)识别。
6. entity:数据源或服务源回复的一种特殊表示,可能包含请求或响应消息。实体包含实体头(entity headers)和实体正文(entity body)。
7. client:为了发送请求而建立连接的应用程序
8. user agent: 初始化请求的客户端。比如,浏览器、编辑器、爬虫等。
9. server:为了服务请求而接收连接的应用程序。
10. origin server:请求的资源在这个服务器上,或它创建了请求的资源。
11. proxy:一个即使客户端也是服务器的中间(intermediary)程序,经常作为客户端穿过网络防火墙的入口。
12 gateway:一个作为其他服务器的中间服务器的服务器。网关像源服务器一样接受请求,客户端通常感觉不到网关的存在。网关经常作为服务器端穿过网络防火墙的入口。
13 tunnel(隧道):隧道常用于入口是必须的 ,但中间程序不能、不应该翻译通信内容的情况。
14. cache:除了作为隧道的服务器,其他的客户端和服务器都可以有缓存。
URI:被认为是,www地址、通用文档标识符(universal document identifiers)、通用资源标识符(universal resource identifiers)、统一资源定位符(uniform resource locators)和统一资源名字(uniform resource names)的组合。
HTTP URL:"http:" "//" host [":" port] [abs_path(相对路径)]
HTTP消息:简单请求、完整请求、简单响应、完整响应
1.完整请求:请求行 [通用头部 请求头部 实体头部] 回车换行(CRLF) [实体正文]
通用头部:请求和响应消息都可以用的头部
请求行:请求方法(GET HEAD POST 其他自定义方法) URI HTTP协议版本 CRLF
请求头部:授权(authorization)、Email(from)、如果修改(If-Modified-Since)、来自(referer)、用户代理(User-Agent:product tokens)
URI:绝对路径 或 相对路径。
2.完整响应:状态行 [通用头部 请求头部 实体头部] 回车换行 [实体正文]
响应行:HTTP协议版本 状态码 原因解析 CRLF
响应头部:地址(location)、服务器(server)、www认证(www-authenticate)
3.简单请求:GET URI CRLF
4. 简单响应:[实体正文]
实体头部:allow、content-encoding、content-length、expires、last-modified、其他自定义
请求方法:
1. GET:获取信息
2.HEAD:和GET一样,除了只返回头部。服务器不能返回任何实体正文
3. POST:往服务器里添加资源
状态码:
1XX:未使用
2XX:客户的请求,服务器可以满足
200 OK:请求被满足
201 created:POST专用。POST的请求被满足,新资源已创建
202 accepted:请求被接受,但还没有处理完成
204 no content:请求被满足,但是,没有什么信息需要返回
3XX:重定向
300 multiple choices:服务器知道很多个地方有被请求资源。如果不是GET请求,服务器要在实体正文中给出地址列表,
如果服务器觉得哪个地址最好,则在location头域里给出。
301 moved permanently:资源被永久移动到别处,新的链接在location头域里给出。
302 moved temporarily:资源临时移动到别处,新的链接在location头域里给出。
304 not modified:条件GET请求中,如果在请求指定的时间戳之后,网页没有改变过,服务器不需要给客户端发实体正文
4XX:客户端错误
400 bad request:服务器不懂客户端的请求
401 unauthorized:请求需要用户认证。响应必须包含www-authenticate头域
403 forbidden:服务器理解了请求,但不想满足请求。常用于服务器不想给出拒绝请求的原因时。
404 not found:服务器没有找到指定的URI对应的资源。
5XX:服务器错误 500 internal server error:服务器遇到未知情况,阻止它满足请求
501 not implemented:服务器无法辨认请求方法(server does not recognize the request method. 与404不同)
502 bad gateway:作为网关或代理的服务器,当它尝试满足请求时,从上游服务器处接到无效响应。
503 service unavailable:由于临时过载或维护,服务器目前无法处理请求
头域定义:
allow:实体头部。资源允许的请求方式
authorization:客户端收到401错误后,想认证自己。缓存不能保存包含认证的请求的响应
content-encoding:实体头部。有没有被压缩,以及压缩方式
content-length:实体头部。只要包含实体正文的请求,都应该给出该域
content-type:实体头部。例如:text/html
date:通用头部。表示信息产生的时间
expires:实体头部。给定消息过期时间,如果给定的时间小于收到的时间,表示该消息不能被缓存。
返回按钮可以显示已过期的历史记录,除非用户强行刷新
from:请求头部。给出用户邮箱。代理应转发该头部域
if-modified-since:请求头部。如果在该头域指定的时间后,资源没有更新,则返回没有实体正文的304响应,不返回资源
last-modified:实体头部。资源最后修改的日期
location:响应头部。3XX响应必填
prama:通用头部。传给整个传输链的指令。比如 prama : no-cache
referer:请求头部。从哪里转到、得到当前链接
server:响应头部。源服务器处理请求使用的软件。代理服务器不准在后面追加信息。服务器把自己使用的软件和版本
告诉别人,会更容易被攻击
user-agent:请求头部。用户代理产生该请求的相关信息。product token。(不明白,感觉和上面那个差不多)
www-authenticate:响应头部。401响应必填,指出请求需要哪种认证