xref: /aosp_15_r20/external/grpc-grpc/doc/http-grpc-status-mapping.md (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker# HTTP to gRPC Status Code Mapping
2*cc02d7e2SAndroid Build Coastguard Worker
3*cc02d7e2SAndroid Build Coastguard WorkerSince intermediaries are a common part of HTTP infrastructure some responses to
4*cc02d7e2SAndroid Build Coastguard WorkergRPC requests may be received that do not include the grpc-status header. In
5*cc02d7e2SAndroid Build Coastguard Workersome cases mapping error codes from an intermediary allows the gRPC client to
6*cc02d7e2SAndroid Build Coastguard Workerbehave more appropriately to the error situation without overloading the
7*cc02d7e2SAndroid Build Coastguard Workersemantics of either error code.
8*cc02d7e2SAndroid Build Coastguard Worker
9*cc02d7e2SAndroid Build Coastguard WorkerThis table is to be used _only_ for clients that received a response that did
10*cc02d7e2SAndroid Build Coastguard Workernot include grpc-status. If grpc-status was provided, it _must_ be used. Servers
11*cc02d7e2SAndroid Build Coastguard Worker_must not_ use this table to determine an HTTP status code to use; the mappings
12*cc02d7e2SAndroid Build Coastguard Workerare neither symmetric nor 1-to-1.
13*cc02d7e2SAndroid Build Coastguard Worker
14*cc02d7e2SAndroid Build Coastguard Worker| HTTP Status Code           | gRPC Status Code   |
15*cc02d7e2SAndroid Build Coastguard Worker|----------------------------|--------------------|
16*cc02d7e2SAndroid Build Coastguard Worker| 400 Bad Request            | INTERNAL           |
17*cc02d7e2SAndroid Build Coastguard Worker| 401 Unauthorized           | UNAUTHENTICATED    |
18*cc02d7e2SAndroid Build Coastguard Worker| 403 Forbidden              | PERMISSION\_DENIED |
19*cc02d7e2SAndroid Build Coastguard Worker| 404 Not Found              | UNIMPLEMENTED      |
20*cc02d7e2SAndroid Build Coastguard Worker| 429 Too Many Requests      | UNAVAILABLE        |
21*cc02d7e2SAndroid Build Coastguard Worker| 502 Bad Gateway            | UNAVAILABLE        |
22*cc02d7e2SAndroid Build Coastguard Worker| 503 Service Unavailable    | UNAVAILABLE        |
23*cc02d7e2SAndroid Build Coastguard Worker| 504 Gateway Timeout        | UNAVAILABLE        |
24*cc02d7e2SAndroid Build Coastguard Worker| _All other codes_          | UNKNOWN            |
25*cc02d7e2SAndroid Build Coastguard Worker
26*cc02d7e2SAndroid Build Coastguard WorkerTechnically, 1xx should have the entire header skipped and a subsequent header
27*cc02d7e2SAndroid Build Coastguard Workerbe read. See RFC 7540 §8.1.
28*cc02d7e2SAndroid Build Coastguard Worker
29*cc02d7e2SAndroid Build Coastguard Worker200 is UNKNOWN because there should be a grpc-status in case of truly OK
30*cc02d7e2SAndroid Build Coastguard Workerresponse.
31