考虑一个大的HTTP请求:
POST /upload HTTP/1.1
Content-Type: multipart/form-data
Content-Length: 1048576
...
Run Code Online (Sandbox Code Playgroud)
客户端现在开始上传一兆字节的数据,这可能需要一段时间.但是,服务器确定需要HTTP授权,因此它决定它将响应HTTP 401 Unauthorized.
必须服务器等待,直到它收到整个请求(IE,标头+ CRLF CRLF + Content-Length字节)才能响应?
实际上,这种行为会破坏任何浏览器吗?浏览器是否继续上传文件,或者如果收到"过早"响应,它们是否会停止传输?
更重要的是,在这种情况下,他们是否能够成功进行身份验证并再次开始上传(使用凭据),或者像这样切断上传是否不可靠?
鉴于此简单的网络服务器代码:
console.log('starting');
var server = require('http').createServer();
server.on('connection',function(socket){console.log('*server/connection');});
server.on(
'request',
function(request, response){
console.log('*server/request');
request.on(
'data',
function(chunk){
console.log('*request/data');
// <!> How do I abort next data calls from here?
}
);
request.on(
'readable',
function(chunk){
console.log('*request/readable');
// <!> How do I abort next readable calls from here?
}
);
request.on(
'end',
function(){
console.log('*request/end');
response.writeHead(200,"OK");
response.write('Hello');
response.end();
}
);
request.on('close',function(){ console.log('*request/close'); } );
request.on('error',function(){ console.log('*request/error'); } );
}
);
server.on('close',function(){console.log('server/close');});
server.on('checkContinue',function(request, response){console.log('*server/checkContinue');});
server.on('connect',function(request, socket, head){console.log('*server/connect');});
server.on('upgrade',function(request, socket, head){console.log('*server/upgrade');});
server.on('clientError',function(exception, socket){console.log('*server/clientError');});
server.listen(8080);
console.log('started');
Run Code Online (Sandbox Code Playgroud)
当提交POST或FILE时,我的on数据功能会被触发一次或多次.有时候(就像发送了一个可怕的大文件)我想在数据事件上取消它并触发用户的on …