着手做当下最难搞的事,是解决焦虑与迷茫最好的良方。
http
https://mp.weixin.qq.com/s/WQpxfwLArltKEjEAdOO2Pw
http1.0,支持get,post,每次请求都要建立连接。
http1.1,添加了put,delete等方法支持,链接复用,加入管道概念,客户端可以同时发多个次请求,但是服务端是串行执行。加入了分块传输,提升了大文件传输效率。
http2.0,不修改http语义,添加spdy协议,提高性能。
二进制编码,提高压缩率,减少数据大小,数据分的快儿更小,每一块都有流标识。服务端可以组装,并发处理请求。服务端可以push。
RESTFUL API
- 方法名不带动词
http
协议増post
删delete
改put patch
(部分更新) 查get
- 路径
/v1/dog?id=1
- 返回数据用
json,status
用http
的状态码。
浏览器请求 www.baidu.com 时,背后都干了些啥?
https://mp.weixin.qq.com/s/dVAPIv7toJLv06P8feUOUw
https://mp.weixin.qq.com/s/rqa_YoBkkavJ12GAXZHTYA
- dns域名解析出ip,子网掩码做与处理,判断是否是和本机一个内网。
- 不是内网,开始拼接数据,按照应用层->传输层->网络层进行分包。
数据发到路由器,转到对方的路由器。
应用层 http请求头+首行+请求体
传输层 tcp头+端口
网络层 ip数据
数据链路层 1500字节分包 mac地址
具体发包还有拥塞控制,流量控制,3次握手建立连接。 - 对方机器会层层的拆包,把http协议部分交给tomcat 进行处理
(connection(endPoint+process+adpter)-> container(host+path)-> springmvc)
。
get,post
- 默认表单的实现,get是把参数拼接到
url
上,而post
是放到请求体里,然后请求体里的数据,后端会根据content_type去解析。 -
postman
和idea
自带的httpclint
就比较灵活,就是参数放哪儿都行和get,post
无关。 -
浏览器限制
- url不同浏览器会有不同的限制。
- 一般浏览器post的实现会发2个请求,第一个不发数据返回100后,第二次发数据,所以会比get慢一点。
csrf
https://www.jianshu.com/p/64a413ada155
cross-site request forgery
- 有些网站get方式去修改数据。这种情况下,如果a用户正在登陆,b发给他一个恶意发礼物连接。只要a用户点击直接就把礼物给发了。
- post也会有问题 b可以做一个网站,里面写js只要a用户打开页面,还是可以把礼物给发了,所以就有了
csrf
跨域保护,验证HTTP
的Referer
。
识别跨域:
协议+域名(2级也算)+端口
项目里取消跨域限制:
- 返回新的CorsFilter
- 重写WebMvcConfigurer
- 使用注解@CrossOrigin
- 前端 jsonp
xss
跨站脚本攻击(Cross Site Scripting
)
- 转码为html实体,这样html实体可以正常显示,但是不会当做js执行。
- HttpOnly Cookie js不可以获取cookie。
常见http状态码
2XX 说明请求被正常处理了
- 200 请求正常处理
- 204 请求正常处理 但是没有返回信息
3XX 资源重定向
- 304 表明直接用缓存
请求中有上次资源的更新时间 说明缓存有效是最新的资源
- 301 302 303 307几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送。
- 301 永久性重定向
短链跳转长链,会缓存,忽略短链访问
- 302 临时性重定向
短链跳转长链,会缓存,不会忽略短链访问
redirect方法
- 303 和302有相同的功能 不够303会指定用get来获取新的资源
- 307同302
- 301 永久性重定向
4XX 表明客户端请求错误
- 400 服务端说你发的什么玩意..报文有错误 服务端理解不了
requestBody中的参数 java接收对象 没有这个参数
- 401 说明你这个http需要认证
Unauthorized错误,在项目里的usm中直接ip+端口访问,提示401.因为有security做了拦截需要在url上加用户名@密码
- 403 说明你访问的资源 你没有权限
- 404 说明你访问的资源 没有找到
- 405 你访问资源 用的方法不对
- 413
get请求体太大,或者nginx设置的上传文件大小限制了
- 415 格式不对
要求requestBody 但是传递的param
5XX 表明服务端发生错误
https://segmentfault.com/a/1190000012595322
- 500 代码出现问题了 抛异常了
- 502
tomcat没启动 正在启动
- 503 说明正在 维护 或者超负载了 暂时不能对外服务
超出nginx最大并发数 vue项目分包js 文件太多 请求太多 报这个错误
- 504 超时 后端的服务器
负载太高了 配置错了 mysql负载高 内存运行不过来了运行超出了nginx的超时时间
参考:https://blog.csdn.net/u011001084/article/details/79635162
网友评论