
Supported content types
httpmon decodes bodies with these content types:| Content type | Decoder |
|---|---|
application/grpc | Protobuf (no frame stripping) |
application/grpc+proto | Protobuf |
application/grpc-web | gRPC-Web (strips 5-byte frames, then Protobuf) |
application/grpc-web+proto | gRPC-Web |
application/protobuf | Raw Protobuf |
application/x-protobuf | Raw Protobuf |
application/x-google-protobuf | Raw Protobuf |
Named decoding with proto files
Use--proto-path to point httpmon at your .proto files. Field names appear in the decoded JSON instead of field numbers.
*.proto). You can repeat it multiple times. Cross-file imports are resolved automatically.
With proto files, a SayHello response decodes as:
Raw wire decoding
Without--proto-path, httpmon still decodes Protobuf bodies using raw wire format. Field numbers appear as JSON keys instead of names:
gRPC-Web framing
gRPC-Web responses use 5-byte length-prefixed frames. httpmon strips these automatically before decoding the Protobuf payload. Compressed frames are noted but not decoded. Trailer frames are silently skipped.Import search paths
Use--proto-include to add import search directories, similar to protoc’s -I flag. This is needed when your .proto files import definitions from other directories.
Persisting proto paths
Save proto paths in~/.httpmon/config.json so you don’t need --proto-path on every run:
--proto-path and --proto-include flags are appended to any paths already in the config file.
Per-host proto registries
If different services use different.proto definitions, configure per-host registries in ~/.httpmon/config.json:
* wildcards. Per-host registries take precedence over the global proto_paths for matching hosts. Requests to hosts that don’t match any pattern fall back to the global registry.
Keyboard shortcuts
| Key | Action |
|---|---|
p | Toggle between pretty-printed and raw JSON |
e | Open decoded body in external editor |

