美文网首页
http相关

http相关

作者: go_2021 | 来源:发表于2022-02-09 16:02 被阅读0次

    着手做当下最难搞的事,是解决焦虑与迷茫最好的良方。

    http

    https://mp.weixin.qq.com/s/WQpxfwLArltKEjEAdOO2Pw
    http1.0,支持get,post,每次请求都要建立连接。
    http1.1,添加了put,delete等方法支持,链接复用,加入管道概念,客户端可以同时发多个次请求,但是服务端是串行执行。加入了分块传输,提升了大文件传输效率。
    http2.0,不修改http语义,添加spdy协议,提高性能。
    二进制编码,提高压缩率,减少数据大小,数据分的快儿更小,每一块都有流标识。服务端可以组装,并发处理请求。服务端可以push。

    RESTFUL API
    1. 方法名不带动词 http协议増postdeleteput patch(部分更新) 查get
    2. 路径/v1/dog?id=1
    3. 返回数据用json,statushttp的状态码。
    浏览器请求 www.baidu.com 时,背后都干了些啥?

    https://mp.weixin.qq.com/s/dVAPIv7toJLv06P8feUOUw
    https://mp.weixin.qq.com/s/rqa_YoBkkavJ12GAXZHTYA

    1. dns域名解析出ip,子网掩码做与处理,判断是否是和本机一个内网。
    2. 不是内网,开始拼接数据,按照应用层->传输层->网络层进行分包。
      数据发到路由器,转到对方的路由器。

      应用层 http请求头+首行+请求体
      传输层 tcp头+端口
      网络层 ip数据
      数据链路层 1500字节分包 mac地址
      具体发包还有拥塞控制,流量控制,3次握手建立连接。
    3. 对方机器会层层的拆包,把http协议部分交给tomcat 进行处理(connection(endPoint+process+adpter)-> container(host+path)-> springmvc)
    get,post
    • 默认表单的实现,get是把参数拼接到url上,而post是放到请求体里,然后请求体里的数据,后端会根据content_type去解析。
    • postmanidea自带的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跨域保护,验证HTTPReferer

    识别跨域:
    协议+域名(2级也算)+端口

    项目里取消跨域限制:

    1. 返回新的CorsFilter
    2. 重写WebMvcConfigurer
    3. 使用注解@CrossOrigin
    4. 前端 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
    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

    相关文章

      网友评论

          本文标题:http相关

          本文链接:https://www.haomeiwen.com/subject/tinrkrtx.html