【问题标题】:writing an interim response - go server编写临时响应 - 转到服务器
【发布时间】:2017-11-25 03:35:20
【问题描述】:

我正在编写 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

【问题讨论】:

    标签: http go


    【解决方案1】:

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

    应用的逻辑是:

    • 请求是否正常?
      • 如果是,则阅读请求正文并照常进行。
      • 如果否,则以错误响应。不要阅读请求正文。

    【讨论】:

    • 这可能就是我要找的。请求应包含作为 URL 参数的信息键。我必须检查他们请求的信息是否存在,如果存在,我应该打开响应的主体,向客户端表明它确实存在并且服务器正在检索数据。如果没有,那么我可以发回错误响应。
    【解决方案2】:
    func handle(w http.ResponseWriter, r *http.Request) {
        w.WriteHeader(http. StatusContinue) // 100 code
        fmt.Fprintf(w, "existence is pain")
    }
    

    【讨论】:

    • 这是设置完整响应的状态码还是实际上触发了临时响应?
    猜你喜欢
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多