http请求在何种情况下会返回409
发布网友
发布时间:2022-05-01 22:03
我来回答
共2个回答
热心网友
时间:2022-06-24 03:12
由于和被请求的资源的当前状态之间存在冲突,请求无法完成。这个代码只允许用在这样的情况下才能被使用:
用户被认为能够解决冲突,并且会重新提交新的请求。该响应应当包含足够的信息以便用户发现冲突的源头。
冲突通常发生于对PUT请求的处理中。
例如,在采用版本检查的环境下,某次PUT提交的对特定资源的修改请求所附带的版本信息与之前的某个(第三方)请求向冲突,那么此时服务器就应该返回一个409错误,告知用户请求无法完成。此时,响应实体中很可能会包含两个冲突版本之间的差异比较,以便用户重新提交归并以后的新版本。
所以,按你的回退之后,返回 409 ,个人感觉,本身应该是用得不太合理,如果这里用409的话,那么他就应该告诉你,有冲突,而且应该告诉你如何修改,但是我看现在那里面都没有给出修改意见,而且我想也肯定没有给你提供修改方法。
下面来说说实现,首先,得满足一种状态,即当某某发生的时候,我就发409:
if($someError) {
header("HTTP/1.0 409 Conflict", true);
}}
第二个参数用于表明,如果前面已经发送过 相同类型的header的,是否使用当前这个替换,默认为 true,但是如果你想让他们并存的话直接使用 false 即可。
<?php
header('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM', false);
?>
在HTTP中,PUT被定义为idempotent的方法,POST则不是,这是一个很重要的区别。
“Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request.”
上面的话就是说,如果一个方法重复执行多次,产生的效果是一样的,那就是idempotent的。
举一个简单的例子,假如有一个博客系统提供一个Web API,模式是这样http://superblogging/blogs/post/{blog-name},很简单,将{blog-name}替换为我们的blog名字,往这个URI发送一个HTTP PUT或者POST请求,HTTP的body部分就是博文,这是一个很简单的REST API例子。我们应该用PUT方法还是POST方法?取决于这个REST服务的行为是否是idempotent的,假如我们发送两个http://superblogging/blogs/post/Sample请求,服务器端是什么样的行为?如果产生了两个博客帖子,那就说明这个服务不是idempotent的,因为多次使用产生了副作用了嘛;如果后一个请求把第一个请求覆盖掉了,那这个服务就是idempotent的。前一种情况,应该使用POST方法,后一种情况,应该使用PUT方法。
也许你会觉得这个两个方法的差别没什么大不了的,用错了也不会有什么问题,但是你的服务一放到internet上,如果不遵从HTTP协议的规范,就可能给自己带来麻烦。比如,没准Google Crawler也会访问你的服务,如果让一个不是indempotent的服务可以用indempotent的方法访问,那么你服务器的状态可能就会被Crawler修改,这是不应该发生的。
国外文章摘录,具体忘记名称作者和url了~
热心网友
时间:2022-06-24 03:13
409代码:通常和网页服务器的PUT相关,由于请求和资源的当前状态相冲突,因此请求不能成功,可能的原因是有些相关的网页已经关闭,或者因为浏览器的原因进不去,再者就是你电脑宽带的问题,用电脑管理软件检测一下看看什么情况。