一、http
http协议
1. http协议特性
1.1 无状态
http是不保存状态的协议,不保存之前的请求和响应,这样设计是为了确保协议的可伸缩性,可以快速处理大量事务
为了验证身份,引入cookie
1.2 持久链接(http1.1版本默认)
在http的早起版本中,由于当时网络不这么发达,网络请求密度相对比较低,所以当时每做一次网络请求时,必须连接(三次握手)-请求与相应-断开连接(四次挥手),现在网络请求密度非常大,必须满足一次连接多次请求,所以在http1.1版本中默认所有的连接都是持久连接。
1.3 管线化
管线化即并发,持久连接使并发成为可能。
1.4 内容协商
通俗地来讲就是不同情况不同对待,比如访问同一个URI地址,浏览器语言默认为中文时我们访问到的是中文页面,默认语言是英文时我们访问到英文页面。
内容协商会以语言、字符集、编码方式等作为基准判断响应的资源。
2. http方法
http首部
通用首部字段
1.1 Cache-Control 缓存管理
和缓存相关的指令,可以多个参数用’,’分隔:
Cache-Control:private, max-age=0, no-cache
1.1.1 public
响应指令:Cache-Control:public。
服务器返回给某个客户端的缓存,也可被其它任意客户端利用,这个缓存是公共的。
1.1.2 private
响应指令:Cache-Control:private。
服务器返回给某个客户端的缓存,即使其它客户端需要这样的数据,这个缓存也不会给其它客户端用,这个缓存是私有的。
1.1.3 no-cache
请求和响应指令:Cache-Control:no-cache。
客户端请求:不管缓存是何种情况,我必须从源服务器中获取最新的资源,这样是为了防止拿到过期的资源。
服务端响应:此响应缓存服务器可以把它保存下来,但是每次缓存服务器要将此响应返回给客户端之前都必须找源服务器确认一下数据。
1.1.4 no-store
请求和响应指令:Cache-Control:no-store。
对于客户端和服务端而言,该指定规定缓存不能在任何位置存储任何东西,我们可以将其看做是不缓存。
1.1.5 max-age
请求和响应指令:Cache-Control:max-age=60。
客户端请求:在第一次请求后的60秒内,再请求可以直接将缓存给我。等于0时,缓存服务器需要将请求转发给源服务器。
max-age=0和no-cache的区别:no-cache强制直接向源服务器请求不经过缓存服务器,而max-age=0需要经过缓存服务器。
服务端响应:在第一次返回缓存之后的60秒内如果缓存服务器需要返回此缓存时,不需要向源服务器进行确认就可以直接发送。
1.1.6 min-fresh
请求指令:Cache-Control:min-fresh=60。
在这60秒以内过期的资源无法作为响应进行返回。
1.1.7 max-stale
请求指令:Cache-Control:max-stale=60。
客户端在这60秒内请求的缓存即使过期了也可照常接收。
1.1.8 only-if-cached
请求指令:Cache-Control:only-if-cached。
客户端请求缓存,有缓存则返回,无缓存返回504状态码。
1.1.9 must-revalidate
响应指令:Cache-Control:must-revalidate。
代理会向源服务器再次验证即将返回的响应缓存是否仍然有效。
1.2 connection
主要有两个作用:控制代理不再转发首部字段,持久链接管理
1.2.1 控制代理不再转发首部字段
1.2.2 持久连接管理
我们知道在http1.1版本中所有连接默认是持久连接,如果我们向手动地断开连接可以这样:Connection: close。
为了兼容其它版本的http,我们这样设置:Connection: Keep-Alive
1.3 Date
表示创建报文的日期和时间
请求首部字段
响应首部字段
参考:图解http(03)-http首部
3.http方法
Http1.1中的请求方法有这些
3.1 GET
请求访问已被URI识别的资源,请求不需要实体主体。
3.2 POST
传输实体主体。
3.3 PUT
传输文件,本身无验证机制,存在安全问题。
3.4 DELETE
删除文件,与PUT相反的方法,也无验证机制。
3.5 HEAD
HEAD方法和GET方法一样用于获取资源,只是HEAD方法的请求不返回报文的主体部分。
3.6 OPTIONS
用来查询针对请求URI指定的资源支持的方法(GET?POST?等)。
3.7 TRACE
让web服务器端将之前的请求通信返回给客户端的方法,用于追踪路径,请求在各个代理服务器之间中转最终到达目标服务器,在中转时请求可能会被篡改。
3.8 CONNECT
要求用隧道协议连接代理,主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。
4.http状态码
2XX·成功--------------------表示成功处理了请求的状态码
- 200,客户端请求在服务器端被正常处理了;
- 201,请求成功并且服务器创建了新的资源
- 201,服务器已经接收,但是尚未处理
- 203,服务器已经成功处理了请求,但返回的信息可能来自另一个来源
- 204,请求处理成功了,但没有资源可返回;
- 206,对资源的一部分进行请求成功返回;
3XX·重定向
- 301,永久移动
- 302,临时移动
- 304,服务器内容没有修改,返回此响应时,不会返回网页的内容,浏览器使用缓存
- 305,使用代理
- 307,临时性重定向
4XX·客户端错误/请求错误
- 400,请求报文中存在语法错误;
- 401,用户认证失败;
- 403,不允许访问资源;
- 404,找不到资源。
5XX·服务器错误
- 500,服务器内部错误 服务器内部处理异常;
- 503,服务器不可用 服务器暂时处于超负荷或者正在进行停机维护,无法处理请求。
- 504,网关超时
- 505,http版本不支受支持 服务器不支持请求中所用的http协议版本
HTTP状态码详解与选用