ProblĂšme de codes d'Ă©tat HTTP

La situation avec les codes de rĂ©ponse HTTP peut ĂȘtre mise dans les poids et les mesures: c'est ce qui se passe lorsque les dĂ©veloppeurs bien intentionnĂ©s de la spĂ©cification sont confrontĂ©s Ă  une rĂ©alitĂ© brutale. MĂȘme avec deux rĂ©alitĂ©s brutales.







Comme nous l'avons vu au chapitre 10 , l'un des objectifs des erreurs sĂ©mantiques est d'aider le client Ă  comprendre la cause de l'erreur. Dans le dĂ©veloppement de la spĂ©cification HTTP (en particulier, RFC 7231 ), cet objectif Ă©tait Ă©videmment l'un des principaux. De plus, les limites architecturales de REST, telles que dĂ©crites par Fjelding dans sa thĂšse , suggĂšrent que non seulement les clients doivent comprendre la sĂ©mantique de l'erreur, mais tous les agents rĂ©seau (proxies) entre le client et le serveur dans une architecture «en couches». Et, selon cela, la nomenclature des codes d'Ă©tat HTTP dĂ©crit en effet en dĂ©tail presque tous les problĂšmes pouvant survenir avec une requĂȘte HTTP: valeurs d'en- Accept-*



tĂȘte invalides , manquantesContent-Length



, méthode HTTP non prise en charge, URI trop long, etc.







Mais avec ce que la RFC n'aide pas du tout - c'est avec la question, que doit faire exactement le client ou le proxy en cas d'erreur. Comme nous l'avons vu, les erreurs peuvent ĂȘtre rĂ©cupĂ©rables ou non rĂ©cupĂ©rables. Si les erreurs sont fatales, alors les clients ne se soucient gĂ©nĂ©ralement pas de tout ce persil avec des codes de statut et des en-tĂȘtes, et encore plus des proxys intermĂ©diaires. Pour cela, en effet, trois codes suffiraient:







  • 400



    pour les erreurs persistantes (si vous ne faites que répéter la demande, l'erreur n'ira nulle part);
  • 404



    pour l'état d'incertitude (le fait de réessayer la demande peut donner un résultat différent);
  • 500



    pour les problĂšmes cĂŽtĂ© serveur plus un en-tĂȘte Retry-After



    pour indiquer au client quand revenir.


Note latérale : en passant, faites attention au problÚme de conception des spécifications. Par défaut, tous les 4xx



codes ne sont pas mises en cache, Ă  l' exception: 404



, 405



, 410



, 414



. Nous n'avons aucun doute que cela a été fait avec de bonnes intentions, mais nous soupçonnons que le nombre de personnes qui connaissent cette subtilité est approximativement égal au nombre d'éditeurs de la spécification. En conséquence, nous avons de nombreuses situations (l'auteur a personnellement analysé les conséquences de l'une d'entre elles), lorsque 404



-ki a été renvoyé par erreur, mais le client les a mis en cache, prolongeant ainsi le fakup pour une durée indéfinie.







— , - - . , 411 Length Required



. — . , :







  • 400 Bad Request



    , . , , — ! , , — REST.







    NB: , 400



    , .. URI, , JSON .., 422 Unprocessable Entity



    412 Precondition Failed



    . , .







  • 403 Forbidden



    / . Forbidden



    -, :







    • — ;
    • — ;
    • — ;
    • — ;
    • — - .


    403



    , (, ) .







  • 409 Conflict



    ;







  • .









, / , — , 400



-, .







: , : ‘The response message will usually contain a representation that explains the status’. , , , , ( - ?), REST: , «» , .







, : - «» HTTP, . . Web - . , , , , , -. : , - — .







, . ¯\_(ツ)_/¯. — 401 Unauthorized



: WWW-Authenticate



— , , , , .. — Basic



(-, - Web 1.0, ). , , realm



- — . 401



— WWW-Authenticate



, , .







: - HTTP , ; ; - , . ( , , — , , , .) , , 200



-.







?



:







  • REST RPC. - HTTP . :







    • 200 OK



      , — 200



      .
    • 500 Internal Server Error



      .


    400 Bad Request



    . , API Gateway;







  • « » — , , , . ; — - . .

    NB: , : RPC- , , - - (, 403



    429



    , - - , HTTP). , , , «» . ;







  • . , :







    • HTTP- , HTTP (.. 406 Unacceptable



      Accept-Language



      , , - );
    • , HTTP ( , ; ) — , - X-My-API-Error-Reason



      ;
    • , . - ( );
    • , -, , .




, , #3 .







- Ce texte a été rédigé dans le cadre de la préparation de la future section sur l'API HTTP de mon livre, des travaux sont en cours sur GitHub .







La version anglaise du mĂȘme texte est ici .







Je serai reconnaissant si quelqu'un le fouille sur reddit, je ne peux pas moi-mĂȘme selon les rĂšgles de reddit.








All Articles