一. 概念
超文本传输协议,是一个简单的请求-响应协议,通常运行在tcp之上,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应的消息头是以ASCII 形式给出;而消息内容则具有一个类似MIME的格式。
二. 格式
请求格式:请求行(请求方法、请求url、请求协议版本),请求头(键值对组成,每对占一行,如:Host, Content-length,Content-type,User-agent,referer,cookie,Connection),请求正文(BODY)
响应格式:状态行(协议版本号,状态码,状态码描述),响应头(键值对组成,每对占一行,如:Server, Content-length,Content-type,cache-control,Connection),响应正文(格式可能是html、xml、json、text等)
三. 缓存
强缓存:
响应头cache-control 有几个常用值,1. max-age = 10000 表示在这个缓存时间内用缓存;2.no-cache, 不代表不缓存,而是缓存前向服务器确认是否有更改,一般这样使用-- cache-control:no-cache,max-age=10000,表示10000内使用强缓存,超过则协商缓存;3. no-store:禁用缓存
响应头expires:expires = max-age + 请求时间,需要和last-modifed 结合使用
协商缓存:
1. eTag 和 if-none-match,浏览器第一次请求,服务器返回eTag值(内容hash值),第二次请求请求头携带if-none-match(上次保存的hash值),与服务器内容匹配,如果一样则返回304,任然携带eTag,即使没变,反之eTag携带新hash值,返回200
2. last-modifed 和 if-modifed-since,浏览器第一次请求,服务器返回last-modifed(内容最新更新的时间),第二次请求请求头携带if-modifed-since(上次last-modifed携带的时间),和服务器内容的更新时间做对比,如果一样则返回304,不携带last-modifed,反之返回200,携带新的last-modifed
eTag,是为了解决last-modifed的不能解决的问题,1. 有些文件会周期性更改时间,内容不变,2. 服务器更改文件比较频繁,可能1s之内好几次修改,但是 if-modifed-since 可以识别的时间粒度是s级 3. 有些服务器不能精确的得到文件更新的时间
四. 常用状态码
301:永久移动,返回一个新的uri,并定向到新的uri
304:表示资源未修改,使用缓存
404:找不到内容,找不到网页
401:要求身份认证,例如token过期,重新登录
403:无权限访问
500: 服务器问题
502:网关出错
504:网关超时
五. https协议
1. 加密过程
客户端生成一个随机码,用该服务器公钥加密,服务器接收到消息,用私钥解密得到这个随机码,然后用这个随机码加密内容,发送给客户端,客户端用该随机码解密得到内容
2. 验证签名过程
ca机构会给服务器方颁发证书(包含,数字签名,公钥,算法,网站信息,证书有效期等),浏览器访问网站下载该证书,用浏览器或者系统内嵌的ca公钥,去验证签名,也就是用公钥用同样的加密算法去加密网站信息得到hash值H1 ,与数字签名被解密后的H2 做一个对比,如果一样则证明,该证书合法