HTTP实用指南

七层模型或五层模型

七层模型

OSI七层模型:应用层,表示层,连接层,传输层,网络层,数据链路层,物理层

五层模型

TCP/IP概念模型:应用层,传输层,网络层,数据链路层,物理层

什么是HTTP

  • 超文本传输协议
  • 应用层协议,并基于TCP协议
  • 有请求和响应
  • 简单可扩展
  • 无状态:每一个请求都是孤立的,不知道每一个请求之前会携带什么信息的

协议分析

HTTP/1.0

Method

  • GET: 请求一个指定资源的表示形式,使用该请求最好只用于获取数据
  • POST: 最好用于提交数据到指定资源,通常导致在服务器上的状态变化或者副作用
  • PUT: 用请求有效载荷替换目标资源的所有当前表示
  • DELETE: 删除指定的资源
  • HEAD: 请求一个与GET响应相同的响应但是没有响应体
  • CONNECT: 建立一个由目标资源标识的服务器的隧道
  • OPTIONS: 用于描述目标资源的通信选项
  • TRACE: 沿着到目标资源的路径执行一个消息环回测试
  • PATCH: 用于对资源应用部分修改

安全的:GET HEAD OPTIONS 不会修改服务器的数据的方法

幂等的: GET HEAD OPTIONS PUT DELETE 同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,所有安全的方法都是幂等的

状态码

  • 200:客户端请求成功
  • 301:资源被永久转移到其他URL
  • 302:临时跳转
  • 401:请求未经授权
  • 404:请求资源不存在
  • 500:服务器内部发生错误
  • 504:网关或者代理服务器无法在规定的时间内获得想要的响应

报文

RESTful API: 一种API设计风格

  • 每一个URL代表一种资源
  • 客户端和服务器之间传递这种资源的某种表现层
  • 客户端通过HTTP method,对服务器端资源进行操作,实现表现层的状态转化

请求头

  • Accept: 接受类型,表示浏览器支持的MIME类型
  • Content-Type: 客户端发送出去实体内容的类型
  • Cache-Control: 指定请求和响应遵循的缓存机制,比如’no-cache’
  • If-Modified-Since: 对应服务端的Last-Modified,用于匹配看文件是否变动,只能精确到1s之内
  • Expires: 缓存控制,在这个时间内不会请求,直接使用缓存,服务端时间
  • Max-age: 代表资源在本地缓存多少秒,有效时间内不会请求,而是使用缓存
  • If-None-Match: 对应服务端的ETag,用来匹配文件内容是否改变
  • Cookie: 有Cookie并且同域访问的时候会自动带上
  • Referer: 该页面的来源URL[CSRF拦截常用于这个字段]
  • Origin: 最初的请求是从哪里发起的[精确到端口],比Referer更尊重隐私
  • User-Agent: 用户客户端的一些必要信息,比如UA头部

响应头

  • Content-Type: 服务端返回的实体内容的类型
  • Cache-Control: 指定请求和响应遵循的缓存机制,比如’no-cache’
  • Last-Modified: 请求资源的最后修改时间
  • Expires: 应该在什么时候认为文档已经过期从而不再缓存它
  • Max-age: 代表客户端在本地缓存多少秒,开启Cache-Control后有效
  • ETag: 资源的特定版本的标识符,类似于指纹
  • Set-Cookie: 设置和页面关联的cookie,服务器通过这个头部把cookie传给客户端
  • Server: 服务器的一些相关信息
  • Access-Control-Allow-Origin: 服务器端允许的请求Origin头部

HTTPS

HTTPS经过了TSL/SSL加密

场景分析

login

OPTIONS请求

预检:获知服务端是否允许该跨域请求[它是一种复杂请求]