有关代码可访问下面网址下载:
https://github.com/ZJW0215/HTTPLearn.git
1.输入url到http请求的完整过程
* 当输入url后先进行redirect操作:因为浏览器有可能已经记录了地址永久转换成了一个新的地址,所以浏览器需要判断是否需要redirect及redirect到哪里
*查看缓存,因为浏览器有可能已经将你要访问的资源缓存好了,如果没有,则开始向服务器请求
*输入的是域名,需要通过DNS服务器解析成对应的IP地址才能访问到对应的服务器,然后创建tcp连接
进行三次握手:确认客户端与服务端的连接,防止服务端开启无用的连接,规避因网络延时等出现的问题
2.CORS预请求
跨域允许的方法(不需要进行预请求):POST、GET、HEAD
允许的Content-Type(不需要进行预请求):
text/plain
multipart/form-data
application/x-www-form-urlencoded
还有请求头的限制
3.Cache-control缓存
*可缓存性
public:所有的都能够进行缓存操作
private: 只有发起请求的浏览器才能进行缓存
no-cache:能进行缓存操作,但需要等服务器验证后才能使用
*到期
max-age=<seconds>
s-maxage=<seconds>专门为代理服务器设置的
max-stale=<seconds>即使缓存过期后依然能够使用过期的缓存
*重新验证
must-revalidate
proxy-revalidate
no-store不能进行缓存,必须从服务器加载内容
no-transform不允许进行转化
4.资源验证
Last-Modified上次修改时间
配合If-Modified-Since或者 If-Unmodified-Since使用
对比上次修改时间以验证资源是否需要更新
Etag数据签名
配合If-Match或者If-Non-Match使用
对比资源的签名判断是否使用缓存6.Cookie
通过Set-Cookie设置
下次请求会自动带上
Cookie是以键值对保存的,可以设置多个
max-age和expires设置过期时间
Secure只在HTTPS的时候发送
HTTPOnly无法通过document.cookie访问(安全性考虑)
session是保证定位到用户,是实现session的方案7.数据协商
请求端:
Accept:通过这个来指定服务端返回的数据类型
Accept-Encoding:编码格式
Accept-Language返回的内容显示的语言
User-Agent 返回浏览器相关的信息
服务器端返回content:
Content-Type实际返回的数据格式
Content-Encoding压缩方式
Content-Language 语言
Content-security-policy内容安全策略
限制资源获取:default-src限制全局,制定资源类型
报告资源获取越权http2优势:信道复用,分帧传输(同一连接可以并发的发送不同请求),server push(服务端主动的向客户端推送内容)