HTTP协议与计算机网络
1.TCP和UDP
- | UDP | TCP |
---|---|---|
是否可连接 | 无连接 | 面向连接 |
是否可靠 | 不可靠传输,不使用流量控制和拥塞控制 | 可靠传输 |
链接对象个数 | 一对一,一对多,多对一,多对多 | 一对一 |
传输方式 | 面向报文 | 面向字节流 |
首部开销 | 首部开销小,8字节 | 首部最小20字节,最大60字节 |
使用场景 | 实时应用(IP电话,视频会议,直播等) | 适用于可靠传输的应用,比如文件传输 |
2.TCP三次握手,两次行不行,四次行不行,四次挥手
三次握手
第一次: client -> SYN = 1, seq = x
第二次: server -> ACK = x + 1,SYN = 1,seq = y
第三次: clinet -> ACK = y + 1
两次握手行不行?答案当然是否定的
三次握手是通信双方为了确信自己和接收方的发送能力和接受能力都是正常的
第一次: 服务器:客户端发送能力✔,服务器接受能力✔
第二次: 客户端:客户端发送能力✔,接受能力✔,服务器发送能力✔,接受能力✔
第三次: 服务器:客户端接受能力✔,服务器发送能力✔
3.HTTP请求方法有哪些,PUT和POST的区别
get、post、delete、head、put
幂等性
通俗来讲就是不管进行多少次重复的操作,都是实现相同的结果
GET,DELETE,PUT是幂等操作,post不是,原因是前三个重复多次同一个操作,结果是一样的,而POST重复多次,资源就会提交多份
选用PUT还是POST取决于最终要实现的操作,比如发送两个同样的请求,要求产生两个结果,那应该用POST,要求产生一个结果那就用PUT
4.GET和POST的区别
- | GET | POST |
---|---|---|
后退/刷新 | 无害 | 数据会被重新提交 |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded或multipart/form-data,二进制数据使用多重编码 |
历史 | 参数保留在浏览器历史中 | 参数不会保存在浏览器历史中 |
安全性 | 安全性较差,参数拼接在url中 | 相对GET更安全 |
可见性 | 数据在URL中,所有人可见 | 数据在form data中 |
由于GET请求的数据能够被缓存,所以有时不能返回正确的数据
解决:服务器端设置缓存失效时间,在请求中添加时间戳的方式
5.HTTP状态码,301,302
-
1XX: 服务器收到请求,需要请求者继续执行操作
-
2XX: 相应成功,操作被成功接受并处理
- 200: ok
- 203: Non-Authoritative,非授权信息,请求成功,但返回的meta信息不在原始的服务器,而是一个副本
-
3XX: 重定向,需要进一步操作以完成请求
- 301: 永久重定向
- 302: 临时重定向
- 304: not modified,缓存有效的状态码,缓存失效时返回200
-
4XX:客户端错误,请求语法错误或无法完成请求
- 400: Bad Request,客户端请求的语法错误
- 401: Unauthorized,要求用户身份认证
- 403: Forbidden,服务器拒绝执行请求
- 404: Not Found
-
5XX: 服务器错误
- 500: 服务器内部错误
- 501:服务器不支持请求的功能,无法完成请求
- 502:Bad GateWay,网关或代理服务器执行请求时,从远程服务器接收到了一个无效的相应
6.Web攻击以及防御(XSS,CSRF)
XSS(跨站脚本攻击)
XSS: 诱使用户点击一个嵌入恶意脚本的链接(很多攻击者利用论坛、微博等发布恶意url)将恶意脚本提交到数据库中,用户浏览网页时,恶意脚本从数据库中被加载到页面中执行
防范XSS攻击
- 对危险字符进行转义
<> / $ ...
- 对输入和输出进行转义
- 设置cookie属性http-only
CSRF(跨站请求伪造)
CSRF:伪造用户信息发送请求,在用户不知情的情况下以用户的名义进行非法操作,原理是利用浏览器的cookie和服务器的session盗取用户身份
防范CSRF
- 验证referer字段,该字段记录该http请求的来源地址 优点:简单易行,缺点: 过度依赖浏览器,不能保证浏览器自身没有安全漏洞
- 设置Samesite cookie,表明该cookie是个同站cookie,不允许第三方加载cookie信息 优点: 简单易行 缺点:影响用户体验
- 在表单中添加令牌,验证码识别请求者的身份
- 服务器端设置csrftoken
7.浏览器存储(cookie,localStorage,sessionStorage)
特性 | cookie | localStorage | sessionStorage |
---|---|---|---|
数据声明周期 | 由服务器生成,可设置生效时间,如果在浏览器端生成cookie,默认是浏览器关闭后失效 | 永久有效,除非手动清楚 | 仅在当前对话下有效, |
大小 | 4K左右 | 5MB | 5MB |
与服务器通信 | 每次都会携带在http头重,cookie过多会带来性能问题 | 不参与服务器通信 | 不参与服务器通信 |
cookie的容量是同一站点的限制,不同的浏览器对同一域下的cookie数量限制不同,同一域名下的cookie总容量不可超过4K
8.浏览器缓存策略(强制缓存和协商缓存)
强制缓存
浏览器请求数据的时候,服务端在response header里面对该文件进行了缓存配置,浏览器在拿到数据之后,在过期时间内不会再去重复请求
强制缓存只有在首次请求才会跟服务器通信,读取缓存资源时不会发出任何请求,状态吗为200,http1.1的版本的实现优先级高于http1.0版本
Key: 如何知道当前时间是否超过了过期时间 http1.0: 通过Expires响应头实现,表示过期时间 http1.1: 通过Cache-Control响应头实现,常用字段是max-age,表示缓存资源将在xxx秒后过期
协商缓存
每次读取数据都要跟服务器通信,并且会增加缓存标识;从第二次通信开始,浏览器会询问服务器资源是否更新,如果命中缓存,资源的装填码为304,未命中则为200
http1.0: last-modified, if-modified-since
http1.1: Etag, if-none-match
9.TCP/IP模型
- 物理层
- 数据链路层
- 网络层:
- 传输层:
- 应用层: