惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
T
Threat Research - Cisco Blogs
Cloudbric
Cloudbric
Recent Commits to openclaw:main
Recent Commits to openclaw:main
I
Intezer
Attack and Defense Labs
Attack and Defense Labs
P
Privacy International News Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
L
Lohrmann on Cybersecurity
C
Cybersecurity and Infrastructure Security Agency CISA
V2EX - 技术
V2EX - 技术
AWS News Blog
AWS News Blog
O
OpenAI News
L
LINUX DO - 最新话题
N
News | PayPal Newsroom
PCI Perspectives
PCI Perspectives
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Latest news
Latest news
D
Darknet – Hacking Tools, Hacker News & Cyber Security
A
Arctic Wolf
Spread Privacy
Spread Privacy
G
GRAHAM CLULEY
T
Tor Project blog
博客园_首页
Know Your Adversary
Know Your Adversary
有赞技术团队
有赞技术团队
S
Secure Thoughts
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
T
Tailwind CSS Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
V
Visual Studio Blog
J
Java Code Geeks
Cisco Talos Blog
Cisco Talos Blog
Schneier on Security
Schneier on Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security Affairs
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
宝玉的分享
宝玉的分享
量子位
Last Week in AI
Last Week in AI
月光博客
月光博客
罗磊的独立博客
S
SegmentFault 最新的问题

Ruby on Rails

以后发软件库是不是只用发 spec? - V2EX OpenCode + GLM-4.7 还是弟弟, Antigravity + Gemini 3 Pro 还是强不少,不写一行代码转译了一个 Gem: rb-edge-tts - V2EX Ruby on Rails 用着太舒服了 - V2EX 手把手教您在 Baklib 上搭建一个模板网站 - V2EX 我回来了, Ruby on Rails - V2EX Ruby on Rails 国内使用情况 - V2EX 推荐一个 Admin Panel - V2EX 当我更换 mac m2 芯片 无法使用使用 mysql2 报错 symbol not found in flat namespace (_mysql_affected_rows) - V2EX Rails 7 发布 - V2EX 大家写 ruby on rails applications 的时候一般怎么写前端页面? - V2EX 如何动态显示和保存一系列输入框中的内容 - V2EX ruby on rails: no implicit conversion of nil into String - V2EX Rails 现在国内是不是有点凉了? - V2EX Rails 6.1 升级记录 - V2EX 使用 Vue 前端、Rails 后端实现图片上传的功能 - V2EX 写了个在线约会的日历,已经部署在公有云上了,正文有访问链接 - V2EX Ruby, Rails 不值一学 - V2EX Rails new 命令一直转圈怎么办? 大家都用什么来部署 ROR 的? - V2EX ruby on rails 做 web 开发,效率真是杠杠的啊 - V2EX 如果有一天 DHH 没有再维护 ror 了怎么办? - V2EX Ruby on Rails 怎么样? - V2EX 世界无人帆船锦标赛,招募两名 Ruby 志愿者的参与 正在看 restful rail development 这本书,按照书上写的测试报错了,大佬帮我看看 - V2EX spree 电商框架怎么样 - V2EX 送几本《Rails 5 敏捷开发》 - V2EX Rails 布署最佳实践 Rails Seed Migration 问题 - V2EX 心好累 ruby 发一个 OAuth1.0 的请求怎么这么难 - V2EX Ruby on Rails 的工程怎么做 heap dump? - V2EX 为什么是 Ruby on Rails?而不是 Rails on Ruby? - V2EX Turbolinks 会导致微信网页在 iOS 上点击链接时出现 invalid signature 错误, Android 和开发者工具则正常 - V2EX ruby on rails 如何上传 swf 文件 - V2EX 球写一段及其简单的 Ruby 代码 - V2EX 初学者请教一个 ruby 使用 leveldb 的问题 - V2EX Rails 本地开发,访问网站巨慢,你们都是怎么解决的? - V2EX RESTful API 设计问题(很基础) - V2EX ruby 中使用类变量是 bad code style 吗?有没有替代品? - V2EX jenkins 执行 ruby -v 和在 slave 上执行 ruby -v 版本不一致 - V2EX Tower,Worktile,Teambition 在低层存储上的差别是什么? - V2EX 良心之作,全站工程师的独白 [视频] - V2EX 有没有人用个人电脑+花生壳+RoR,在家搭建一个自己的服务器? - V2EX 之前已经可以写一些简单的东西了,现在发现都忘完了,有没有类似经历的同学?怎么破? - V2EX 视频推荐:使用 Rails 5 开发一款 Ruby on Rails app - V2EX Ruby on Rails 教程(原书第 4 版)发布 - V2EX 一个美女程序员开发的 Rails App - V2EX 需要长期运营的项目,千万别用 rails - V2EX Rails 出 5.0 了 - V2EX ruby 如何做 race conditions 测试? - V2EX
后端收到两次重复 api 请求,如何判断第二次是重复的? - V2EX
gamesover · 2022-03-13 · via Ruby on Rails

这是一个创建于 1555 天前的主题,其中的信息可能已经有所发展或是发生改变。

我们有个比较古老的 app ,前端是 ember ,后端是 rails

以前一直都好好,最近遇到 2 次,后端收到貌似重复的 api post 请求

除了请求的发送的时间不同,数据传过来是一模一样的

后端有没有办法判断出是 chrome 自动把 api request 重复发送了一遍,有这种可能吗

还是说用户又点了一次提交按钮

但照理,提交按钮点一次后就 disable 了啊,实在不懂为什么会出现这种情况

  • API
  • 重复
  • 请求
  • 按钮

    30 条回复    2022-03-14 16:33:11 +08:00

    waterlaw

    1

    waterlaw      2022 年 3 月 13 日 via Android

    有可能卡住了还没 disabled ,用户又点了一次, 我们的做法是 {token}+url 做分布式锁的 key, 锁 1 秒后释放,否则提示请求过于频繁。

    waterlaw

    2

    waterlaw      2022 年 3 月 13 日 via Android

    用户输入不可靠,你怎么判断是浏览器问题还是被爬虫了呢?

    wellsc

    4

    wellsc      2022 年 3 月 13 日 via Android   ❤️ 1

    保证接口幂等呗

    codehz

    5

    codehz      2022 年 3 月 13 日 via Android

    加一个 seq 参数,前端 js 确保每次主动调用的时候都是+1 的,后端过滤掉同会话下重复的 seq id(再重复就是业务流程的问题了

    iseki

    6

    iseki      2022 年 3 月 13 日 via Android   ❤️ 1

    api 加个 uuid 和时间戳,比较时间范围和 uuid 重复

    elfive

    7

    elfive      2022 年 3 月 13 日 via iPhone   ❤️ 3

    关键字:幂等性

    IvanLi127

    8

    IvanLi127      2022 年 3 月 13 日 via Android

    每次请求带一次性 token ,用过后就作废。

    xuanbg

    9

    xuanbg      2022 年 3 月 13 日

    保证接口幂等就好了呀,前端是可以做防抖,但那只是对用户体验的优化,不能从根本上解决问题。

    ichou

    10

    ichou      2022 年 3 月 13 日 via iPhone

    更大的可能性是 js 事件重复绑定,手抖会有时间差的

    Chism

    11

    Chism      2022 年 3 月 13 日 via Android

    判断 ip ,header ,body 跟上一次一模一样,而且时间间隔很短,例如 5 秒内,都认为是重复请求。
    这个可能需要结合 redis 比较方便,ip ,header ,body 内容凑一起 md5 一下作为 key ,要返回的内容作为 value ,重复请求就从 redis 里返回上次的数据。
    我没这么做过,纯属想象

    ch2

    12

    ch2      2022 年 3 月 13 日

    接口在前面做个限流,1 秒 1 次

    mostkia

    13

    mostkia      2022 年 3 月 13 日

    前端回传的表单中,可以额外增加一个计数器参数。每次点击提交按钮进行自增,如果你后台只想要第一次的请求,可以读取这个 index 来进行判断。一般也不用额外操作,保存在某个变量里就行,页面关闭刷新后 rest ,如果需要适应刷新,可以存到 cookie 里面,浏览器关闭后释放

    paradoxs

    14

    paradoxs      2022 年 3 月 13 日   ❤️ 1

    直接让前端改就行了啊。 隐藏一个 int i =0; 提交之后+1 , 第二次不让提交或者后端看到 i 不等于 0 就知道怎么处理了啊。

    haoliang

    15

    haoliang      2022 年 3 月 13 日

    如果用户是不是通过正常手段发起的 post 请求,后端防不住啊。

    我比较实际,说到 post 幂等,我能想到的具体可操作步骤是:后端响应 html 的 form 中带个 xx 字段,提交时回传,后端插入数据时保证那个 xx 字段唯一。保证字段唯一,可以在数据库表中加字段&unique ,也可以放在 redis 的一个时间桶中,或者其他没想到的方式。

    wolfie

    16

    wolfie      2022 年 3 月 13 日

    根据业务上幂等。

    zoyua

    18

    zoyua      2022 年 3 月 13 日 via iPhone

    前段防抖或者后端针对用户做限流

    pengtdyd

    20

    pengtdyd      2022 年 3 月 13 日

    为什么要判断?“除了请求的发送的时间不同,数据传过来是一模一样的” 上面说幂等的我想问一下,难道你们的接口在这种情况下多次请求的结果会不一样???

    lower

    21

    lower      2022 年 3 月 13 日

    微信浏览器之前有这种相似的坑,微信浏览器客户端的请求会被微信服务器代理再发到 商户服务器……出现过莫名其妙的重复请求👿

    iseki

    22

    iseki      2022 年 3 月 13 日

    @pengtdyd 比如说创建资源(订单)的接口,如果不增加额外的 限制,不幂等才正常吧

    Suddoo

    23

    Suddoo      2022 年 3 月 13 日

    不同时间发过来的请求,入库之前先去表里查一下,已存在就直接返回前端,数据已存在
    同时发过来的请求,后端加锁,相当于拒绝其中一个请求

    sparky

    24

    sparky      2022 年 3 月 13 日 via Android

    用 redis 记录下状态

    a852695

    25

    a852695      2022 年 3 月 13 日

    用 seq 来标记,客户端发起协议时候带上 seq ,服务器回复 seq+1 ,客户端更新 seq

    jdOY

    26

    jdOY      2022 年 3 月 13 日

    对请求参数做 md5 校验,可以用 redis 控制时效

    duduaba

    27

    duduaba      2022 年 3 月 14 日

    让前端改的都是伪后端,前端改只是用户体验,解决了根本问题了吗?

    wd

    28

    wd      2022 年 3 月 14 日

    很显然你需要先定义好什么是重复请求,然后我估计解决办法也就有了。

    libook

    29

    libook      2022 年 3 月 14 日

    行业共识:前端去重仅用于用户体验优化目的,业务上要想防止多花还是得由后端去重。

    Jeyfang

    30

    Jeyfang      2022 年 3 月 14 日

    请求头也一样吗