HTTP
参照网址: https://juejin.im/post/5872309261ff4b005c4580d4#comment
格式
请求报文:
响应报文:
HTTP是不保存状态以及cookie的引入:
HTTP协议对发送的请求和响应不做持久化处理。——>引入Cookie技术用于状态管理。
Cookie 对用与登录的状态管理,没有 Cookie 这个技术的话,因为 HTTP 不保存状态,每次打开新网页都必须再次登录。
Cookie 会根据响应报文中的Set-Cookie字段来通知客户端自动保存 Cookie。下次请求时会自动发送 Cookie,服务器会比对数据得到状态结果。
Post和Get的区别
先引入副作用和幂等的概念。
副作用指对服务器上的资源做改变
搜索是无副作用的,注册是副作用的。
幂等指发送 M 和 N 次请求(两者不相同且都大于1),服务器上资源的状态一致。注册10个和11个帐号是不幂等的,对文章进行更改10次和11次是幂等的。
在规范的应用场景上说,Get 多用于无副作用,幂等的场景,例如搜索关键字。Post 多用于副作用,不幂等的场景,例如注册。
在技术上说:
- Get 请求能缓存,Post 不能
- Post 相对 Get 安全一点点,因为Get 请求都包含在 URL里,且会被浏览器保存历史纪录,Post 不会,但是在抓包的情况下都是一样的。
- Post 可以通过 request body来传输比Get更多的数据,Get 没有这个技术
- URL有长度限制,会影响 Get 请求,但是这个长度限制是浏览器规定的,不是 RFC规定的
- Post 支持更多的编码类型且不对数据类型限制
常见状态码:
2XX:成功
3XX:重定向
4XX客户端错误:
5XX服务器错误:
301和302的区别:
301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。
尽量使用301而不是302——防止网址劫持
HTTPS
HTTPS 是 HTTP 建立在 SSL/TLS 安全协议上的。
在 iOS 中,客户端本地会存放着 CA 证书,在HTTPS 请求时,会首先像服务器索要公钥,获得公钥后会使用本地 CA 证书验证公钥的正确性,然后通过正确的公钥加密信息发送给服务器,服务器会使用私钥解密信息。