当服务器返回202 - Accepted异步请求的状态代码时,为请求完成提供估计的适当方法是什么?
从HTTP规范(我添加的斜体):
202接受
该请求已被接受处理,但处理尚未完成.[...]
返回此响应的实体应该包括请求的当前状态的指示,以及指向状态监视器的指针或用户可以期望满足请求的某些估计.
以下是一些想法:
Cache-Control吗?X-响应标头,但X-在RFC 6648中不推荐使用标头?X-)特定响应标头?如果是这样,它应该如何命名?SO问题自定义HTTP标头:命名约定给出了一些想法,但在弃用之后它只回答了如何格式化HTTP标头,而不是如何命名它们.所以派几个不同的状态标题在我的API,包括404,409,201,302等.现在我遇到了问题401 Unauthorized.我正在发送它,如果用户未登录(整个API是权限管理),或者如果用户不满足正在检索/修改的特定资源的特定访问要求.
现在,我还控制前端客户端(jQuery/HTML应用程序),我想区分这两种情况401.我是否应该使用未登录的独特状态?处理它的最佳方法是在标题旁边发送正文内容吗?
我正在重写Devise的失败响应,以便我可以设置401状态代码.但是,当用户登录失败时,会将其重定向到"正在重定向"链接的页面.如果我:status => 401从重定向中删除它,它可以正常工作.
class CustomFailure < Devise::FailureApp
def redirect_url
new_user_session_url(:subdomain => 'secure')
end
def respond
if http_auth?
http_auth
else
store_location!
flash[:alert] = i18n_message unless flash[:notice]
redirect_to redirect_url, :status => 401
end
end
end
Run Code Online (Sandbox Code Playgroud)
或者,我想显示flash消息并保留在同一页面上,但添加以下代码行:
render :text => "unauthorized", :status => 401
Run Code Online (Sandbox Code Playgroud)
让红宝石抱怨:
undefined method `render' for #<CustomFailure:0x00000103367f28>
Run Code Online (Sandbox Code Playgroud)
这里发生了什么事?
redirect ruby-on-rails http-status-codes devise http-status-code-401
我正在使用scrapy来抓取我的站点地图,检查404,302和200页.但我似乎无法获得响应代码.到目前为止这是我的代码:
from scrapy.contrib.spiders import SitemapSpider
class TothegoSitemapHomesSpider(SitemapSpider):
name ='tothego_homes_spider'
## robe che ci servono per tothego ##
sitemap_urls = []
ok_log_file = '/opt/Workspace/myapp/crawler/valid_output/ok_homes'
bad_log_file = '/opt/Workspace/myapp/crawler/bad_homes'
fourohfour = '/opt/Workspace/myapp/crawler/404/404_homes'
def __init__(self, **kwargs):
SitemapSpider.__init__(self)
if len(kwargs) > 1:
if 'domain' in kwargs:
self.sitemap_urls = ['http://url_to_sitemap%s/sitemap.xml' % kwargs['domain']]
if 'country' in kwargs:
self.ok_log_file += "_%s.txt" % kwargs['country']
self.bad_log_file += "_%s.txt" % kwargs['country']
self.fourohfour += "_%s.txt" % kwargs['country']
else:
print "USAGE: scrapy [crawler_name] -a country=[country] -a domain=[domain] \nWith [crawler_name]:\n- tothego_homes_spider\n- tothego_cars_spider\n- tothego_jobs_spider\n"
exit(1) …Run Code Online (Sandbox Code Playgroud) IETF RFC草案超文本传输协议(HTTP)状态代码308(永久重定向)将HTTP状态308定义为永久重定向.当然,应该注意到这是一份草案文件,并在其文件标题中包含文本"过期日期:2012年9月27日",我认为这意味着它现在应该被视为无效,但我不熟悉IETF的流程因此对此没有信心.
维基百科文章HTTP状态代码列表使用308的定义,也是:
308永久重定向(批准为实验性RFC)[12]
应使用另一个URI重复请求和所有将来的请求.307和308(如所提出的)并行302和301的行为,但不允许HTTP方法改变.因此,例如,将表单提交给永久重定向的资源可能会顺利进行.
...
[12]:"超文本传输协议(HTTP)状态码308(永久重定向)".IETF.2012年.检索2012年3月27日.
当时微软的Eric Law在使用HTTP/308 推送Web转发时评论了这个HTTP/308代码.这让我发现Firefox在这个意义上支持308.
但是,当我查看python-requests库时,我发现有308的另一种用法:
308: ('resume_incomplete', 'resume'),
Run Code Online (Sandbox Code Playgroud)
这似乎来自Google Gears 可恢复的HTTP请求提案,定义308 Resume Incomplete.似乎有一些用法.当然,这些提案都没有承认对方的存在.
发生什么了?是否308 Permanent Redirect还活着?状态代码308发生了什么?我该怎么办?
有人知道哪种HTTP状态代码适合以下情况吗?
匿名客户端可以从RESTful API的集合中请求一系列项目GET /collection/?range_start=100&range_end=200.示例查询返回包含100个项目的列表(以JSON格式).对于客户可以请求多少项,还有一个限制,比方说300.如果客户要求例如[100,1100]范围内的1000项,那么响应状态代码应该是什么?这意味着超过限制的700项?
应该是400 Bad Request,403 Forbidden,409 Conflict,416 Requested Range不满足(?)还是422 Unprocessable Entity?你会推荐什么?
一个相关的问题和答案建议409,但情况略有不同:https: //stackoverflow.com/a/13463815/638546
当客户端在发出HTTP请求时取消TCP连接时,我想停止在服务器上执行任何工作并返回空响应.什么HTTP状态代码应该返回这样的响应?
根据urllib2文档,
由于默认处理程序处理重定向(300范围内的代码),并且100-299范围内的代码表示成功,因此通常只能看到400-599范围内的错误代码.
然而,以下代码
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
Run Code Online (Sandbox Code Playgroud)
使用代码201(已创建)引发HTTPError:
ERROR 2011-08-11 20:40:17,318 __init__.py:463] HTTP Error 201: Created
Run Code Online (Sandbox Code Playgroud)
那么为什么要urllib2在这个成功的请求上抛出HTTPErrors呢?
这不是太痛苦; 我可以轻松地将代码扩展到:
try:
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
except HTTPError, e:
if e.code == 201:
# success! :)
else:
# fail! :(
else:
# when will this happen...?
Run Code Online (Sandbox Code Playgroud)
但这似乎不是预期的行为,基于文档和我无法找到关于这种奇怪行为的类似问题的事实.
此外,该else块应该期待什么?如果成功的状态代码都被解释为HTTPErrors,那么什么时候urllib2.urlopen()只返回一个类似于文件的正常响应对象,就像所有urllib2文档所指的那样?
我正在开发一个API,它也有一个身份验证/授权组件.
任何人,无论身份验证状态如何,都可以写(POST),但取决于您是否未经身份验证,作为普通用户进行身份验证或作为管理员进行身份验证以及您尝试访问的资源我将返回不同的响应用于GET,DELETE和PUT.
我正在尝试为未经过身份验证和/或授权的用户找出最合适的响应代码.
请记住http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html:
未经授权 - > 401
禁止 - > 403
方法不允许 - > 405
让我们使用一个具体的例子:
(请记住,即使John和Amy被禁止或未经授权,并不意味着他们无法使用不同的HTTP VERB访问相同的资源.)
谢谢.
如果这是显而易见的道歉,但我已经四处寻找并且无法找到答案.
在一个.net Web.config文件中,有人可以告诉我什么设置subStatusCode为-1?
<httpErrors errorMode="Custom" existingResponse="Replace">
<clear />
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/Error.aspx" responseMode="ExecuteURL" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
我的猜测是它意味着所有'子'代码,404.1,404.2等等?
http ×4
rest ×4
python ×2
.net ×1
api ×1
cancellation ×1
devise ×1
http-headers ×1
http-status ×1
httpresponse ×1
redirect ×1
rfc ×1
scrapy ×1
urllib2 ×1
web-config ×1