grpc-http1: A gRPC via HTTP/1 Enabling Library for Go

Overview

grpc-http1: A gRPC via HTTP/1 Enabling Library for Go

This library enables using all the functionality of a gRPC server even if it is exposed behind a reverse proxy which does not support HTTP/2, or only supports it for clients (such as Amazon's ALB). This is accomplished via either adaptive downgrading to the gRPC-Web response format or utilizing WebSockets.

For a high-level overview, see this Medium post about the gRPC-Web downgrade option and this Medium post about the gRPC-WebSocket option.

Connection Compatibility Overview

The following table shows what can be expected when a client/server instrumented with the capability offered by this library compared to an unmodified gRPC client/server, both when accessing it directly and when accessing it via a reverse proxy not supporting HTTP/2.

Plain Old gRPC Server HTTP/1 Downgrading gRPC Server
direct behind reverse proxy direct behind reverse proxy
Plain Old gRPC Client
gRPC-Web downgrade client mode ()
gRPC-WebSocket client mode

The () for the gRPC-Web downgrading client indicates a subset of gRPC calls will be possible, but not all. These include all calls that do not rely on client-side streaming (i.e., all unary and server-streaming calls).

As you can see, when using the client in gRPC-Web downgrade mode, it is possible to instrument the client or the server without any (functional) regressions - there may be a small but fairly negligible performance penalty. This means rolling this feature out to your clients and servers does not need to happen in a strictly synchronous fashion. However, you will only be able to work with a server behind an HTTP/2-incompatible reverse proxy if both the client and the server have been instrumented via this library. To use the client in gRPC-WebSocket mode, both the client and server must be instrumented via this library.

Usage

This library has the canonical import path golang.stackrox.io/grpc-http1. It fully supports Go modules and requires Go version 1.13+ to be built and used. To add it as a dependency in your current project, run go get golang.stackrox.io/grpc-http1.

Server-side

For using this library on the server-side, you'll need to bypass the regular (*grpc.Server).Serve method and instead use the ServeHTTP method of the *grpc.Server object -- it is experimental, but we found it to be fairly stable and reliable.

The only exported function in the golang.grpc.io/grpc-http1/server package is CreateDowngradingHandler, which returns a http.Handler that can be served by a Go HTTP server. It is crucial this server is configured to support HTTP/2; otherwise, your clients using the vanilla gRPC client will no longer be able to talk to it. You can find an example of how to do so in the _integration-tests/ directory.

Client-Side

For connecting to a gRPC server via a client-side proxy, use the ConnectViaProxy function exported from the golang.grpc.io/grpc-http1/client package. This function has the following signature:

func ConnectViaProxy(ctx context.Context, endpoint string, tlsClientConf *tls.Config, opts ...ConnectOption) (*grpc.ClientConn, error)

The first two arguments are the same as for grpc.DialContext. The third argument specifies the TLS client config to be used for connecting to the target address. Note that this is different from the usual gRPC API, which specifies client TLS config via the grpc.WithTransportCredentials. For a plaintext (unencrypted) connection to the server, pass a nil TLS config; however, this does not free you from passing the grpc.WithInsecure() gRPC dial option.

The last (variadic) parameter specifies options that modify the dialing behavior. You can pass any gRPC dial options via client.DialOpts(...); however, the grpc.WithTransportCredentials option will not be needed. By default, adaptive gRPC-Web downgrading is used. To use WebSockets, pass true to the client.UseWebSocket option.

Another important option is client.ForceHTTP2(), which needs to be used for a plaintext connection to a server that is not HTTP/1.1 capable (e.g., the vanilla gRPC server). This option is ignored when WebSockets are used. Again, check out the code in the _integration-tests directory.

Comments
  • use the go-grpc-http with other languages

    use the go-grpc-http with other languages

    Hi , I would like to know if there is any plan to extend this package to be used for a Javascript Client in the browser (Front-end e.g with React) , and for example with a python Server that uses the gRPC standard library?

    opened by H-sin 4
  • Add

    Add "force downgrade" (client) and "prefer downgrade" (server) options

    This adds the following two options to the library:

    • On the client side, ForceDowngrade(true) instructs the client proxy to downgrade all requests by (a) switching to HTTP/1, (b) omitting the Accept: application/grpc header, (c) omitting the TE: trailers header, and (d) sending a special header to request a gRPC-Web response (this is to guard against any overzealous gRPC-aware proxies that might "fix" the issues caused by a-c before forwarding to the backend). The server side is extended to recognize this header.
    • On the server side, PreferGRPCWeb(true) instructs the server to always send a gRPC-Web response when the client indicates that it accepts it and the method is downgradable (i.e., not client- or bidi-streaming).
    opened by misberner 3
  • Browser support

    Browser support

    I haven't been able to found more detail, so pardon this question via issue. As this is a websocket solution, this should enable all gRPC features over websocket, including bidirectional / client streaming.

    So, I'd like to ask, are there any browser (JS) client implementation for this implementation of gRPC-WebSocket?

    If there isn't (yet), is there any plan to develop one?

    As modern web frameworks are rapidly evolving and more things can be achieved in-browser, being able to use gRPC in browser would be awesome, as IMO restricting gRPC for server-to-server only is quite a limiting view.

    opened by benedictjohannes 2
  • Bump github.com/stretchr/testify from 1.7.4 to 1.7.5

    Bump github.com/stretchr/testify from 1.7.4 to 1.7.5

    Bumps github.com/stretchr/testify from 1.7.4 to 1.7.5.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump google.golang.org/grpc from 1.46.0 to 1.46.2

    Bump google.golang.org/grpc from 1.46.0 to 1.46.2

    Bumps google.golang.org/grpc from 1.46.0 to 1.46.2.

    Release notes

    Sourced from google.golang.org/grpc's releases.

    Release v1.46.2

    Bug Fixes

    • client: fix potential panic during RPC retries (#5323)
    • xds: fix leak of deleted CDS resources from CSDS view (#5339)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump github.com/stretchr/testify from 1.5.1 to 1.7.1 in /_integration-tests

    Bump github.com/stretchr/testify from 1.5.1 to 1.7.1 in /_integration-tests

    Bumps github.com/stretchr/testify from 1.5.1 to 1.7.1.

    Release notes

    Sourced from github.com/stretchr/testify's releases.

    Minor improvements and bug fixes

    Minor feature improvements and bug fixes

    Fixes breaking change with HTTPBodyContains

    A breaking change was accidentally released in v1.6.0 which breaks the API for the HTTPBodyContains and HTTPBodyNotContains, this release reverts that change.

    v1.6.0

    Latest release of testify. This includes many fixes and enhancements. Please view the v1.6.0 milestone for a list of changes.

    Commits
    • 083ff1c Fixed didPanic to now detect panic(nil).
    • 1e36bfe Use cross Go version compatible build tag syntax
    • e798dc2 Add docs on 1.17 build tags
    • 83198c2 assert: guard CanConvert call in backward compatible wrapper
    • 087b655 assert: allow comparing time.Time
    • 7bcf74e fix msgAndArgs forwarding
    • c29de71 add tests for correct msgAndArgs forwarding
    • f87e2b2 Update builds
    • ab6dc32 fix linting errors in /assert package
    • edff5a0 fix funtion name
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Fix GO-2022-0969

    Fix GO-2022-0969

    I ran the new govulncheck tool on this repository, and it showed the following:

    rtannenb:~/go/src/github.com/stackrox/go-grpc-http1$ govulncheck ./...
    govulncheck is an experimental tool. Share feedback at https://go.dev/s/govulncheck-feedback.
    
    Scanning for dependencies with known vulnerabilities...
    Found 1 known vulnerability.
    
    Vulnerability #1: GO-2022-0969
      HTTP/2 server connections can hang forever waiting for a clean
      shutdown that was preempted by a fatal error. This condition can
      be exploited by a malicious client to cause a denial of service.
    
      Call stacks in your code:
          client/proxy.go:196:22: golang.stackrox.io/grpc-http1/client.makeProxyServer$1 calls net/http.Server.Serve, which eventually calls golang.org/x/net/http2.ConfigureServer$1
    
      Found in: golang.org/x/net/[email protected]
      Fixed in: golang.org/x/net/[email protected]
      More info: https://pkg.go.dev/vuln/GO-2022-0969
    

    This PR resolves this vulnerability

    opened by RTann 0
  • Bump google.golang.org/grpc from 1.48.0 to 1.49.0 in /_integration-tests

    Bump google.golang.org/grpc from 1.48.0 to 1.49.0 in /_integration-tests

    Bumps google.golang.org/grpc from 1.48.0 to 1.49.0.

    Release notes

    Sourced from google.golang.org/grpc's releases.

    Release 1.49.0

    New Features

    • gcp/observability: add support for Environment Variable GRPC_CONFIG_OBSERVABILITY_JSON (#5525)
    • gcp/observability: add support for custom tags (#5565)

    Behavior Changes

    • server: reduce log level from Warning to Info for early connection establishment errors (#5524)

    Bug Fixes

    • client: fix race in flow control that could lead to unexpected EOF errors (#5494)
    • client: fix a race that could cause RPCs to time out instead of failing more quickly with UNAVAILABLE (#5503)
    • client & server: fix a panic caused by passing a nil stats handler to grpc.WithStatsHandler or grpc.StatsHandler (#5543)
    • transport/server: fix a race that could cause a stray header to be sent (#5513)
    • balancer: give precedence to IDLE over TRANSIENT_FAILURE when aggregating connectivity state (#5473)
    • xds/xdsclient: request correct resource name when user specifies a new style resource name with empty authority (#5488)
    • xds/xdsclient: NACK endpoint resources with zero weight (#5560)
    • xds/xdsclient: fix bug that would reset resource version information after ADS stream restart (#5422)
    • xds/xdsclient: fix goroutine leaks when load reporting is enabled (#5505)
    • xds/ringhash: fix config update processing to recreate ring and picker when min/max ring size changes (#5557)
    • xds/ringhash: avoid recreating subChannels when update doesn't change address weight information (#5431)
    • xds/priority: fix bug which could cause priority LB to block all traffic after a config update (#5549)
    • xds: fix bug when environment variable GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION is set to true (#5537)
    Commits
    • 1c29e07 Change version to 1.49.0 (#5583)
    • 8e5a84e xds/resolver: generate channel ID randomly (#5603)
    • 92cee34 gcp/observability: Add logging filters for logging, tracing, and metrics API ...
    • c7fe135 O11Y: Added support for custom tags (#5565)
    • 7981af4 test/kokoro: add missing image tagging to the xDS interop url map buildscript...
    • 6f34b7a xdsclient: NACK endpoint resource if load_balancing_weight is specified and i...
    • f9409d3 ringhash: handle config updates properly (#5557)
    • 946dde0 xdsclient: NACK endpoint resources with zero weight (#5560)
    • b89f49b xdsclient: deflake Test/LDSWatch_PartialValid (#5552)
    • 9bc72de grpc: remove mentions of WithBalancerName from comments (#5555)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump google.golang.org/grpc from 1.48.0 to 1.49.0

    Bump google.golang.org/grpc from 1.48.0 to 1.49.0

    Bumps google.golang.org/grpc from 1.48.0 to 1.49.0.

    Release notes

    Sourced from google.golang.org/grpc's releases.

    Release 1.49.0

    New Features

    • gcp/observability: add support for Environment Variable GRPC_CONFIG_OBSERVABILITY_JSON (#5525)
    • gcp/observability: add support for custom tags (#5565)

    Behavior Changes

    • server: reduce log level from Warning to Info for early connection establishment errors (#5524)

    Bug Fixes

    • client: fix race in flow control that could lead to unexpected EOF errors (#5494)
    • client: fix a race that could cause RPCs to time out instead of failing more quickly with UNAVAILABLE (#5503)
    • client & server: fix a panic caused by passing a nil stats handler to grpc.WithStatsHandler or grpc.StatsHandler (#5543)
    • transport/server: fix a race that could cause a stray header to be sent (#5513)
    • balancer: give precedence to IDLE over TRANSIENT_FAILURE when aggregating connectivity state (#5473)
    • xds/xdsclient: request correct resource name when user specifies a new style resource name with empty authority (#5488)
    • xds/xdsclient: NACK endpoint resources with zero weight (#5560)
    • xds/xdsclient: fix bug that would reset resource version information after ADS stream restart (#5422)
    • xds/xdsclient: fix goroutine leaks when load reporting is enabled (#5505)
    • xds/ringhash: fix config update processing to recreate ring and picker when min/max ring size changes (#5557)
    • xds/ringhash: avoid recreating subChannels when update doesn't change address weight information (#5431)
    • xds/priority: fix bug which could cause priority LB to block all traffic after a config update (#5549)
    • xds: fix bug when environment variable GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION is set to true (#5537)
    Commits
    • 1c29e07 Change version to 1.49.0 (#5583)
    • 8e5a84e xds/resolver: generate channel ID randomly (#5603)
    • 92cee34 gcp/observability: Add logging filters for logging, tracing, and metrics API ...
    • c7fe135 O11Y: Added support for custom tags (#5565)
    • 7981af4 test/kokoro: add missing image tagging to the xDS interop url map buildscript...
    • 6f34b7a xdsclient: NACK endpoint resource if load_balancing_weight is specified and i...
    • f9409d3 ringhash: handle config updates properly (#5557)
    • 946dde0 xdsclient: NACK endpoint resources with zero weight (#5560)
    • b89f49b xdsclient: deflake Test/LDSWatch_PartialValid (#5552)
    • 9bc72de grpc: remove mentions of WithBalancerName from comments (#5555)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Replace `grpc.WithInsecure()`

    Replace `grpc.WithInsecure()`

    grpc.WithInsecure() is deprecated. It is recommended to replace it with grpc.WithTransportCredentials(insecure.NewCredentials()). See https://pkg.go.dev/google.golang.org/grpc#WithInsecure.

    opened by RTann 0
  • Bump golang.org/x/tools from 0.1.11 to 0.1.12

    Bump golang.org/x/tools from 0.1.11 to 0.1.12

    Bumps golang.org/x/tools from 0.1.11 to 0.1.12.

    Commits
    • b3b5c13 internal/lsp/cache: invalidate packages with missing deps when files are
    • 39a4e36 internal/lsp/regtest: only run /default tests with -short
    • f157068 internal/lsp/regtest: allow sharing memoized results across regtests
    • 8ccb25c internal/lsp: treat struct tags as string type
    • 6c8a6c4 internal/lsp: suppress parameter hint when argument matches parameter
    • c83f42d internal/lsp: update inlay hints documentation to include go snippets
    • 8b47d4e all: update dependencies
    • 7600454 gopls: update dependencies
    • 2a6393f internal/lsp: Refactor to share logic with rename
    • 4375b29 cmd/auth/cookieauth: delete unreachable os.Exit
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
Releases(v0.2.5)
Owner
StackRox
StackRox provides security across the container life cycle. Our container security platform reduces the attack surface, ensures compliance, and stops attacks.
StackRox
High-performance, non-blocking, event-driven, easy-to-use networking framework written in Go, support tls/http1.x/websocket.

High-performance, non-blocking, event-driven, easy-to-use networking framework written in Go, support tls/http1.x/websocket.

lesismal 793 Sep 28, 2022
protoc-gen-grpc-gateway-ts is a Typescript client generator for the grpc-gateway project. It generates idiomatic Typescript clients that connect the web frontend and golang backend fronted by grpc-gateway.

protoc-gen-grpc-gateway-ts protoc-gen-grpc-gateway-ts is a Typescript client generator for the grpc-gateway project. It generates idiomatic Typescript

gRPC Ecosystem 82 Sep 28, 2022
Http-server - A HTTP server and can be accessed via TLS and non-TLS mode

Application server.go runs a HTTP/HTTPS server on the port 9090. It gives you 4

Vedant Pareek 0 Feb 3, 2022
Access Google Ads API via GRPC

google-ads-pb You can use the golang library to interact with the Google Ads API across grpc. This library is not the official Google Ads API library.

null 11 Aug 25, 2022
Helps you to send ssh commands to target machine in your local network from outside via gRPC

rpc-ssh In case, you don't want to make your ssh port accessible from outside local network. This repository helps you to send ssh commands to target

Berkay Akyazı 1 Dec 8, 2021
Totem - A Go library that can turn a single gRPC stream into bidirectional unary gRPC servers

Totem is a Go library that can turn a single gRPC stream into bidirectional unar

Joe Kralicky 2 Jan 10, 2022
Chisel is a fast TCP/UDP tunnel, transported over HTTP, secured via SSH.

Chisel is a fast TCP/UDP tunnel, transported over HTTP, secured via SSH. Single executable including both client and server. Written in Go (golang). Chisel is mainly useful for passing through firewalls, though it can also be used to provide a secure endpoint into your network.

Jaime Pillora 7.9k Sep 30, 2022
Executing shell commands via HTTP server

shell2http HTTP-server to execute shell commands. Designed for development, prototyping or remote control. Settings through two command line arguments

Sergey Mudrik 979 Sep 24, 2022
viagh.NewHTTPClient returns a *http.Client that makes API requests via the gh command.

viagh viagh.NewHTTPClient returns a *http.Client that makes API requests via the gh command. Why viagh? When writing a GitHub CLI extension, the exten

Ken’ichiro Oyama 1 Dec 24, 2021
View, edit, and save text files via http to the file system.

go-wiki View, edit, and save text files via http to the file system. (DONE) https://golang.org/doc/articles/wiki/ Instructions go run main.go In a web

Clint Vidler 0 Nov 25, 2021
gproxy is a tiny service/library for creating lets-encrypt/acme secured gRPC and http reverse proxies

gproxy is a reverse proxy service AND library for creating flexible, expression-based, lets-encrypt/acme secured gRPC/http reverse proxies GProxy as a

null 16 Sep 11, 2022
A suite of gRPC debugging tools. Like Fiddler/Charles but for gRPC.

grpc-tools A suite of tools for gRPC debugging and development. Like Fiddler/Charles but for gRPC! The main tool is grpc-dump which transparently inte

Bradley Kemp 1.1k Sep 22, 2022
Server and client implementation of the grpc go libraries to perform unary, client streaming, server streaming and full duplex RPCs from gRPC go introduction

Description This is an implementation of a gRPC client and server that provides route guidance from gRPC Basics: Go tutorial. It demonstrates how to u

Joram Wambugu 0 Nov 24, 2021
Go based grpc - grpc gateway micro service example

go-grpc-gateway-server This repository provides an example for go based microservice. Go micro services developed based on gRPC protobuf's and also us

Suresh Yekasiri 0 Dec 8, 2021
Simple grpc web and grpc transcoding with Envoy

gRPC Web and gRPC Transcoding with Envoy This is a simple stand-alone set of con

null 0 Dec 25, 2021
Go-grpc - This is grpc server for golang.

go-grpc This is grpc server for golang. protocのインストール brew install protoc Golang用のプラグインのインストール go install google.golang.org/protobuf/cmd/protoc-gen-go

jotaro yuza 1 Jan 2, 2022
GRPC - Creating a gRPC service from scratch

#Go gRPC services course Creating a gRPC service from scratch Command line colle

Rafael Diaz Miles 1 Jan 2, 2022
Grpc-gateway-map-null - gRPC Gateway test using nullable values in map

Demonstrate gRPC gateway behavior with nullable values in maps Using grpc-gatewa

null 1 Jan 6, 2022
Todo-app-grpc - Go/GRPC codebase containing RealWorld examples (CRUD, auth, advanced patterns, etc)

Go/GRPC codebase containing RealWorld examples (CRUD, auth, advanced patterns, e

Sammi Aldhi Yanto 4 Aug 12, 2022