14

我在Google App Engine上使用Go构建了一个小型示例应用程序,它在调用不同的 URL 时发送字符串响应。但是如何使用 Go 的http 包向客户端发送 204 No Content 响应?

package hello

import (
    "fmt"
    "net/http"
    "appengine"
    "appengine/memcache"
)

func init() {
    http.HandleFunc("/", hello)
    http.HandleFunc("/hits", showHits)
}

func hello(w http.ResponseWriter, r *http.Request) {
    name := r.Header.Get("name")
    fmt.Fprintf(w, "Hello %s!", name)
}

func showHits(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "%d", hits(r))
}

func hits(r *http.Request) uint64 {
    c := appengine.NewContext(r)
    newValue, _ := memcache.Increment(c, "hits", 1, 0)
    return newValue
}
4

2 回答 2

30

根据包文档:

func NoContent(w http.ResponseWriter, r *http.Request) {
  // Set up any headers you want here.
  w.WriteHeader(http.StatusNoContent) // send the headers with a 204 response code.
}

将向客户端发送 204 状态。

于 2013-07-22T02:39:38.733 回答
2

从您的脚本发送 204 响应意味着您的实例仍然需要运行并且需要花钱。如果您正在寻找缓存解决方案。谷歌得到了它,它被称为边缘缓存。

您只需要使用以下标头进行响应,Google 会自动将您的响应缓存在离用户最近的多个服务器中(即回复 204)。这大大提高了您网站的速度并降低了实例成本。

w.Header().Set("Cache-Control", "public, max-age=86400")
w.Header().Set("Pragma", "Public")

您可以调整最大年龄,但要明智地进行。

顺便说一句,似乎必须启用计费才能使用边缘缓存

于 2013-07-22T09:33:44.333 回答