花了一些时间研究pycurl和libcurl文档,我仍然找不到(简单)方法,如何在pycurl中获取HTTP状态消息(reason-phrase).
状态代码很简单:
import pycurl
import cStringIO
curl = pycurl.Curl()
buff = cStringIO.StringIO()
curl.setopt(pycurl.URL, 'http://example.org')
curl.setopt(pycurl.WRITEFUNCTION, buff.write)
curl.perform()
print "status code: %s" % curl.getinfo(pycurl.HTTP_CODE)
# -> 200
# print "status message: %s" % ???
# -> "OK"
Run Code Online (Sandbox Code Playgroud) 所以派几个不同的状态标题在我的API,包括404,409,201,302等.现在我遇到了问题401 Unauthorized.我正在发送它,如果用户未登录(整个API是权限管理),或者如果用户不满足正在检索/修改的特定资源的特定访问要求.
现在,我还控制前端客户端(jQuery/HTML应用程序),我想区分这两种情况401.我是否应该使用未登录的独特状态?处理它的最佳方法是在标题旁边发送正文内容吗?
使用.htaccess和ErrorDocument 404 /error.php,如果访问无效的URL,例如http://example/css/invalid-file.css:
<?php
echo 'REDIRECT_STATUS: ', $_SERVER['REDIRECT_STATUS'], PHP_EOL,
'REDIRECT_URL: ', $_SERVER['REDIRECT_URL'], PHP_EOL,
'REDIRECT_REQUEST_METHOD: ', $_SERVER['REDIRECT_REQUEST_METHOD'];
Run Code Online (Sandbox Code Playgroud)
输出:
REDIRECT_STATUS: 404
REDIRECT_URL: /css/invalid-file.css
REDIRECT_REQUEST_METHOD: GET
Run Code Online (Sandbox Code Playgroud)
但是在Nginx使用error_page 404 /error.php;它不起作用,Nginx的结果是:
REDIRECT_STATUS: 200
REDIRECT_URL:
REDIRECT_REQUEST_METHOD:
Run Code Online (Sandbox Code Playgroud)
注意:REDIRECT_URL和REDIRECT_REQUEST_METHOD是未定义的
如何设置变量$_SERVER[REDIRECT_STATUS],$_SERVER[REDIRECT_REQUEST_METHOD]并$_SERVER[REDIRECT_URL]使用Ngnix?
fastcgi_params文件:
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param …Run Code Online (Sandbox Code Playgroud) 在正确使用REST时,当请求成功但有警告消息时,什么是适合的HTTP状态代码?
在我们的情况下; 客户端是在浏览器上运行的Web应用程 我们更喜欢以下状态代码:
但是,当请求成功处理时,我们无法确定应使用哪个状态代码,但是需要向客户端发送一些信息或警告消息?
我不确定当客户调用我的 API 时要返回什么 http 状态代码,但由于客户可以修复的原因,请求的操作无法完成。
在这种情况下,http 请求本身可能没问题,但直到客户登录前端并更新其配置后才会成功。(我将返回一个带有一些信息性消息的正文来表明这一点。)
412 - 前提条件失败 - 适合这种情况吗?
这是我的请求网址:
http://server.com/app/user/getuser/?userId=9999
注意,这userId是查询参数。未嵌入的路径参数。
我了解如果请求URL为:http : //server.com/app/user/getuser/9999并且ID 9999在数据库中不存在,则应使用404。
但是userId查询参数应使用哪种HTTP状态?现在我返回的是400,而不是404。
query-parameters http-status http-status-code-404 http-status-code-400
409冲突
表示由于请求中的冲突而无法处理请求,例如多个同时更新之间的编辑冲突.
和
428必备前提条件(RFC 6585)
原始服务器要求请求是有条件的.旨在防止"丢失更新"问题,客户端获取资源的状态,修改它,并将其恢复到服务器,同时第三方修改了服务器上的状态,导致冲突.
然而,428项中提到的"丢失更新"问题不是409项中提到的"编辑冲突"问题吗?
那么问题是两个状态代码之间的区别是什么?我们何时应该使用它们中的哪一个?
概念:我有一个允许用户发布问题的应用程序......当用户点击Ask按钮时,我试图使用Vue.js和Axios提交问题.
问题: 70%的时间问题正确提交,但30%的时间失败并返回"无法加载资源:服务器响应状态为419(未知状态)"
我的Vue组件
<template>
<div id = "main_question_box" class = "tab-pane fade">
<div class="panel-body posting-field-box">
<textarea name="feed_body" class="summernote posting-field form-control"></textarea>
<button class = "example-btn btn btn-xs btn-default pull-right">View Question Examples</button>
</div>
<div class="panel-footer">
<ul class="list-inline pull-right">
<li>
<button @click = "sendPost" class="feed-post-btn btn btn-submit btn-sm btn-success pl-l pr-l">
<span>Ask</span>
<i class="fa fa-paper-plane pl-sm"></i>
</button>
</li>
</ul>
<div class="clearfix"></div>
</div>
</div>
</template>
<script>
axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').getAttribute('content')
export default {
props:['timelineId'],
data(){
return {
feed_body: '',
timeline_id: this.timelineId,
type: 'Question', …Run Code Online (Sandbox Code Playgroud) 在我的 NestJs 项目中,我使用装饰器@Res() res并使用响应对象通过多种情况设置自定义响应标头状态。调用时,有时会记录: Error [ERR_HTTP_HEADERS_SENT]: Cannot remove headers after they are sent to the client
在查看了 Github 上的问题列表并在互联网上搜索后,我知道这与 Express 中间件和 NestJs 的内置过滤器有关。
因此,我在 Controller 方法的末尾删除.send()并添加,日志就会消失。 return;
我的第一个代码:
@Get()
get(@Req() req, @Res() res) {
const result = this.service.getData(req);
res.status(result.statusCode).json(result.data).send(); // when using .send(), it will cause error
}
Run Code Online (Sandbox Code Playgroud)
我修复后的代码如下所示:
@Get()
get(@Req() req, @Res() res) {
const result = this.service.getData(req);
res.status(result.statusCode).json(result.data); // when remove .send(), it will succeed
return;
}
Run Code Online (Sandbox Code Playgroud)
我的问题:我必须 return;在方法的末尾添加吗?为什么使用.send() 有时 会导致错误但并非总是如此 …
我将通过举个例子来解释我的疑问。
假设我正在设计一个资源端点POST,student并且作为 POST 端点的一部分,我希望teacher传递一个 uuid(除了其他细节之外),这是一个必填字段。这样我就可以将 与 关联student起来teacher。现在,如果teacher给定的资源uuid不存在于我的数据库中,那么我应该抛出什么:
400 (Bad request)
404 (Not found).
Run Code Online (Sandbox Code Playgroud)
我认为400这是正确的事情。
如果我有一个像下面这样的请求,那么我会抛出 404 类似
GET /xyy/teachers/{uuid of a teacher}。
如果我错了请纠正我。谢谢。
我有一些方法before_filter,我尝试渲染status: 403.然后我得到:
Missing template v1/examples/index, v1/base/index, application/index with {:locale=>[:en], :formats=>[:html, :text, :js, :css, :ics, :csv, :vcf, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}.
Run Code Online (Sandbox Code Playgroud)
然而,我可以渲染nothing: true或text: 'some text'不渲染此错误.我究竟做错了什么?
我有一个使用 NGINX 和 PHP-FPM 的基于 PHP 的错误页面配置。但是,例如,当我请求example.com/nothing(不存在的页面)时,PHP-FPM 返回 200 状态代码,而不是 NGINX 返回的正确 404 状态代码。其他错误也会发生这种情况(例如:example.com/assets当 NGINX 的状态为 403 时,PHP-FPM 返回 200)。本质上,我希望 PHP-FPM 做的是镜像 NGINX 显示的状态代码(用 NGINX 显示的状态代码覆盖 200 状态代码),因此我的错误页面显示正确的信息。我知道您可以通过在使用时指定状态代码来更改状态代码http_response_code();,但我宁愿让服务器执行此操作,而不让我硬编码正确的状态代码。
错误页面:<? echo http_response_code(); ?>
NGINX 错误页面配置:
set $errorDocs "/var/www/GLOBAL_RESOURCES/error";
recursive_error_pages on;
location ^~ $errorDocs {
internal;
alias $errorDocs;
}
#Resolve error asset location 404s
location /errorAssets {
root $errorDocs;
}
error_page 404 /404.php;
location = /404.php {
root $errorDocs;
include /etc/nginx/xenon-conf/headers/fpm-params.conf;
}
Run Code Online (Sandbox Code Playgroud)
PHP-FPM 设置:
include …Run Code Online (Sandbox Code Playgroud) 如果我的脚本抛出异常,我应该返回什么HTTP状态?
200好的
要么
500内部服务器错误
假设用户请求参数是正确的,但我的脚本中存在一个错误,导致出现错误消息而不是正确的响应(XML,JSON或其他格式).什么应该是HTTP状态?