1 概念
1.1 http
HTTP(hypertext transport protocol)协议也叫超文本传输协议,这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。
- 明文传输,敏感信息容易被中间劫持。
- HTTP协议是一个无状态的协议,它无法区分多次请求是否发送自同一客户端。无状态,cookie解决了无状态的问题。
1.2 HTTPS
HTTPS更安全,同时使用了对称加密和非对称加密。
对称加密:key负责加密解密。可劫持key和加密字符串。
非对称加密:A加密,B解密。key在服务端用来解密;解密后随机码在服务端;key对称加密。但是中间人攻击可能会置换publicKey,所以使用浏览器来校验第三方证书。
2 请求过程
客户端发送给服务器的称为“请求报文”,服务器发送给客户端的称为“响应报文”。
2.1 请求报文:
请求行:method/url
请求头:Host / Cookie / Accept / User-Agent=浏览器信息
Content-Type =application/json或者application/x-www-form-urlencoded或者multipart/form-data
请求体:(post才有,get没有)
json:{"name":"zhangsan","pwd":123 }/
urlencoded:name=zhangsan&pwd=123/
form-data:文件上传
2.2 响应报文:
响应状态行:status / statusText
响应头:Set-Cookie / Content-Type=application/json;charset=utf-8
响应体:js/img/css/json/html文本
2.3 http状态码的分类
1xx : 服务器已经收到了本次请求
2xx : 请求成功
3xx : 服务器还需要其他的资源;即重定向,配合响应头中的Location,浏览器自动处理
4xx :一般指请求的参数或者地址有错误,即客户端错误
5xx :服务器内部错误
200 :成功
301 :永久重定向,被请求的旧资源永久移除了(不可以访问了)
302 :临时重定向,被请求的旧资源还在(仍然可以访问)
304 :请求资源重定向到缓存中(命中了协商缓存)
403:没有权限
404 :资源未找到,一般是客户端请求了不存在的资源。
500 :服务器内部产生了错误。
504:网关超时
2.4 请求方式
同一个url根据请求方式决定CRUD,称为rest api(npm i json-server -g)
get请求:从服务端读取数据,一般用于查询操作。url地址栏发送请求;点击a标签发送请求;Form表单没有填写(method: post)时发送的请求。
params参数得到对象:/posts/1
query参数得到数组:/posts?id=1
post请求:向服务端添加新数据,一般用户提交操作。Form表单method: post时发送的请求。易于防止CSRF攻击
GET使用URL或Cookie传参,而POST将数据放在BODY中
put:更新服务端数据。
delete:删除服务端数据。
3 缓存
浏览器在本地磁盘上将用户之前请求的数据存储起来,当访问者再次需要改数据的时候无需再次发送请求,直接从浏览器本地获取数据,减少网络请求。
3.1 强缓存
强缓存:直接从本地缓存中获取数据,状态码为: 200
- Cache-Control(响应头):max-age=315360000(相对时间),共存的时候cache-control的优先级高
- Expires:绝对时间
3.2 协商缓存
协商缓存:向服务器发送请求,服务器会根据请求头的资源判断是否命中协商缓存。如果命中,则返回304;否则返回200和最新的资源。
Last-Modified(响应头)/If-Modified-Since(请求头):资源在服务器上的最后修改时间
仅仅改变的修改时间;在秒以下的时间内进行修改
Etag/If-None-Match:由服务器生成的每个资源的唯一标识字符串,优先验证ETag