HTTP协议笔记

HTTP协议是基于TCP协议的上层应用协议

特点1无连接:每次连接只处理一个请求,处理完即断开连接
特点2无状态:每次连接需要的信息都要重传

RESTful:一种流行的互联网软件设计架构 含义是资源表现层状态转化,包括三部分

  1. 定义直观简短的资源地址URI (应当是名词,动作放到参数里)
  2. 定义传输的资源:Web服务接受与返回的互联网媒体类型,如JSON,XML等
  3. 对资源的操作方法:GET获取资源 POST/PUT更新资源 DELETE删除资源

HTTP有两种消息,请求消息和响应消息,均包括三部分,其中首行和头部 基于ASCII编码,正文通常约定UTF-8

请求首行:GET /simple.html HTTP/1.1 方法,路径,版本
响应首行:HTTP/1.1 200 OK 版本号,状态码,状态文本

常用HTTP方法:

先解释一下幂等性:一次请求与多次请求具有相同的副作用
GET请求只有Header,没有Body,响应对应URI的资源表述,
GET不改变状态,幂等,可缓存,有长度限制,不应在处理敏感数据时使用
POST会改变状态,不具备幂等性(比如重复新建会产生多个新资源),没有缓存
DELETE会改变状态,有幂等性(重复删除应当把403响应修正为200)
HEAD相当于返回没有Body的GET响应
PUT相当于有幂等性的POST(重复新建只返回一个新资源)

URI路径

前面用/组成目录路径,?后跟查询字符串,查询字符串由多个键值对组成,用=组成键值对,用&连接多个键值对
/path/res?key1&key2=&key3=v3 定义了key1,key2为空字符串,key3值为v3

关于URL编码

网址采用UTF-8编码;查询字符串采用操作系统编码;在已有网页中GET和POST采用网页规定的编码;Ajax采用浏览器规定编码
通常在提交前先对URL编码,避免操作系统、网页、浏览器的编码差异
转码:&:%26 = :%3D % :%25

常用HTTP消息头

Accept及Accept-xx,指定可接受的内容类型、编码集、语言等等
Cookie 用于辨认身份的会话缓存 Set-Cookie 设置Cookie
Expires 一个GMT时间,超过此时间认为缓存失效(受客户端时间正确性影响)
ETag 告诉浏览器该资源的唯一标识符(生成规则由服务器指定)
If-None-Match 将同一资源响应的ETag值发给服务器
Last-Modified 告诉浏览器最后更新的时间
If-Modified-Since 将同一资源响应的Last-Modified值发给服务器
Cache-Control 缓存机制
public共享缓存,private对应不同用户有不同缓存
no-cache 不校验缓存强制请求服务器数据
no-store 不保存缓存
max-age=[秒] 对比缓存的时间,超过规定的则认为缓存失效 max-age=0 不保存缓存
only-if-cached 只想要缓存,不发起请求,并且会忽视max-age
max-stale=[秒] 对比缓存的时间,超过规定的则认为缓存失效

如果Cache-Control规定no-cache则直接请求服务器并且不再校验ETag、Last-Modified和Expires
如果Cache-Control通过only-if-cahced&max-stale、max-age等规则认定缓存有效将不会发起请求而直接使用缓存
否则发起请求校验ETag,如果匹配再校验 Last-Modified,如果匹配则返回 304告知浏览器使用缓存
前三项都没设置才会校验Expires

常见状态码:

2xx成功:200成功,
3xx重定向:301已转至新URL 304已转至缓存
4xx客户端错误:400请求格式错误 403禁止访问(权限错误) 404未找到
5xx服务器错误:500服务器未知错误 502从上游服务器获得无效响应 503服务器过载/当机 504网关超时