Home | History | Annotate | Download | only in doc
      1 # HTTP to gRPC Status Code Mapping
      2 
      3 Since intermediaries are a common part of HTTP infrastructure some responses to
      4 gRPC requests may be received that do not include the grpc-status header. In
      5 some cases mapping error codes from an intermediary allows the gRPC client to
      6 behave more appropriately to the error situation without overloading the
      7 semantics of either error code.
      8 
      9 This table is to be used _only_ for clients that received a response that did
     10 not include grpc-status. If grpc-status was provided, it _must_ be used. Servers
     11 _must not_ use this table to determine an HTTP status code to use; the mappings
     12 are neither symmetric nor 1-to-1.
     13 
     14 | HTTP Status Code           | gRPC Status Code   |
     15 |----------------------------|--------------------|
     16 | 400 Bad Request            | INTERNAL           |
     17 | 401 Unauthorized           | UNAUTHENTICATED    |
     18 | 403 Forbidden              | PERMISSION\_DENIED |
     19 | 404 Not Found              | UNIMPLEMENTED      |
     20 | 429 Too Many Requests      | UNAVAILABLE        |
     21 | 502 Bad Gateway            | UNAVAILABLE        |
     22 | 503 Service Unavailable    | UNAVAILABLE        |
     23 | 504 Gateway Timeout        | UNAVAILABLE        |
     24 | _All other codes_          | UNKNOWN            |
     25 
     26 Technically, 1xx should have the entire header skipped and a subsequent header
     27 be read. See RFC 7540 8.1.
     28 
     29 200 is UNKNOWN because there should be a grpc-status in case of truly OK
     30 response.
     31