撰写临时回复 - 去服务器

时间:2017-11-25 03:35:20

标签: http go

我正在编写Go服务器和客户端,我无法弄清楚如何编写临时响应(状态代码1xx)。我为此搜索了文档和示例,但没有找到任何内容。 我的搜索确实发现了一些关于分块响应的信息,但我认为这不是我需要的。

我真的只是想发送一个临时响应,让客户知道请求已经收到(并且一些信息已被验证),而服务器获得更多数据用于最终响应。 该请求将在我的javascript客户端上使用ajax进行。我想我可以自己弄清楚客户端部分,但我是Go的新手,我可以在编写响应时使用一些帮助。

我没有很多相关的代码可供展示,因为我完全迷失了从哪里开始。但是这里是非常基本的Go服务器,我正试图建立......如果这有帮助。

package main

import (
    "fmt"
    "net/http"
)

func handle(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "existence is pain")
}

func main() {
    http.HandleFunc("/", handle)
    http.ListenAndServe(":8000", nil)
}

所以这是我的出发点,也是我被卡住的地方。 我希望能够做类似

的事情
//validate request
//send interim response
//get more data
//send complete response

是否有net / http功能允许我发送临时响应? 我不应该使用http.HandleFunc()这样的事情吗? (我应该使用什么?) 如果有人有这方面的例子,或者可以指出我正确的方向,那将有所帮助。

另外,对不起,如果“临时”不是可接受的行话。如果这引起了混淆,这是我的来源:https://msdn.microsoft.com/en-us/library/cc246721.aspx

2 个答案:

答案 0 :(得分:2)

如果请求具有Expect: 100-continue标头,则为net / http服务器sends "HTTP/1.1 100 Continue" on first read of the request body

该应用程序的逻辑是:

  • 请求好吗?
    • 如果是,请阅读请求正文并继续正常进行。
    • 如果不是,则回复错误。请勿阅读请求正文。

答案 1 :(得分:0)

func handle(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http. StatusContinue) // 100 code
    fmt.Fprintf(w, "existence is pain")
}