如何使用Go的http包发送204 No Content响应?

huangapple go评论74阅读模式
英文:

How to send 204 No Content with Go http package?

问题

我在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
}
英文:

I built a tiny sample app with Go on Google App Engine that sends string responses when different URLs are invoked. But how can I use Go's http package to send a 204 No Content response to clients?

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
}

答案1

得分: 33

根据包文档:

func NoContent(w http.ResponseWriter, r *http.Request) {
  // 在这里设置任何你想要的头部。
  w.WriteHeader(http.StatusNoContent) // 使用 204 响应代码发送头部。
}

将向客户端发送一个 204 状态。

英文:

According to the package docs:

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.
}

will send a 204 status to the client.

答案2

得分: 2

从您的脚本发送204响应意味着您的实例仍然需要运行并花费您的费用。如果您正在寻找缓存解决方案,Google有一个名为Edge Cache的解决方案。

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

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

您可以调整max-age,但要明智地进行调整。

顺便说一下,似乎必须启用计费才能使用Edge Cache。

英文:

Sending 204 response from your script means your instance still need to run and cost you money. If you are looking for a caching solution. Google got it and it's called Edge Cache.

You only need to response with the following headers and Google will automatically cache your response in multiple servers nearest to the users (that is, replying with 204). This greatly enhance your site's speed and reduce instance cost.

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

You can adjust the max-age, but do it wisely.

By the way, it seems billing must be enabled in order to use Edge Cache

huangapple
  • 本文由 发表于 2013年7月22日 10:13:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/17778974.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定