问题标签 [http-status-code-412]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rest - HTTP Response 412 - can you include content?
I am building a RESTful data store and leveraging Conditional GET and PUT. During a conditional PUT the client can include the Etag from a previous GET on the resource and if the current representation doesn't match the server will return the HTTP status code of 412 (Precondition Failed). Note this is an Atom based server/protocol.
My question is, when I return the 412 status can I also include the new representation of the resource or must the user issue a new GET? The HTTP spec doesn't seem to say yes or no and neither does the Atom spec (although their example shows an empty entity body on the response). It seems pretty wasteful not to return the new representation and make the client specifically GET it. Thoughts?
http - HTTP 状态 412(前提条件失败)和数据库版本控制
我正在实现一个访问数据库的 RESTful Web 服务。对数据库中的实体进行版本控制以检测多个更新。例如,如果当前值为{"name":"Bill", "comment":"tinker", "version":3}
,如果一个用户 PUT {"name":"Bill", "comment":"tailor", "version":3}
,则请求将成功(200 OK),新值为{"name":"Bill", "comment":"tailor", "version":4}
。如果第二个用户 PUT{"name":"Bill", "comment":"sailor", "version":3"}
请求将失败(409 冲突),因为版本号不匹配。
现有的非 RESTful 接口,因此无法更改数据库的设计。RESTful 接口调用一个现有的接口来处理检查版本的细节。
RESTful Web 服务的经验法则是尽可能遵循 HTTP 的细节。在这种情况下,如果版本不匹配,在请求中使用条件标头并返回 412 Precondition Failed 会更好吗?适当的标题似乎是 If-Match。此标头采用 ETag(实体标签),它可以是资源当前状态表示的哈希值。
如果我这样做,ETag 将是为了外观,因为版本仍然是我正在测试的真实内容。
除了“让它更加 RESTful”之外,我有什么理由这样做吗?
rest - 什么时候响应 HTTP 412 错误是合适的?
我不清楚什么时候应该和不应该返回 HTTP 412: Precondition Failed, error for a web service?我正在考虑在验证数据时使用它。例如,如果客户端 POST 的 XML 数据并且该数据缺少必需的数据元素,则响应 412 和错误描述。
这是否符合响应 HTTP 412 的精神,还是应该使用其他东西(例如另一个 http 错误代码或 Web 应用程序异常)?
http - 如果出现 412“前提条件失败”,是否可以返回实体的最新版本?
当使用“If-Match”标头执行 PUT 或 DELETE 时,如果客户端发送的 ETag 指示过时,而不是仅返回 412,我想返回整个最新实体(包括其HTTP 标头中的新 ETag),因此客户端不必执行另一个 GET 往返,否则他们肯定会这样做 - 在我的用例中,至少在 100% 的情况下他们会这样做。
我在 412 的文档中没有看到任何支持或反对的内容:http: //www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.13
比如说,状态码 409,一般来说,对 4xx 错误的响应主体做任何喜欢的事情似乎都不是问题:http: //www.w3.org/Protocols/rfc2616/rfc2616 -sec10.html#sec10.4.10
那么,有什么东西(尤其是在 HTTP 规范中)反对返回完整的最新实体及其 ETag?
api - Http 状态码 400 与 412
所以我正在开发一个 Rest API
当创建资源的 POST 并且缺少必填字段时,我应该返回什么?
400 - 错误请求
或者
412 - 前提条件失败
为什么?
javascript - 包含 $.ajax() 请求的页面的每一次刷新都会导致状态 412 错误
该问题仅发生在 Mac 版 Safari 上。我正在加载干净的 json 数据文件,其中包含以下内容:
我的启用 CORS 的服务器具有以下内容:
我捕获了请求标头,我看到的唯一区别如下。需要明确的是,失败的请求中包含以下内容,而下一次刷新不包括以下内容。因此向 Access-Control-Allow-Headers 添加了项目:
这是服务器配置问题、jQuery 使用问题还是其他问题?让我感到奇怪的是,Safari 在每次刷新时都会不断更改标题。
macos - OSX 10.9 升级后返回 412 (Precondition Failed) 的 KendoUI 页面
我有一个在本地主机上运行的站点,它使用从 kendoPanelBar 加载的不同 KendoUI 网格。在我更新到 OSX 10.9 (Mavericks) 之前一切正常。现在我可以使用 $.post jquery 调用加载一次网格,但是第二次尝试加载网格时我收到 412(前提条件失败)。我必须先清空缓存,然后它才能让我再次加载网格。最奇怪的是,这只发生在 Safari 7.0 中。Firefox 24.0 正常工作,可以毫无错误地加载网格。
这是我的网络服务器配置的问题,可能由于上传而发生了变化,还是......这是否只是本地化为新 Safari 的问题,或者......我的代码中是否有一些东西可能在我的 Safari 浏览器中丢失现在是严格检查吗?
http - Http 状态码 412 是否适合基于我们域中定义的规则的错误
我有一个返回Voucher
对象的 api 端点。
代金券是从第三方取回的。
我们会检查/验证某些条件,例如过期日期。
因此,如果客户端应用程序请求/voucher/1234
从第三方检索 ID 为 1234 的凭证。
如果过期日期是 < 现在,我们需要返回一个错误。
我想返回标准的 HTTP 错误。
哪个最合适?
我最初认为是 412,但现在我不确定。
.net - 使用 Expect: 100-Continue with HttpClient 处理失败
我对优化调用 REST API 的客户端的行为很感兴趣。在此 API 中,特定的 POST 操作允许包含If-None-Match: *
标头,如果正在上传的项目已经存在于系统中,这会导致服务器报告 HTTP 412 响应。与 一起使用时Expect: 100-continue
,服务器将以 412响应,而不是发送 100 响应,如RFC 2616 §8.2.3中所述。我想在客户端检测到这种情况,并避免在这种情况下传输请求的正文。
直接使用 时HttpWebRequest
,实现起来相当简单。在调用GetRequestStream
(或GetRequestStreamAsync
)之后,但在将数据写入结果之前Stream
,代码只需要检查HaveResponse
属性。如果值为true
,关闭请求流并继续调用GetResponseAsync
。
现在我正在努力过渡到使用HttpClient
而不是HttpWebRequest
直接使用(以改进跨多个平台的支持)。目前,我使用 aStreamContent
来表示请求的主体,并观察流的内容是否已发送,无论服务器是否发送了 100 或 412 响应。如何使用HttpClient
andHttpRequestMessage
而不是执行与上述优化类似的优化HttpWebRequest
?
events - 设备上的 UPnP 订阅续订失败
当我尝试在设备上续订 UPnP 事件订阅时,我收到 412 HTTP 错误:前提条件失败,SID 错误。
此错误仅在一台设备上发生,所有其他设备都可以正常工作。Buggy 设备是 D-Link XTreme N GIGABIT 路由器 DIR-655(固件版本:1.34WW,2010/09/30),硬件版本:A4。
UPNP 订阅日志(被 Wireshark 捕获)
订阅:
续订:
我第一次尝试在到期前 5 秒内续订,例如在初始订阅后的第 55 秒。第二次尝试:在第 45 秒,但效果相同。
我还尝试在订阅请求中使用 HTTP/1.1(并添加“Connection:close”标头),但没有效果。
我做错了什么?
UPD1将模板更新到 1.37WW 没有任何改变
UPD2
当我在订阅后立即尝试续订订阅时,它可以工作。等待 750 毫秒并更新 - 有效。等待 900 毫秒并更新 - HTTP 412 失败。似乎 D-Link 设备中存在错误(另一个 D-Link 路由器 DI-624 以相同的方式工作)。英特尔设备验证器(https://software.intel.com/en-us/articles/intel-tools-for-upnp-technologies)验证 DIR-655 和 DI-624 事件没有错误,但是,我认为,没有在订阅和续订步骤之间暂停。所以,我认为,UPNP 事件不是一种可靠的机制,最好不要使用它。
这种设备行为损害了 upnp 事件机制的想法。