title: How to define response headers for unary rpc
body: <p>In Go, I want to set some response headers from inside my rpc handler implementation. Specifically, I want to set some headers related to cache control. </p>
  
  <p>However, when the rpc is defined as unary response, the method signature generated by protoc only includes the request context and request message. This is in contrast to the code generated from a streaming response, which includes the request message and a <code>grpc.ServerStream</code>.</p>
  
  <p>Here's an example interface generated by protoc:</p>
  
  <pre><code>type CmsServer interface {
    GetPost(context.Context, *PostRequest) (*Post, error)
    GetPosts(*GetPostsOptions, Cms_GetPostsServer) error
  }
  </code></pre>
  
  <p>In the example, <code>GetPosts</code> includes <code>Cms_GetPostsServer</code> parameter which is a <code>grpc.ServerStream</code> that appears to include methods to set custom response headers <a href="https://godoc.org/google.golang.org/grpc#ServerStream" rel="nofollow noreferrer">https://godoc.org/google.golang.org/grpc#ServerStream</a> (i have not tried this yet so correct me if this is wrong).</p>
  
  <p>Meanwhile, <code>GetPost</code> doesn't appear to have any way to set response headers just by looking at the method signature (context.Context is only the request context, not the response context). So how do i set custom response headers for a unary response?</p>