Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >记录一次ajax 429请求laravel api的错误[通俗易懂]

记录一次ajax 429请求laravel api的错误[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-07-12 13:42:23
发布于 2022-07-12 13:42:23
2.2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是全栈君。

访问频率限制中间件throttle的使用

1、访问频率限制概述

频率限制经常用在API中,用于限制独立请求者对特定API的请求频率。例如,如果设置频率限制为每分钟1000次,如果一分钟内超过这个限制,那么服务器就会返回 429: Too Many Attempts.响应。

通常,一个编码良好的、实现了频率限制的应用还会回传三个响应头: X-RateLimit-Limit, X-RateLimit-RemainingRetry-After(如果达到限制次数只能获取到 Retry-After头)。 X-RateLimit-Limit告诉我们在指定时间内允许的最大请求次数, X-RateLimit-Remaining指的是在指定时间段内剩下的请求次数, Retry-After指的是距离下次重试请求需要等待的时间(s)。

注意:每个API都会选择一个自己的频率限制时间跨度,GitHub选择的是1小时,Twitter选择的是15分钟,Laravel中间件选择的是1分钟。

2、如何使用Laravel的访问频率限制中间件

在Laravel 5.2的新特性中,你可以使用一个新的中间件 throttle,让我们先来看看这个中间件的用法,首先我们定义一个路由规则如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Route::group(['prefix'=>'api'],function(){
    Route::get('users',function(){
        return \App\User::all();
    });
});

然后我们将中间件throttle添加到其中,throttle默认限制每分钟尝试60次,并且在一分钟内访问次数达到60次后禁止访问:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Route::group(['prefix'=>'api','middleware'=>'throttle'],function(){
    Route::get('users',function(){
        return \App\User::all();
    });
});
代码语言:javascript
代码运行次数:0
运行
复制

如果你访问api/users路由,就会看到响应头如下所示:

该响应意味着:

  • 请求成功(状态码为200)
  • 每分钟只能访问60次
  • 在本时间段内还能访问57次

如果访问次数超过60次,响应头如下:

同时,响应内容文本为:Too Many Attempts。

如果44s后重试,页面恢复正常访问。

原因如下: laravel框架api路由默认加载 throttle中间件,该中间件限制了一分钟内访问api的次数:

注释掉这行之后就取消了访问的限制

  1. 第一个参数 60 代表每分钟限制 60 次请求
  2. 第二个参数 1 代表触发了限制规则,则1分钟内禁止访问

或者将 60 调整成 10000 基本就可以保障访问的需求了。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111737.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年2月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ThinkPHP6 API开放平台:调用日志与请求频率限制的实现
在构建API开放平台时,调用日志记录和请求频率限制是两个至关重要的功能。调用日志帮助我们追踪API使用情况、排查问题,而频率限制则保护系统免受滥用和过载。本文将详细介绍如何在ThinkPHP6中实现这两大功能。
编程小白狼
2025/04/25
1100
RESETful API 设计规范
如果你的应用很庞大或者你预计它将会变的很庞大,那 应该 将 API 放到子域下(api.example.com)。这种做法可以保持某些规模化上的灵活性。
全栈程序员站长
2022/06/29
1.7K0
laravel 中配置DingoApi 和JWT
创建 基础控制器、用户认证控制器,对应路由文件中的命名空间 App\Http\Controllers\Api\v1
友儿
2023/10/21
3890
laravel 中配置DingoApi 和JWT
laravel throttle 中间件「建议收藏」
访问控制 Laravel 包含了一个 中间件 用于控制应用程序对路由的访问。如果想要使用,请将 throttle 中间件分配给一个路由或一个路由组。throttle 中间件会接收两个参数,这两个参数决定了在给定的分钟数内可以进行的最大请求数。 例如,让我们指定一个经过身份验证并且用户每分钟访问频率不超过 60 次的路由:
全栈程序员站长
2022/07/12
8040
Django之频率组件
写一个类,继承自SimpleRateThrottle,(根据ip限制)问:要根据用户现在怎么写:
py3study
2020/01/20
6220
Lumen5.X使用频率限制组件笔记
编写中间件,是根据vendor/illuminate/routing/Middleware/ThrottleRequests.php改写 备注:需要先配置cache <?php namesp
苦咖啡
2018/04/28
8840
基于 Redis 实现简单限流器及其在路由中间件中的应用
所谓限流器,指的是限制访问指定服务/路由的流量,通俗点说,就是限制单位时间内访问指定服务/路由的次数(频率),从系统架构角度看,通过限流器可以有效避免短时间内的异常高并发请求导致系统负载过高,从而达到保护系统的目的,另外对于一些日常的业务功能,也可以通过限流器避免垃圾流量,比如用户注册、文章发布、用户评论等,通过限流可以有效阻止垃圾用户的批量注册和发布。
学院君
2021/01/22
3.3K0
设计一个限速器
限速器 (Rate Limiter) 相信大家都不会陌生,在网络系统中,限速器可以控制客户端发送流量的速度,比如 TCP, QUIC 等协议。而在 HTTP 的世界中, 限速器可以限制客户端在一段时间内发送请求的次数,如果超过设定的阈值,多余的请求就会被丢弃。
全球技术精选
2022/05/19
4890
设计一个限速器
你知道 410+ 有哪些状态码吗?
客户端不要给我扔这么大的 Request Body,我处理不过来。在服务器端一般与处理解析 Content-Body 的中间件一起使用。
山月
2023/01/10
7480
你知道 410+ 有哪些状态码吗?
第 14 篇:限制接口的访问频率
限流,顾名思义,就是限制对 API 的调用频率。每一次 API 调用,都要花费服务器的资源,因此很多 API 不会对用户无限次地开放,请求达到某个次数后就不再允许访问了,或者一段时间内,最多只允许访问 API 指定次数。
HelloGitHub
2021/05/14
3.8K0
第 14 篇:限制接口的访问频率
[PHP] 解决laravel 报错:Too Many Attempts
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
唯一Chat
2021/08/20
3.1K0
前端代码规范七大原则_织梦自定义表单源码
有时候我们发送手机验证码,会发现1分钟只能发送1次,这是做了频率限制,限制的时间次数,都由开发者自己决定
全栈程序员站长
2022/09/19
3430
面试题:设计限流器
除了客户端和服务器端的实现,还有另一种方式。我们不是在 API 服务器上设置速率限制器,而是创建一个速率限制器中间件,对你的 API 的请求进行限流。
灬沙师弟
2024/02/22
4760
面试题:设计限流器
Laravel :API 请求频率限制(Throttle中间件),自定义返回JSON类型,自定义时间单位
Laravel 自带了一个 Throttle 中间件,默认的设置是 1 分钟内请求超过 60 次就会触发这个,然后服务器就会返回 429 Too Many Requests
Alone88
2019/10/22
6.1K0
Redis应用之限制访问频率
  我们知道当网站的访问量突然很大的时候肯定会对服务器造成影响,甚至无法访问,如果是正常的访问那么很好说明业务量增大可以考虑系统的扩展,但是如果是搜索引擎爬虫频繁访问或是一些恶意访问,那这时候我们就应该限制这些访问的访问次数。redis刚好可以解决这个问题
用户4919348
2019/04/02
1.9K0
Redis应用之限制访问频率
《ASP.NET Core 与 RESTful API 开发实战》-- (第8章)-- 读书笔记(尾)
在默认的情况下,数据保护 API 有自身的默认配置,如密钥的保存位置、密钥的有效期、所使用的算法等
郑子铭
2021/01/13
8090
《ASP.NET Core 与 RESTful API 开发实战》-- (第8章)-- 读书笔记(尾)
Django Rest Framework 限流(上)
节流又叫限流,限制访问。通常一个用户在多次请求一个页面,或者点击一个链接的时候,前几次点击是没问题的,但是一旦连续几次之后,就会出现访问受限,离下一次访问还有50秒等的字样,在 django rest framework 中有一个专门的组件来做限制访问。
小团子
2019/07/18
6370
Django Rest Framework 限流(上)
laravel5.2的新功能
上一节课我们学了laravel5.3的新特性 https://my.oschina.net/lilugirl2005/blog/787478
lilugirl
2019/05/28
1.7K0
laravel5.2的新功能
API限流解决方案
对客户端的访问频率进行限制可以有效防止因为客户端使用脚本或其他破坏性的方式对服务正常运行造成影响的风险。
时代疯
2021/07/22
1.6K0
Python开源项目解读—ratelimit,限制函数单位时间内被调用次数
这个项目的开发背景是考虑一些服务的API 对于开放人员的访问频率会做一些限制,如果不小心超出了这个限制,服务可能会进制开发人员访问。
用户8949263
2023/11/09
7130
Python开源项目解读—ratelimit,限制函数单位时间内被调用次数
相关推荐
ThinkPHP6 API开放平台:调用日志与请求频率限制的实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验