http 一
get与post区别从语义的角度来说
- get是获取资源
安全的:不应该引起服务器任何状态的变化
幂等的:同一个请求方法执行多次和执行一次的效果完全相同
可缓存的 :请求可以被缓存
- post是处理资源
非安全 非幂等 非可缓存的
get请求参数拼接在URL后面 post放在请求体里面
get的参数长度限制2048个字符,post没有限制
get请求不安全,post请求比较安全
http的特点
-
无连接:每进行一次http通信就要断开一次,频繁的请求会增加通信量的开销,为了解决这个问题有了持久链接,相关头部字段Connection:keep-alive 、time:20、max:10,只要任意一端没有明确提出断开链接,则保持TCP的连接状态,好处是减少了TCP重复建立和断开链接所造成的额外开销
image.png
判断一个请求是否结束:1.看接收到的数据大小跟响应报文的头部字段里面的Content-length的大小是否一样 2.http报文段的末尾会有一个空的chunked(简单说就是最后一个报文块是0(CR+LF))
-
无状态: 保留无状态协议这个特征又要解决每次都要验证的问题,引入了Cookie/Session,Cookie会根据服务器返回的响应报文中一个Set-Cookie的首部字段通知客户端保存Cookie,客户端下次再往服务器发送请求时,会自动在请求报文中加入Cookie值发送出去
image.png
image.png
可以通过新Cookie覆盖旧Cookie来修改Cookie,但是要满足name、path、domain与原Cookie一致,删除Cookie跟修改一样,也是新覆盖旧的,并且满足覆盖规则,然后设置Cookie的expires=过去的一个时间点或者MaxAge=0。为了保证Cookie的安全,1.对Cookie进行加密处理2.只在https上携带Cookie 3.设置Cookie为httpOnly,防止跨站脚本攻击。
还要注意Cookie与Session区别,Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份
Charles抓包原理
image.pngHTTPS抓包的原理,就是Charles作为“中间人代理”,拿到了 服务器证书公钥 和 HTTPS连接的对称密钥,前提是客户端选择信任并安装Charles的CA证书,否则客户端就会“报警”并中止连接。