英文:
net/http the difference between server request and client request
问题
当我阅读Golang的net/http
包的源代码时,经常会提到客户端请求和服务器请求之间的区别。我想知道这两者通常在什么情况下使用(当然,客户端请求是很容易理解的,并且在前后端分离架构的网站中广泛使用)。
例如:
//
// 对于客户端请求,nil的Body表示请求没有主体,比如GET请求。HTTP客户端的传输层负责调用Close方法。
//
// 对于服务器请求,请求主体始终是非nil的,但当没有主体时,它会立即返回EOF。服务器会关闭请求主体。ServeHTTP处理程序不需要关闭它。
//
// Body必须允许在Close的同时调用Read。特别是,调用Close应该解除等待输入的Read的阻塞。
Body io.ReadCloser```
<details>
<summary>英文:</summary>
When I read the source code of the Golang `net/http ` package, it always mentioned **the difference between client requests and server requests**. I want to know when these two are generally used, (of course, client requests are well understood and are widely used in websites with front-end and back-end separation architectures)
e.g.
```// Body is the request's body.
//
// For client requests, a nil body means the request has no
// body, such as a GET request. The HTTP Client's Transport
// is responsible for calling the Close method.
//
// For server requests, the Request Body is always non-nil
// but will return EOF immediately when no body is present.
// The Server will close the request body. The ServeHTTP
// Handler does not need to.
//
// Body must allow Read to be called concurrently with Close.
// In particular, calling Close should unblock a Read waiting
// for input.
Body io.ReadCloser
</details>
# 答案1
**得分**: 1
你可以使用`http.NewRequest`创建一个`Request`,然后设置它的字段,并调用`Client.Do`来发送请求。在这种情况下,如果请求有请求体,客户端必须设置`Request.Body`变量。
当服务器端处理这个请求时,会创建一个新的`http.Request`实例,这是一个服务器请求。对于这种用法,`Body`永远不会是nil。
<details>
<summary>英文:</summary>
You can create a `Request` using `http.NewRequest`, then set its fields, and call `Client.Do` to issue the request. In this case, the `Request.Body` is a variable the client has to set if the request has a body.
When this request is handled on the server side, a new instance of `http.Request` is created, and that is a server request. For this use, the `Body` is never nil.
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论