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

推荐订阅源

F
Full Disclosure
Recorded Future
Recorded Future
T
Tenable Blog
S
Securelist
C
CERT Recently Published Vulnerability Notes
T
Threatpost
S
Schneier on Security
A
Arctic Wolf
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
Know Your Adversary
Know Your Adversary
P
Privacy International News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Register - Security
The Register - Security
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
K
Kaspersky official blog
T
True Tiger Recordings
T
Threat Research - Cisco Blogs
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
小众软件
小众软件
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
Cyberwarzone
Cyberwarzone
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tor Project blog
Spread Privacy
Spread Privacy
Malwarebytes
Malwarebytes
P
Proofpoint News Feed
F
Fox-IT International blog
F
Fortinet All Blogs
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
量子位
Latest news
Latest news
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
Project Zero
Project Zero
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
I
Intezer
博客园_首页
腾讯CDC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Darknet – Hacking Tools, Hacker News & Cyber Security

Ruby on Rails

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

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

我们有个比较古老的 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 日

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