和前端吵架的一天

这篇具有很好参考价值的文章主要介绍了和前端吵架的一天。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

前段时间在开发公司的积分商城,前期都没啥问题,一切都很顺利,到了跟前端联调的时候,尴尬了,吵起来了,搞得我很不爽,具体原因如下:

和前端吵架的一天

和前端吵架的一天

和前端吵架的一天

大致原因是:他说get请求携带body他那里处理不了,我就很奇怪了,为什么试配不了,当时很无语,一口咬定就觉得是他的问题,因为我所有的接口都测试过的,用Postman请求过都是可以的,他给的理由是前端封装了,是这样封装的,没办法,当时我只能满怀怨气的改了,贼鸡儿不爽,因为他没给我一个合适的理由,哈哈

自己说服自己

跟他聊完之后,想了很久,总觉得不对,我们公司也不小,是个上市公司,里面大佬还是有的,所以我觉得这样封装肯定是有理由的,主要是想给自己一个理由,不然想不通为啥前端要这样封装,为什么不能做这样的请求!前端说的因为公司这样封装了一套,很明显是错的,他自己也不清楚为什么,就是公司这样规定,所以他遵守了,也这样做了…

然后就开始找资料,看了一些博客,说:

HTTP协议定义的报文是支持GET请求携带body的,所以这个问题不是HTTP协议限制的;使用postman可以传递携带body的GET请求到Spring的web server,所以也不是web server/tomcat限制的;最后,根据逻辑链路排除法,得出的结论是浏览器引擎不支持GET请求携带body。

说了感觉没说,没任何依据,不足以说服人

1、然后:

后来自己去查看了Http协议,结果发现惊喜,里面有一段是这样写的:

A payload within a GET request message has no defined semantics; sending a payload body on a GET request might cause some existing implementations to reject the request.

http规范明确说了get请求携带body属于未定义行为,至于未定义行为有什么后果,那就是各家的实现可以有天壤之别,想怎么实现都可以,所以浏览器最好的做法就是禁止发送带有payload的get请求,因为你根本不知道这个请求在网络上传输时会被解释成什么样子。至于postman之类的工具,我猜可能是因为它本身就是用于调试http请求的,所以支持payload无可厚非。至于某些服务器支持这种语义,也不代表网络上所有设备都支持,所以 GET 不能携带 body 是事实上的标准。

2、继续

其实很多人都强调一点:GET请求不应携带请求体,服务器应忽略(或者说丢弃)GET请求的请求体,依据也能在协议中找到:

[RFC2616] A server SHOULD read and forward a message-body on any request; if the request method does not include defined semantics for an entity-body, then the message-body SHOULD be ignored when handling the request.

[RFC2616] A message-body MUST NOT be included in a request if the specification of the request method does not allow sending an entity-body in requests.

但为什么还是有人这样用呢,甚至开发很久的程序员,也没意识到这个问题,难道是用的人多了?错的也是对的?不过即使这样,也不是这样使用的一个理由!

当然,包括我在内

当然还有一个原因:在后续的http协议中,RFC2616已经过时,把SHOULD应该也去了,要求更加宽松

[RFC7230] Request message framing is independent of method semantics, even if the method does not define any use for a message body.

但错的就是错的

规范地址: datatracker.ietf.org

GET POST PUT DELETE
请求是否有主体 可以有
成功的响应是否有主体 可以有
安全
幂等
可缓存
HTML表单是否支持

后续

后来我跟同事说了这个问题,他立即反驳我说:

但凡你用过es都不会这样说了

看下es的查询接口,是不是GET+body

然后继续查资料:

查了下,ES确实支持用GET+body查询,但文档也说了,并不是所有客户端都支持GET+body,所以查询也同时支持了POST。

虽然对ES了解不深,但我的感觉是ES主要是当作一个数据库来使用的,针对ES的查询也基本是由后端去发起的,因此对客户端的能力(GET能否携带body)是能够提前知道的,而针对web开发的大部分场景并不是这样的,api的作者并不知道客户端的能力,要求必须要使用支持GET+body的请求库才能使用这个接口也是不合理的,因此针对web的api不应该使用GET+body的方式并没有什么问题。

总结来说就是,ES是在特定场景重新去定义了GET+body的语义,而针对通用的web API作者并不适合。

ES对get请求携带body说明:www.elastic.co

结束语

  1. 任何原因都不要主观下结论,事实依据很重要

  2. 事实证明,我是菜逼!!文章来源地址https://www.toymoban.com/news/detail-400760.html

到了这里,关于和前端吵架的一天的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端web入门第一天】01 开发环境、HTML基本语法文本标签

    文章目录: 1. 准备开发环境 1.1 vs Code基本使用 2.HTML文本标签 2.1 标签语法 2.2 HTML基本骨架 2.3 标签的关系 2.4 注释 2.5 标题标签 2.6 段落标签 2.7 换行与水平线标签 2.8 文本格式化标签 VSCode与谷歌浏览器离线版,安装包评论区自提. VSCode默认安装位置:C:UsershpAppDataLocalProgramsMic

    2024年01月25日
    浏览(49)
  • 案例分享-被*队友的mybatis蠢哭的一天

    昨晚加班的时候被队友拉着看一个mybatis的问题,耗费了我一个小时时间,最后差点没被我打死,实在是觉得滑稽,今天回家写下来跟大伙分享一下。 Invalid bound statement (not found),看到这个错我当时就没兴趣了,我说你这不就是xml里没写xxxMapper.java方法对应的语句吗,这还有啥

    2024年02月07日
    浏览(42)
  • 优思学院《供应商质量工程师SQE的一天》

    优思学院今天利用一个故事 《供应商质量工程师的一天》 来谈谈供应商质量工程师的日常工作内容以及质量管理的四个要点。 今天是星期五,就是供应商质量工程师 小优 最有挑战的一天。他需要在一天内完成对三家不同的供应商工厂的抽样检验、过程审核,并对结果进行

    2024年02月05日
    浏览(43)
  • 关于工作流开发前端选型的一点个人见解(bpmn.js与LogicFlow)

    掘金2023年度人气创作者打榜中,快来帮我打榜吧~ https://activity.juejin.cn/rank/2023/writer/747323639208391?utm_campaign=annual_2023utm_medium=self_web_shareutm_source=MiyueFE 首先需要明确的一点是,本文的出发点 纯粹是针对工作流开发 的场景的选型对比,其他业务场景下建议重新调研。 什么是工作

    2024年02月20日
    浏览(47)
  • sql查找最晚一天/日期最大的一条记录 两种方法

    例:查找最晚入职员工的所有信息 建表: 排序,降序。 对hire_date字段排序降序,此时最晚的时间排在第一个,再用LIMIT取出。 LIMIT m,n : 表示从第m+1条开始,取n条数据; LIMIT n : 表示从第0条开始,取n条数据,是limit(0,n)的缩写。 本题limit 0,1 表示从第(0+1)条数据开始,取一

    2024年02月06日
    浏览(44)
  • 使用DALL-E 3模型模拟AI女友的一天 |【人人都是算法专家】

    Rocky Ding 公众号:WeThinkIn 知乎:Rocky Ding 【人人都是算法专家】栏目专注于分享AI行业中业务/竞赛/研究/产品维度的思考与感悟。欢迎大家一起交流学习💪 大家好,我是Rocky。 我们都知道DALL-E 3是和Stable Diffusion、Midjourney并列作为AIGC时代的三大AI绘画核心模型,有着非常大的

    2024年01月22日
    浏览(56)
  • [Java Web]element | 一个由饿了么公司开发的前端框架,让你快速构建现代化、美观的 Web 应用程序。

    ⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:@逐梦苍穹 ⭐所属专栏:Java Web ⭐如果觉得文章写的不错,欢迎点个关注一键三连😉有写的不好的地方也欢迎指正,一同进步😁 https://element.eleme.cn/#/zh-CN/component/installation   Element 是

    2024年02月05日
    浏览(93)
  • 数据分析师真实的工作是怎样的?看完他的一天,才明白为什么别人比你挣得多

    如果你认为数据分析师只能跑数据,那可千错万错了,数据分析师的真实工作究竟如何? 昨天就又双叒被支付宝的账单刷屏了。在这个大数据时代,通过数据,不仅可以分析消费行为,还可以分析一个人社交媒体及在互联网中的社会影响力、知名度及社会地位,而且加上实名

    2024年02月08日
    浏览(45)
  • [开发|前端] dayjs获取月份和季度起始时间

    获取季度起始日期 要获取季度的起始日期,可以使用Day.js的startOf方法结合 quarter 单位来实现。 下面是一个示例代码,演示如何使用Day.js获取当前季度的起始日期: 在这个示例中,我们首先导入了 Day.js 库和 quarterOfYear 插件,该插件添加了用于季度操作的方法。然后,我们使

    2024年02月10日
    浏览(45)
  • 【安全】被黑客要挟的一天,All your data is a backed up. You must pay 0.25BTC

    【 写在前面 】All your data is a backed up. You must pay 0.25 BTC to xxxxxx 48 hours for recover it. After 48 hours expiration we will sell all your data on dark markets and the database dump will be dropped from our server! 被黑客盯上的一天,之前自己搭建了一套数据库,今天一看数据表不见了,居然多了一份这个表Z_R

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包