V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gearh
V2EX  ›  程序员

除了 200 和 404 你们还会主动返回其他的 html status code 吗

  •  1
     
  •   gearh · 2016-07-25 10:56:57 +08:00 · 7489 次点击
    这是一个创建于 3034 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天看一个 web 框架的官方 demo 里
    数据验证失败的时候回返回 status code 422
    所以我在想有没有必要完全按照 html status code 的定义返回
    80 条回复    2016-07-30 19:17:37 +08:00
    Kirscheis
        1
    Kirscheis  
       2016-07-25 11:03:56 +08:00 via Android   ❤️ 1
    403 和 451 啊。。 status code 是方便你自己的应用使用的,内部文档说明白就可以了。像搭在暗网上的很多 web 服务器为了防普通爬虫 200 全部换成 50x 和 40x
    jixiangqd
        2
    jixiangqd  
       2016-07-25 11:05:55 +08:00
    202
    jarlyyn
        3
    jarlyyn  
       2016-07-25 11:12:29 +08:00
    200,401,403,404
    alex321
        4
    alex321  
       2016-07-25 11:27:49 +08:00
    204 & 304
    ladyv2
        5
    ladyv2  
       2016-07-25 11:33:59 +08:00
    302 404 444
    TingHaiJamiE
        6
    TingHaiJamiE  
       2016-07-25 11:34:52 +08:00
    @Kirscheis 可以围观一下你返回 451 的么...
    former
        7
    former  
       2016-07-25 11:35:14 +08:00
    304 和 404
    julyclyde
        8
    julyclyde  
       2016-07-25 11:36:10 +08:00
    429
    lslqtz
        9
    lslqtz  
       2016-07-25 11:36:21 +08:00   ❤️ 1
    233
    ZE3kr
        10
    ZE3kr  
       2016-07-25 11:45:57 +08:00 via iPhone   ❤️ 2
    204 ,作为统计,比 200 返回一个 1px 的 gif 省一点流量

    451 ,用来屏蔽某国,被我实际应用:
    https://ooo.0o0.ooo/2016/07/24/57958c3001953.jpeg
    czheo
        11
    czheo  
       2016-07-25 11:46:21 +08:00   ❤️ 3
    没有人吐槽 html status code 吗?
    SuperFashi
        12
    SuperFashi  
       2016-07-25 11:46:28 +08:00 via Android
    204 和 451
    楼上的 233 什么鬼 hhh
    SuperFashi
        13
    SuperFashi  
       2016-07-25 11:46:48 +08:00 via Android
    @ZE3kr 竟然被你抢了
    jugelizi
        14
    jugelizi  
       2016-07-25 11:47:24 +08:00
    419
    techmoe
        15
    techmoe  
       2016-07-25 11:48:54 +08:00 via Android
    301 302 500
    有的时候 500 不是自己希望返回的,曾经有一个 wp 站,不知道 wordpress 内部怎么实现的,好像捕获到 error 就自动抛 500
    otakustay
        16
    otakustay  
       2016-07-25 11:55:19 +08:00
    @ZE3kr 如果请求是<img>发的,返回 204 在有些版本 firefox 里会控制台报错,因为响应是 image/*却没有 image 的内容
    ZE3kr
        17
    ZE3kr  
       2016-07-25 11:55:55 +08:00 via iPhone
    @techmoe php 编译错误或者是关键错误就会抛 500 。
    Shura
        18
    Shura  
       2016-07-25 11:57:21 +08:00 via Android
    以后可能被广泛使用的 451
    mulog
        19
    mulog  
       2016-07-25 11:57:42 +08:00
    什么是 "html" status code (doge)
    ZE3kr
        20
    ZE3kr  
       2016-07-25 11:58:13 +08:00 via iPhone
    @otakustay 使用 img 场景主要是针对没有 js 支持的情况, 204 确实不适合 img 方式。 img 拿到的数据太少, js 能拿到更多数据,一般用 js 。
    jason19659
        21
    jason19659  
       2016-07-25 12:00:26 +08:00
    10086 12450
    otakustay
        22
    otakustay  
       2016-07-25 12:04:48 +08:00
    @ZE3kr 一般用 img 就是为了发 GET 请求送日志嘛, js 用 ajax 还要撞上跨域……
    yalay
        23
    yalay  
       2016-07-25 12:28:08 +08:00
    @ZE3kr 域名这么牛 ooo.0o0.ooo
    ZE3kr
        24
    ZE3kr  
       2016-07-25 12:29:39 +08:00 via iPhone
    @yalay 这只是个别人的图床,不过确实挺牛。我个人也觉得 ooo 后缀也挺好的
    JJaicmkmy
        25
    JJaicmkmy  
       2016-07-25 12:36:37 +08:00   ❤️ 1
    为什么没人用 418 ?
    gearh
        26
    gearh  
    OP
       2016-07-25 12:53:40 +08:00
    想说 css status code 来着 ,结果打错了
    jarlyyn
        27
    jarlyyn  
       2016-07-25 13:11:41 +08:00
    @gearh
    http status code.....
    hinkal
        28
    hinkal  
       2016-07-25 13:14:39 +08:00
    204
    ThreeBody
        29
    ThreeBody  
       2016-07-25 13:34:30 +08:00 via Android
    会啊,看情况来用
    违规访问 403
    爬虫扫已知漏洞用伪造页面 200 或者 301
    nginx 限制并发和攻击会默认用 503.2
    Yemsheng
        30
    Yemsheng  
       2016-07-25 14:45:09 +08:00
    302, 304, 403, 404
    ChopinWong
        31
    ChopinWong  
       2016-07-25 14:54:22 +08:00
    204
    zeus255
        32
    zeus255  
       2016-07-25 14:58:45 +08:00
    自定义响应码 666
    chinvo
        33
    chinvo  
       2016-07-25 15:02:05 +08:00
    做 API 的时候基本所有 4xx 和 5xx 都用到了……
    tairan2006
        34
    tairan2006  
       2016-07-25 15:59:54 +08:00
    RESTful 的话,大部分都会使用啊。。
    RqPS6rhmP3Nyn3Tm
        35
    RqPS6rhmP3Nyn3Tm  
       2016-07-25 16:10:03 +08:00 via Android
    @lslqtz 求参观 233
    23333
    xixibb
        36
    xixibb  
       2016-07-25 16:24:14 +08:00
    @ZE3kr 这几个蛋的域名好屌啊
    SvenWong
        37
    SvenWong  
       2016-07-25 17:03:06 +08:00
    难道不是 HTTP status code ?
    kfll
        38
    kfll  
       2016-07-25 17:42:43 +08:00
    (・_・;经科普,华氏 451 度约等于摄氏 233 度
    griffinqiu
        39
    griffinqiu  
       2016-07-25 17:49:32 +08:00
    200, 204
    301, 302, 304
    400, 401, 403, 404
    500

    居然没有人提到 400 ; ))
    griffinqiu
        40
    griffinqiu  
       2016-07-25 17:52:46 +08:00
    出了 404 以外, 502 应该是普通用户从页面上直接看到的一个状态码了 ; ))
    20
        41
    20  
       2016-07-25 17:55:23 +08:00
    451.
    griffinqiu
        42
    griffinqiu  
       2016-07-25 17:55:43 +08:00   ❤️ 1
    用状态吗作为车牌号不错, 感受下:

    404NF
    2000K
    500ER
    502BG
    wql
        43
    wql  
       2016-07-25 18:11:18 +08:00
    @griffinqiu 451LR
    for Legal Reasons.
    ikaros
        44
    ikaros  
       2016-07-25 18:33:30 +08:00
    500 40x 302 自己常用这几个 200 倒是不常用,逻辑没问题框架自己会给
    griffinqiu
        45
    griffinqiu  
       2016-07-25 18:46:40 +08:00
    @wql 400BD
    Bad Request
    ixiaozhi
        46
    ixiaozhi  
       2016-07-25 18:49:28 +08:00
    418 该泡茶了
    halfblood
        47
    halfblood  
       2016-07-25 19:04:00 +08:00
    403 204 401404 400 302
    hantsy
        48
    hantsy  
       2016-07-25 19:19:57 +08:00
    400 , 401 , 403 , 404 , 407 , 409 , 422
    201 , 200 , 204
    hantsy
        49
    hantsy  
       2016-07-25 19:20:54 +08:00
    @otakustay 204 是 No content ,一般用 PUT , DELETE 方法,没有内容返回的情况。
    hantsy
        50
    hantsy  
       2016-07-25 19:24:18 +08:00
    @gearh 200 GET 方法,返回正确结果的状态。

    这些 HTTP 协议有说明。
    422 是比较新的, Unprocessed Entity ,从字面意义,非常符合数据验证失败的情况,以区别 400 。
    hantsy
        51
    hantsy  
       2016-07-25 19:28:05 +08:00   ❤️ 1
    常用的 HTTP Status CODE : http://www.restapitutorial.com/httpstatuscodes.html
    标星应该一个 API 程序都会用到。
    atpking
        52
    atpking  
       2016-07-25 19:38:53 +08:00
    我们的网站偶尔会返回 451 。。。。。
    g0thic
        53
    g0thic  
       2016-07-25 19:43:34 +08:00
    405
    被墙
    wwek
        54
    wwek  
       2016-07-25 19:50:12 +08:00
    444
    griffinqiu
        55
    griffinqiu  
       2016-07-25 19:56:30 +08:00
    @g0thic 然而并不是.
    just4test
        56
    just4test  
       2016-07-25 20:07:59 +08:00
    @chinvo 这得多少异常判断啊……
    XadillaX
        57
    XadillaX  
       2016-07-25 20:55:56 +08:00
    451
    sfyumi
        58
    sfyumi  
       2016-07-25 21:06:40 +08:00
    居然没有 419 吗?
    kn007
        59
    kn007  
       2016-07-25 21:10:29 +08:00
    返回过 410
    lslqtz
        60
    lslqtz  
       2016-07-25 21:47:20 +08:00
    @SuperFashi
    @BXIA
    http://233.dog/f_66700439.png 这时只好来 233 大法了 在状态码打广告不错 2333333333
    <?php
    header('HTTP/1.1 233 <-> I Want To Fuck Dog~');
    ?>
    lslqtz
        61
    lslqtz  
       2016-07-25 21:54:56 +08:00
    @ixiaozhi 好评,以后参数不正确就发回一个这个 2333
    guodont
        62
    guodont  
       2016-07-25 21:58:51 +08:00 via Android
    201 401
    simple_plan
        63
    simple_plan  
       2016-07-25 22:05:29 +08:00
    400 403
    SlipStupig
        64
    SlipStupig  
       2016-07-25 22:44:44 +08:00
    if( http_code > 400):
    # Raise ERROR

    else:
    pass
    seeker
        65
    seeker  
       2016-07-26 01:11:39 +08:00
    强迫症表示必须严格按照 rfc 返回值。
    AbrahamGreyson
        66
    AbrahamGreyson  
       2016-07-26 03:45:09 +08:00
    其它的都是程序自动 throw 的。
    jyf007
        67
    jyf007  
       2016-07-26 06:13:50 +08:00 via Android
    在某司前端边上干活,记得是 404 会被运营商劫持
    lslqtz
        68
    lslqtz  
       2016-07-26 06:34:14 +08:00
    @jyf007 在我们这 5**系列也会。。
    Symars
        69
    Symars  
       2016-07-26 07:22:12 +08:00 via iPhone
    500
    spikeLIN
        70
    spikeLIN  
       2016-07-26 08:26:51 +08:00 via iPhone
    @Kirscheis 那用户怎么访问啊
    mgna17
        71
    mgna17  
       2016-07-26 08:42:41 +08:00 via Android
    423 locked😁
    yalay
        72
    yalay  
       2016-07-26 09:11:02 +08:00
    304 是很有用的啊,省带宽啊。
    gevin
        73
    gevin  
       2016-07-26 09:12:29 +08:00   ❤️ 3
    如果是写 RESTful API ,以下情况分别返回这些 status code:

    当 GET, PUT 和 PATCH 请求成功时,要返回对应的数据,及状态码 200 ,即 SUCCESS
    当 POST 创建数据成功时,要返回创建的数据,及状态码 201 ,即 CREATED
    当 DELETE 删除数据成功时,不返回数据,状态码要返回 204 ,即 NO CONTENT
    当 GET 不到数据时,状态码要返回 404 ,即 NOT FOUND
    任何时候,如果请求有问题,如校验请求数据时发现错误,要返回状态码 400 ,即 BAD REQUEST
    当 API 请求需要用户认证时,如果 request 中的认证信息不正确,要返回状态码 401 ,即 NOT AUTHORIZED
    当 API 请求需要验证用户权限时,如果当前用户无相应权限,要返回状态码 403 ,即 FORBIDDEN

    这些是我写博文『 RESTful API 编写指南』时总结的,付个文章链接: http://blog.igevin.info/posts/restful-api-get-started-to-write/
    lslqtz
        74
    lslqtz  
       2016-07-26 09:25:57 +08:00
    @gevin Good !
    ppwangs
        75
    ppwangs  
       2016-07-26 13:49:29 +08:00
    @gevin 推荐
    状态码对 restful 很有用。
    gearh
        76
    gearh  
    OP
       2016-07-26 15:58:12 +08:00
    感觉论坛的口风和一年前有点不一样啊
    https://www.v2ex.com/t/191534
    pathbox
        77
    pathbox  
       2016-07-26 21:58:27 +08:00
    666
    timothyqiu
        78
    timothyqiu  
       2016-07-27 08:57:00 +08:00   ❤️ 1
    会啊,常用的:

    + 200 成功
    + 201 成功创建( POST 请求)
    + 202 朕知道了(比如成功接受异步请求,请求结果通过另一个接口查看)
    + 204 不用找了,没有响应内容
    + 400 请求格式错误(请求与文档要求不符,比如要求给出的字段没有给出,或者要求给有效 json 但解析出错)
    + 401 身份未知(比如没有给出 Token 或者 Token 过期)
    + 403 该身份无权限访问该资源
    + 404 资源不存在
    + 415 媒体类型不支持(比如要求请求是 application/json ,但请求实际是 text/plain )
    + 422 无法处理(相对于 400 / 415 是请求有硬伤, 422 是请求格式都对,但由于逻辑上不支持而导致的失败)
    + 429 请求过于频繁

    服务器按照语义返回。客户端一般可以按照百位处理,业务逻辑需要时才针对特定的状态码做处理。
    baiyi
        79
    baiyi  
       2016-07-27 09:22:41 +08:00
    @gevin @timothyqiu
    学到了!
    chinvo
        80
    chinvo  
       2016-07-30 19:17:37 +08:00
    @just4test 只判断一次 HttpException 就好,然后判断具体错误码。在前端或者 app 里面把后端逻辑报错当作异常来处理就好。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1233 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 23:14 · PVG 07:14 · LAX 15:14 · JFK 18:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.