HTTP的状态码

今天有一个比较特殊的需求。在mod_perl中根据情况返回不同的状态码200和203,但都需要返回一张图片作为内容。本来是需要返回200和204的,但发现返回204的时候浏览器根本就不会显示内容。所以考虑返回203,这时候是可以正常显示的。
但是在mod_perl中自定义状态码一般写成

sub handler {
my $r = shift;
$r->custom_response(Apache2::Const::HTTP_NON_AUTHORITATIVE, $gif);
return Apache2::Const::HTTP_NON_AUTHORITATIVE;
}
$gif中是图片的内容,现在的问题是这样写头部中的content type不能自己设置,始终是text/html,导致不能正常显示。即使加上

$r->content_type("image/gif");

也没有效果,似乎返回不是Apache2::Const::OK时,这些设置都被忽略了。如果不用custom_response,直接print图片的内容,返回的状态码又会自动变成200,好像只要有输出就自动设成200了。
弄了半天,也没有发现有什么API能够直接更改返回的状态码。无奈,后来发现custom_response的第二个参数还可以用文件名,想着用文件名apache应该可以根据扩展名判断文件类型,可以一试。结果果然如此。
函数调用改成

$r->custom_response(Apache2::Const::HTTP_NON_AUTHORITATIVE, '/images/t.gif');

然后配置文件设置好扩展名的对应

AddType image/gif .gif

就可以了。


附HTTP的状态码,从Apache2::Const中抓出来的。

HTTP_CONTINUE: 100
HTTP_SWITCHING_PROTOCOLS: 101
HTTP_PROCESSING: 102
HTTP_OK: 200
HTTP_CREATED: 201
HTTP_ACCEPTED: 202
HTTP_NON_AUTHORITATIVE: 203
HTTP_NO_CONTENT: 204
HTTP_RESET_CONTENT: 205
HTTP_PARTIAL_CONTENT: 206
HTTP_MULTI_STATUS: 207
HTTP_MULTIPLE_CHOICES: 300
HTTP_MOVED_PERMANENTLY: 301
HTTP_MOVED_TEMPORARILY: 302
HTTP_SEE_OTHER: 303
HTTP_NOT_MODIFIED: 304
HTTP_USE_PROXY: 305
HTTP_TEMPORARY_REDIRECT: 307
HTTP_BAD_REQUEST: 400
HTTP_UNAUTHORIZED: 401
HTTP_PAYMENT_REQUIRED: 402
HTTP_FORBIDDEN: 403
HTTP_NOT_FOUND: 404
HTTP_METHOD_NOT_ALLOWED: 405
HTTP_NOT_ACCEPTABLE: 406
HTTP_PROXY_AUTHENTICATION_REQUIRED: 407
HTTP_REQUEST_TIME_OUT: 408
HTTP_CONFLICT: 409
HTTP_GONE: 410
HTTP_LENGTH_REQUIRED: 411
HTTP_PRECONDITION_FAILED: 412
HTTP_REQUEST_ENTITY_TOO_LARGE: 413
HTTP_REQUEST_URI_TOO_LARGE: 414
HTTP_UNSUPPORTED_MEDIA_TYPE: 415
HTTP_RANGE_NOT_SATISFIABLE: 416
HTTP_EXPECTATION_FAILED: 417
HTTP_UNPROCESSABLE_ENTITY: 422
HTTP_LOCKED: 423
HTTP_FAILED_DEPENDENCY: 424
HTTP_UPGRADE_REQUIRED: 426
HTTP_INTERNAL_SERVER_ERROR: 500
HTTP_NOT_IMPLEMENTED: 501
HTTP_BAD_GATEWAY: 502
HTTP_SERVICE_UNAVAILABLE: 503
HTTP_GATEWAY_TIME_OUT: 504
HTTP_VARIANT_ALSO_VARIES: 506
HTTP_INSUFFICIENT_STORAGE: 507
HTTP_NOT_EXTENDED: 510

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值