如何使用Swift-NIO发送简单的HTTP 201 Created响应
发送无响应体的HTTP 201 Created响应(Swift-NIO 2.65.0)
处理完文件保存后,核心是构建符合规范的HTTP响应头并正确发送,不需要额外的响应体内容。以下是具体实现方式:
代码示例
import NIO import NIOHTTP1 func channelRead(context: ChannelHandlerContext, data: NIOAny) { // 省略文件接收、保存的业务逻辑... // 构建201响应头,明确指定Content-Length为0 let responseHead = HTTPResponseHead( version: .http1_1, status: .created, headers: HTTPHeaders([ ("Content-Length", "0"), ("Connection", "keep-alive") // 根据你的连接策略调整,可选 ]) ) // 封装成响应头部分并发送(无需响应体) let responsePart = HTTPServerResponsePart.head(responseHead) context.writeAndFlush(responsePart, promise: nil) // 如果是短连接场景,可追加关闭连接的逻辑: // context.close(promise: nil) }
关键注意事项
- 必须设置
Content-Length: 0:HTTP规范要求无响应体的请求必须明确告知客户端内容长度为0,否则客户端会一直等待响应体,导致请求挂起。 - 只发送响应头部分:用
HTTPServerResponsePart.head封装响应头即可,不需要发送.body或.end类型的响应片段。 - 用
writeAndFlush替代单独的write:write仅将数据写入缓冲区,flush才会把缓冲区内容推送至客户端,两者结合才能确保响应立即发出。
内容的提问来源于stack exchange,提问作者Brijender Kumar
相关产品推荐
相关产品推荐

