http
http分为三部分:请求行、首部、实体(内容)
请求行包括了 请求方法 + URL + 协议版本
首部分为 请求首部、响应首部(有一些共用的)
实体就是报文的内容
1.Post和Get有什么区别?
从用法上说,Post一般用于无副作用、幂等的场景;Post多用于有副作用、不幂等的情况。
冥等的定义:发送M和N次请求,服务器上资源状态一致。比如说,注册10个账号和11个账号是不冥等的,对文章进行了10次11次修改是幂等的,因为前者多了一个账号(资源),后者是更新同一个资源。
副作用的定义:副作用是指对服务器上资源做改变。比如搜索是无副作用的,但更新是有副作用的。
从本质上说,Post和Get都取决于http,使用哪个方法与应用层传输没有必然的联系。HTTP没有要求,如果是POST,数据就要放在BODY中。也没有要求GET,数据(参数)就一定要放在URL中而不能放在BODY中。
细节上有一些区别:
Get能请求缓存,但是Post不可以
Post支持更多编码类型
Get回退无害,Post会再次提交
Get能被保存为书签,Post不可以
由于浏览器Url有限制,所以Get的长度受限,但Post不受限(因为都在Body里)
如果想有更多了解,可以参考:
- GET和POST:辩证看100 continue,以及最根本区别
- 99%的人都理解错了HTTP中GET与POST的区别
- 听说『99% 的人都理解错了 HTTP 中 GET 与 POST 的区别』??
- W3C对比:HTTP 方法:GET 对比 POST
2.http
2.1 http首部
2.1.1 常用通用首部
cache-control : 控制缓存行为
connection : 连接的性质,比如keep-alive
user-Agent :用户信息
Date :报文创建时间
http请求中connection=keep-alive的意义在哪里
HTTP 是基于 TCP 的,每一个 HTTP 请求都需要进行三次握手。如果一个页面对某一个域名有多个请求,就会进行频繁的建立连接和断开连接。所以HTTP 1.0 中出现了Connection: keep-alive
,用于建立长连接。Keep-Alive 模式更加高效,因为避免了连接建立和释放的开销。但是,长时间的TCP连接容易导致系统资源无效占用,配置不当的keep-alive有时比重复利用连接带来的损失还更大。所以,正确设置keep-alive timeout时间非常重要。
http请求中cache-control有哪些参数可以设置
Public :表示任何缓存都可以缓存响应
private :表示响应仅供单个用户使用,不得由共享高速缓存存储。私有缓存可以存储响应。
no-cache : 强制缓存在发布缓存副本之前将请求提交到源服务器以进行验证。
no-store: 缓存不应存储有关客户端请求或服务器响应的任何内容。
还有一些关于到期时间、重新验证加载的,具体可以参看MDN文档
2.1.2 常用请求首部
Referrer Policy : 表示来源的(浏览器所访问的前一个页面),可以用于辅助检测crsf攻击,一般浏览器的默认值是no-referrer-when-downgrade,意思是h