<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/introducing-cacheable-rpcs-in-connect-buf-l4zchis75" -->

---
title: Introducing Cacheable RPCs in Connect · Buf | daily.dev
description: Buf has expanded the Connect RPC protocol to support HTTP GET requests, letting web browsers and CDNs cache RPC calls the way they would with RESTful APIs....
canonical: https://daily.dev/posts/introducing-cacheable-rpcs-in-connect-buf-l4zchis75
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Introducing Cacheable RPCs in Connect · Buf | daily.dev
og:description: Buf has expanded the Connect RPC protocol to support HTTP GET requests, letting web browsers and CDNs cache RPC calls the way they would with RESTful APIs....
og:url: https://daily.dev/posts/introducing-cacheable-rpcs-in-connect-buf-l4zchis75
og:image: https://api.daily.dev/og/posts/l4ZcHIS75.png
og:image:alt: Introducing Cacheable RPCs in Connect · Buf
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Introducing Cacheable RPCs in Connect · Buf

**[Buf Blog](https://daily.dev/sources/buf)** · 4 min read · 0 upvotes · 0 comments

## Summary

Buf has expanded the Connect RPC protocol to support HTTP GET requests, letting web browsers and CDNs cache RPC calls the way they would with RESTful APIs. Using connect-go 1.7.0 or greater, RPC methods annotated with the Protobuf idempotency_level option set to NO_SIDE_EFFECTS can be handled and made as GET requests instead of POST, with no other code changes needed on the server side. Benefits include easier caching via Cache-Control headers, simpler manual testing since GET requests with JSON payloads can be typed directly into a browser URL bar, reduced CORS preflight overhead, and compatibility with tools that only fetch arbitrary URLs (such as Power Query or iOS Shortcuts). Additionally, Envoy 1.26 ships with a new Connect-gRPC bridge filter that lets Connect clients, including GET requests, talk to existing vanilla gRPC servers without redeploying or reconfiguring when the service changes, though this bridge is not yet considered stable in Envoy.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://buf.build/blog/introducing-connect-cacheable-rpcs>

## Questions this post answers

### How do I make gRPC or Connect RPC requests cacheable by a CDN or browser?

Connect protocol now supports HTTP GET requests instead of only POST, which lets browsers and CDNs cache RPC responses using standard Cache-Control headers. This requires connect-go 1.7.0 or later, and RPC methods must be annotated with the Protobuf idempotency_level option set to NO_SIDE_EFFECTS to indicate they are safe to call via GET.

_Developers optimizing RPC performance can track protocol updates like this via daily.dev._

### How can existing gRPC servers work with the Connect protocol without modifying server code?

Envoy 1.26 ships with a Connect-gRPC bridge filter that translates the Connect protocol, including GET requests, to existing vanilla gRPC servers without any code changes. It requires no configuration, gRPC reflection, or schema access, so it does not need redeployment when the underlying service changes. It is not yet considered stable in Envoy production environments.

_Teams evaluating proxy tooling for gRPC interoperability follow updates like this on daily.dev._

### On the client side, how do I enable GET requests in connect-go?

Specify the WithHTTPGet() option when creating a Connect client in connect-go. Once set, the client transparently uses HTTP GET for calls to RPC methods annotated as having no side effects, requiring no other client-side code changes.

_Developers wiring up Connect clients can keep tabs on API changes like this through daily.dev._

## Similar posts on daily.dev

- [gRPC vs REST Is the Wrong Question · Buf](https://daily.dev/posts/grpc-vs-rest-is-the-wrong-question-buf-xe2qehlxz) · Buf Blog · 109 upvotes · 4 comments
- [connect-go v2 is here · Buf Blog](https://daily.dev/posts/connect-go-v2-is-here-buf-blog-wnnqxkza3) · Buf Blog · 3 upvotes · 0 comments
- [ConnectRPC: Generate Typed SDKs from Your GraphQL API](https://daily.dev/posts/connectrpc-generate-typed-sdks-from-your-graphql-api-cgx6z8ayk) · WunderGraph · 9 upvotes · 0 comments
- [gRPC-Web Failed the Web · Buf](https://daily.dev/posts/grpc-web-failed-the-web-buf-yxi6aoslo) · Buf Blog · 51 upvotes · 8 comments
- [Protocol Buffers Over HTTP: You Don’t Need gRPC to Use Protobuf](https://daily.dev/posts/protocol-buffers-over-http-you-don-t-need-grpc-to-use-protobuf-fttmpowcn) · Medium · 28 upvotes · 0 comments

---

Tags: [#golang](https://daily.dev/tags/golang), [#grpc](https://daily.dev/tags/grpc), [#envoy](https://daily.dev/tags/envoy)

[View this post on daily.dev](https://daily.dev/posts/introducing-cacheable-rpcs-in-connect-buf-l4zchis75)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Introducing Cacheable RPCs in Connect · Buf","url":"https://daily.dev/posts/introducing-cacheable-rpcs-in-connect-buf-l4zchis75","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/introducing-cacheable-rpcs-in-connect-buf-l4zchis75"},"datePublished":"2026-08-23T07:20:12.380Z","dateModified":"2026-08-23T07:21:11.964Z","description":"Buf has expanded the Connect RPC protocol to support HTTP GET requests, letting web browsers and CDNs cache RPC calls the way they would with RESTful APIs....","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/125859d4bae51df611e15c62b123267c?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/125859d4bae51df611e15c62b123267c?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Buf Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Buf Blog","logo":"https://media.daily.dev/image/upload/s--2YBgo_Nm--/f_auto,q_auto/v1787469605/logos/buf?_a=BAMAMicg0","url":"https://daily.dev/sources/buf"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/introducing-cacheable-rpcs-in-connect-buf-l4zchis75","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"golang,grpc,envoy","timeRequired":"PT4M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Buf Blog","item":"https://daily.dev/sources/buf"},{"@type":"ListItem","position":3,"name":"Introducing Cacheable RPCs in Connect · Buf"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/introducing-cacheable-rpcs-in-connect-buf-l4zchis75#faq","mainEntity":[{"@type":"Question","name":"How do I make gRPC or Connect RPC requests cacheable by a CDN or browser?","acceptedAnswer":{"@type":"Answer","text":"Connect protocol now supports HTTP GET requests instead of only POST, which lets browsers and CDNs cache RPC responses using standard Cache-Control headers. This requires connect-go 1.7.0 or later, and RPC methods must be annotated with the Protobuf idempotency_level option set to NO_SIDE_EFFECTS to indicate they are safe to call via GET. Developers optimizing RPC performance can track protocol updates like this via daily.dev."}},{"@type":"Question","name":"How can existing gRPC servers work with the Connect protocol without modifying server code?","acceptedAnswer":{"@type":"Answer","text":"Envoy 1.26 ships with a Connect-gRPC bridge filter that translates the Connect protocol, including GET requests, to existing vanilla gRPC servers without any code changes. It requires no configuration, gRPC reflection, or schema access, so it does not need redeployment when the underlying service changes. It is not yet considered stable in Envoy production environments. Teams evaluating proxy tooling for gRPC interoperability follow updates like this on daily.dev."}},{"@type":"Question","name":"On the client side, how do I enable GET requests in connect-go?","acceptedAnswer":{"@type":"Answer","text":"Specify the WithHTTPGet() option when creating a Connect client in connect-go. Once set, the client transparently uses HTTP GET for calls to RPC methods annotated as having no side effects, requiring no other client-side code changes. Developers wiring up Connect clients can keep tabs on API changes like this through daily.dev."}}]}
```

