http
http:hypertext transfer protocol,超文本传输协议
http版本
http/0.9
http于1990年问世。此时还没有作为正式的标准被建立。这时的http其实含有http/1.0之前版本的意思,因此被称为htttp/0.9。
http/1.0
http正式作为标准被公布是在1996年的5月,版本被命名为http/1.0,并记载于rfc1945。
http/1.1
1997年1月公布的http/1.1是目前主流的http协议版本。当初的标准是rfc2068,之后还发布了修订版rfc2616。
http/2.0
2014年12月将http/2.0标准提议递交至iesg进行讨论,于2015年2月17日被批准。http/2.0标准于2015年5月以rfc7540正式发表。
http的工作过程
- 用户从浏览器中输入域名网址(url),浏览器对网址解析,根据网址的含义生成请求消息
- 请求信息生成以后,浏览器需要向dns服务器查询域名对应的ip,委托操作系统向web服务器发送请求
http报文
http协议的请求和响应报文中,包含http首部
http请求报文,由方法、uri、http版本、http首部字段构成
http响应报文,由状态码(数字和原因短语)、http首部字段构成
请求报文和响应报文的结构如图所示:
http状态码
状态码的职责是当客户端向服务端发送请求时,描述返回的请求结果。
1xx,informational(信息姓状态码),表示接受的请求正在处理
2xx,success(成功状态码),表示正常处理完毕
- 200 ok(表示从客户端发来的请求,服务器端被成功处理)
- 204 no content(表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分)
- 206 partial content(表示客户端进行了范围请求,而服务器成功执行了这部分的get请求)
3xx,redirection(重定向状态码),表示需要进行附加操作已完成请求
- 301 moved permanently(永久性重定向)
- 302 found(临时性重定向)
- 303 see other(表示由于请求对应的资源存在着另一个uri,应使用get方法定向获取请求的资源)
- 304 not modified(表示服务器端资源未改变,可直接使用客户端未过期的缓存)
- 307 temporary redirect(临时重定向)
4xx,client error(客户端错误状态码),表示服务器无法处理请求
- 400 bad request(表示请求报文中存在语法错误)
- 401 unauthorized(表示发送的请求需要有通过http认证的认证信息,basic认证、digest认证)
- 403 forbidden(表示对请求资源的访问被服务器拒绝了)
- 404 not found(表示服务器上无法找到请求的资源)
5xx,server error(服务器错误状态码),表示服务器处理请求出错
- 500 internal server error(表示服务器端在执行请求时发生了错误)
- 503 service unavailable(表示服务器暂时处于超负载或正在进行停机维护,现在无法处理请求)
http首部字段类型
通用首部字段
- cache-control,操作缓存的工作机制,例如cache-control:private,max-age=0,no-cache
- connection,控制不再转发给代理的首部字段,管理持久连接
- date,创建http报文的日期和时间
- pragma,http/1.1之前版本的历史遗留字段,向后兼容规范定义的形式唯一,pragma:no-cache
- trailer,会事先说明在报文主体后记录了哪些首部字段
- transfer-encoding,规定了传输报文主体时采用的编码方式
- upgrade,检测http协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议,如果指定,connection的值需要被指定为upgrade
- via,为了追踪客户端与服务器之间的请求和响应报文的传输路径
- warning,通常会告知用户一些与缓存相关的问题警告
请求首部字段
- accept,通知服务器用户代理能够处理的媒体类型及媒体类型的相对优先级
- accept-charset,通知服务器用户代理支持的字符集及字符集的相对优先级
- accept-encoding,通知服务器用户代理支持的内容编码及内容编码的相对优先级
- accept-language,通知服务器用户代理能够处理的自然语言集(中文或者英文等),以及优先级
- authorization,通知服务器,用户代理的认证信息(证书值)
- except,告知服务器,期望出现的某种特定行为
- from,告知服务器使用用户代理的用户的电子邮件地址
- host,告知服务器,请求的资源所处的互联网主机名和端口号
- if-match,条件请求,服务器接收到附带条件的请求后,判断指定条件为真时,才会执行请求
- if-modified-since,若字段值早于资源的更新时间,则希望能处理该请求
- if-none-match,和if-match作用相反
- if-range,字段值(etag或时间)和请求资源的etag值或时间一致时,则作为范围请求处理,反之,则返回全体资源
- if-unmodified-since,与if-modified-since作用相反
- max-forwards,通过trace方法或options方法,发送包含首部字段max-forwards请求时,该字段以十进制整数形式指定可经过的服务器最大数目
- proxy- authorization,接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段proxy- authorization的请求,以告知服务器认证所需要的信息
- range,告知服务器资源的指定范围
- referer,告知服务器请求的原始资源的uri
- te,告知服务器,客户端能够处理响应的传输编码方式及优先级
- user-agent,将创建请求的浏览器和用户代理名称等信息传达给服务器
响应首部字段
- accept-ranges,告知客户端,服务器是否能处理范围请求,可指定bytes或none
- age,源服务器在多久前创建了响应
- etag,告知客户端实体标识
- location,将响应接收方引导至某个与请求uri位置不同的资源
- proxy-authenticate,把由代理服务器所要求的认证信息发送给客户端
- retry-after,告知客户端应该在多久之后再次发送请求
- server,告知客户端当前服务器上安装的http服务器应用程序的信息
- vary,对缓存进行控制
- www-authenticate,用于http访问认证
实体首部字段
- allow,通知客户端能够支持request-uri指定资源的所有http方法
- content-encoding,告知客户端,服务器对实体的主体部分选用的内容编码方式
- content-language,告知客户端,实体主体使用的自然语言(中文或者英文等)
- content-length,表明实体主体部分的大小
- content-location,给出与报文主体部分相对应的uri
- content-md5,内容是一串由md5算法生成的值,目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达。
- content-range,针对范围请求,告知客户端作为响应返回的实体的哪个部分符合范围请求
- content-type,说明了实体主体内对象的媒体类型
- expires,将资源的失效日期告知客户端。
- las-modified,指明资源最终修改的时间
cookie相关的首部字段
- set-cookie,当服务器准备开始管理客户端的状态时,会事先告知各种信息,
- cookie,告知服务器,当客户端想获得http状态管理支持时,就会在请求中包含从服务器接收到的cookie,接收到多个cookie时,同样可以以多个cookie形式发送
其他首部字段
- x-frame-options,属于http响应首部,用于控制网站内容在其他web网站的frame标签内的显示问题。主要目的是防止点击劫持(clickjacking)攻击
- x-xss- protection,属于http响应首部,针对跨站脚本攻击(xss)
- dnt,http请求首部,全称do not track,意为拒绝个人信息被收集
- p3p,http响应首部,通过利用(the platform for privacy preferences,在线隐私偏好平台)技术,让个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的
发表评论