如何使用 Expect 处理客户端 POST body 请求流:100-continue header?
How to handle client POST body request flow using Expect: 100-continue header?
我是一个缺乏耐心的学习者
我正在寻找有关如何以这种方式控制客户端和服务器之间的数据流的信息:
我想要的是,客户端发送一个 POST 请求,连同一个 Expect: 100-continue header,然后服务器处理 headers 并验证 session信息,如果一切正常服务器发送响应状态码100最后客户端发送请求的body。
我的疑问不是关于 header 的验证,而是关于如何规范客户端请求 POST body 到服务器的数据流,如果验证结果不是预期拒绝请求并响应客户端请求错误状态
如果有什么方法可以做到这一点,如何正确地做到这一点?
我不会说英语,如有任何错误,我深表歉意
感谢您的帮助。
这是节点 12 的示例:
// server.js
const http = require('http')
// This is executed only when the client send a request without the `Expect` header or when we run `server.emit('request', req, res)`
const server = http.createServer((req, res) => {
console.log('Handler')
var received = 0
req.on('data', (chunk) => { received += chunk.length })
req.on('end', () => {
res.writeHead(200, { 'Content-Type': 'text/plain' })
res.write('Received ' + received)
res.end()
})
})
// this is emitted whenever the client send the `Expect` header
server.on('checkContinue', (req, res) => {
console.log('checkContinue')
// do validation
if (Math.random() <= 0.4) { // lucky
res.writeHead(400, { 'Content-Type': 'text/plain' })
res.end('oooops')
} else {
res.writeContinue()
server.emit('request', req, res)
}
})
server.listen(3000, '127.0.0.1', () => {
const address = server.address().address
const port = server.address().port
console.log(`Started http://${address}:${port}`)
})
客户
// client.js
var http = require('http')
var options = {
host: 'localhost',
port: 3000,
path: '/',
method: 'POST',
headers: { Expect: '100-continue' }
}
const req = http.request(options, (response) => {
var str = ''
response.on('data', function (chunk) {
str += chunk
})
response.on('end', function () {
console.log('End: ' + str)
})
})
// event received when the server executes `res.writeContinue()`
req.on('continue', function () {
console.log('continue')
req.write('hello'.repeat(10000))
req.end()
})
我是一个缺乏耐心的学习者
我正在寻找有关如何以这种方式控制客户端和服务器之间的数据流的信息:
我想要的是,客户端发送一个 POST 请求,连同一个 Expect: 100-continue header,然后服务器处理 headers 并验证 session信息,如果一切正常服务器发送响应状态码100最后客户端发送请求的body。
我的疑问不是关于 header 的验证,而是关于如何规范客户端请求 POST body 到服务器的数据流,如果验证结果不是预期拒绝请求并响应客户端请求错误状态
如果有什么方法可以做到这一点,如何正确地做到这一点? 我不会说英语,如有任何错误,我深表歉意 感谢您的帮助。
这是节点 12 的示例:
// server.js
const http = require('http')
// This is executed only when the client send a request without the `Expect` header or when we run `server.emit('request', req, res)`
const server = http.createServer((req, res) => {
console.log('Handler')
var received = 0
req.on('data', (chunk) => { received += chunk.length })
req.on('end', () => {
res.writeHead(200, { 'Content-Type': 'text/plain' })
res.write('Received ' + received)
res.end()
})
})
// this is emitted whenever the client send the `Expect` header
server.on('checkContinue', (req, res) => {
console.log('checkContinue')
// do validation
if (Math.random() <= 0.4) { // lucky
res.writeHead(400, { 'Content-Type': 'text/plain' })
res.end('oooops')
} else {
res.writeContinue()
server.emit('request', req, res)
}
})
server.listen(3000, '127.0.0.1', () => {
const address = server.address().address
const port = server.address().port
console.log(`Started http://${address}:${port}`)
})
客户
// client.js
var http = require('http')
var options = {
host: 'localhost',
port: 3000,
path: '/',
method: 'POST',
headers: { Expect: '100-continue' }
}
const req = http.request(options, (response) => {
var str = ''
response.on('data', function (chunk) {
str += chunk
})
response.on('end', function () {
console.log('End: ' + str)
})
})
// event received when the server executes `res.writeContinue()`
req.on('continue', function () {
console.log('continue')
req.write('hello'.repeat(10000))
req.end()
})