适当的 HTTP 状态代码,适用于每个用户只允许提交一次的情况

     2023-03-31     142

关键词:

【中文标题】适当的 HTTP 状态代码,适用于每个用户只允许提交一次的情况【英文标题】:Appropriate HTTP status code for case when only one submission per user is allowed 【发布时间】:2016-01-20 16:53:08 【问题描述】:

我正在为我的 API 设计一个端点,每个用户只允许提交一次。在阅读了规范并尝试找到最佳响应后,我犹豫地计划在用户尝试提交第二个时使用 403 - Forbidden

10.4.4 403 禁止

服务器理解请求,但拒绝执行。 授权将无济于事,并且不应重复请求。如果 请求方法不是 HEAD 并且服务器希望公开 为什么请求没有被满足,它应该描述原因 对于实体的拒绝。如果服务器不想让 此信息可供客户端使用,状态码 404(不 Found) 可以代替。

尽管 403 意味着访问响应,但我一直有这样的印象 - 不一定是响应状态问题的东西。它是否正确?或者我应该在这里使用更好的状态码吗?

【问题讨论】:

我可以看到的两个选项是发送 403 或 429。老实说,虽然两者都不适合您尝试做的事情,但对于您想要报告的内容来说,两者都可以接受。 有趣。我以前从未使用过 429,但是,是的,它几乎适合:429 状态代码表明用户在给定的时间内发送了太多请求(“速率限制”)。如您所知,这不是速率限制问题,而是状态问题,但我认为这可能会更详细地向最终用户解释该错误。 在您的 API 中,您是仅返回状态代码,还是包含状态对象?假设使用 JSON,您可以发送状态代码 403 和内容 "status": "code": 403, "message": "This account has already made a submission",以便消费者可以接受状态代码、接受内容或两者兼而有之。 【参考方案1】:

我一直 403 遇到授权/身份验证问题,所以我有点困惑 ;) 下面是我要考虑的代码列表:

403 Forbidden - (如上所述) 409 Conflict - 由于资源处于无法更改的给定状态,因此它也是通知用户问题的良好状态。

只是好奇:

410 Gone - 请求可以只发送一次,因此端点可能无法用于后续请求。我不认为这是个好主意,因为端点仍然可用,但不会处理来自特定用户的请求。嗯..可能会被认为很奇怪。

我保证403409 最终会使用409429 似乎不是一个好主意,因为它与网络(宽带、吞吐量)问题有关,而不是与资源本身有关。

【讨论】:

对于一般不成功的请求(不是错误),适当的 HTTP 状态代码响应是啥?

】对于一般不成功的请求(不是错误),适当的HTTP状态代码响应是啥?【英文标题】:WhatistheappropriateHTTPstatuscoderesponseforageneralunsuccessfulrequest(notanerror)?对于一般不成功的请求(不是错误),适当的HTTP状态代码响应是什么?【发... 查看详情

每个用户只允许一个会话(代码片段)

我们有一个使用struts2,spring和hibernate开发的web应用程序。该应用程序需要一个用户只能从一个浏览器登录的功能。假如用户x,登录到pc-1浏览器ff,那么他就无法从任何其他地方登录。我通过实现会话映射尝试了它并将会话存储... 查看详情

tokenauth认证(代码片段)

支持跨域访问,无状态认证特点支持跨域访问:Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输无状态(也称:服务端可扩展行):Token机制在服务端不需要存储session信息,因为Token... 查看详情

我已经将tkinter窗口划分为单元格(使用框架)。如何定义适用于每个单元格的方法?(代码片段)

我无法获得我创建的方法来应用我在tkinter中创建的所有帧。使用Python3.7。我使用Frame在tkinter中创建了一个简单的网格,并使用Canvas为每个单元着色。现在我想使用一种方法,允许我用光标悬停在单元格上时突出显示单元格,但... 查看详情

Gmail 推送通知错误(每个开发人员只允许一个用户推送通知客户端)

】Gmail推送通知错误(每个开发人员只允许一个用户推送通知客户端)【英文标题】:Gmailpushnotificationerror(Onlyoneuserpushnotificationclientallowedperdeveloper)【发布时间】:2015-10-2108:35:54【问题描述】:我尝试在我的两个gmail帐户上执行gma... 查看详情

CORS 适用于 plnkr,但不适用于浏览器:“响应具有 HTTP 状态代码 403”

】CORS适用于plnkr,但不适用于浏览器:“响应具有HTTP状态代码403”【英文标题】:CORSworksonplnkr,butnotfrombrowser:"TheresponsehadHTTPstatuscode403"【发布时间】:2015-10-2408:46:18【问题描述】:您好,我一直在plnkr上开发angularjs应用程... 查看详情

哪个 HTTP 状态码表示用户名或密码不正确?

】哪个HTTP状态码表示用户名或密码不正确?【英文标题】:WhichHTTPstatuscodetosayusernameorpasswordwereincorrect?【发布时间】:2014-11-2311:46:10【问题描述】:我正在实现一个简单的注册/登录模块。在测试用户凭据时,我开始考虑哪种HTTP... 查看详情

适用于所有用户的 BIM 360 查看器,无需自定义集成

】适用于所有用户的BIM360查看器,无需自定义集成【英文标题】:BIM360viewerforalluserswithoutcustomintegration【发布时间】:2021-12-1016:33:48【问题描述】:在不为每个用户启用应用程序配置的情况下,我如何以及可以为所有BIM360用户构... 查看详情

Sql Server 只允许每个用户使用一个活动图像

】SqlServer只允许每个用户使用一个活动图像【英文标题】:SqlServeronlyallowoneactiveimageperuser【发布时间】:2013-07-1301:33:51【问题描述】:我正在尝试添加到我们有tblUsers表的现有数据库中。截至目前,我们将用户图像存储在文件系... 查看详情

REST API 服务针对验证失败返回啥适当的 HTTP 状态代码?

】RESTAPI服务针对验证失败返回啥适当的HTTP状态代码?【英文标题】:What\'sanappropriateHTTPstatuscodetoreturnbyaRESTAPIserviceforavalidationfailure?RESTAPI服务针对验证失败返回什么适当的HTTP状态代码?【发布时间】:2010-12-2922:02:18【问题描述... 查看详情

Laravel:每个用户一次只允许一个会话

】Laravel:每个用户一次只允许一个会话【英文标题】:Laravel:Onlyallowingonesessionperuseratatime【发布时间】:2015-03-1208:32:36【问题描述】:在Laravel4中是否可以一次只允许每个用户一个会话?例如,如果用户登录并且已经有其他会话... 查看详情

是否有适用于“手柄”的适当“所有权在一个包中”?

】是否有适用于“手柄”的适当“所有权在一个包中”?【英文标题】:Isthereaproper\'ownership-in-a-package\'for\'handles\'available?【发布时间】:2013-02-1415:22:02【问题描述】:Handles具有除指针之外的适当语义。所以对我来说一个这样的... 查看详情

将代理与适用于 Java 的 Google HTTP 客户端库一起使用

】将代理与适用于Java的GoogleHTTP客户端库一起使用【英文标题】:UsingproxieswithGoogleHTTPClientLibraryforJava【发布时间】:2012-12-2502:40:55【问题描述】:我使用GoogleHTTPClientLibraryforJava发出简单的JSON请求并解析响应。当我不通过代理时... 查看详情

iTunes Connect 认为我的应用程序适用于 iPad 和 iPhone,而实际上它只适用于 iPad

】iTunesConnect认为我的应用程序适用于iPad和iPhone,而实际上它只适用于iPad【英文标题】:iTunesConnectthinksmyappisforiPadandiPhone,whenit\'sreallyjustforiPad【发布时间】:2014-12-2922:38:45【问题描述】:我已经准备好我的iPad应用程序(带有键... 查看详情

Facebook 应用程序请求 user_likes 的权限仅适用于某些用户

】Facebook应用程序请求user_likes的权限仅适用于某些用户【英文标题】:FacebookAppaskpermissionforuser_likesworksonlyforsomeusers【发布时间】:2015-06-0811:08:58【问题描述】:我正在制作测试Meteor(JS)应用程序,点击“使用facebook登录”后,应... 查看详情

为啥这只适用于 main 中的所有内容?

】为啥这只适用于main中的所有内容?【英文标题】:Whydoesthisonlyworkwitheverythinginmain?为什么这只适用于main中的所有内容?【发布时间】:2014-01-1022:42:02【问题描述】:所以我试图完成这个挑战:http://www.reddit.com/r/dailyprogrammer/comme... 查看详情

Edittext 只允许字母(以编程方式)

...个只允许字母(小写和大写)的editTextview。它适用于以下代码:edittv.setKeyListener(DigitsKeyListener.getInstance("abcdefghijklmnopqrstu 查看详情

操作系统第四章【2】内存空间管理---连续

...区、少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。 2需要的数据结构建立一记录相关信息的分区表(或分区链表),表项有:起始位置大小 状态分区表中,表项值随着内存的分配和释放而动态改变3... 查看详情