2
我試圖用Dart實現代理服務器:在瀏覽器上運行的Web應用程序向本地運行的我的Dart服務器應用程序(代理服務器)發出請求,然後代理服務器向外部服務器。然後,我將CORS頭添加到要發回客戶端(Web應用程序)的響應中。實現代理服務器
這裏是我是如何實現的代理服務器:
import 'dart:io';
import 'dart:convert';
main() async {
var server = await HttpServer.bind(InternetAddress.ANY_IP_V6, 8080);
print('Server listening on port ${server.port}...');
var client = 0;
HttpClient proxy;
await for (HttpRequest request in server) {
print('Request received from client ${++client}.');
// Adds CORS headers.
request.response.headers.add('Access-Control-Allow-Origin', '*');
proxy = new HttpClient()
..getUrl(Uri.parse('http://example.com/'))
// Makes a request to the external server.
.then((HttpClientRequest proxyRequest) => proxyRequest.close())
// Sends the response to the web client.
.then((HttpClientResponse proxyResponse) =>
proxyResponse.transform(UTF8.decoder).listen((contents) =>
request.response
..write(contents)
..close()
));
print('Response sent to client $client.');
}
}
這工作得很好大部分的時間,但有時客戶端只接收響應的一部分。我認爲有時會在request.response.write(contents)
完成執行之前執行,因此在寫完內容之前發送響應。
有沒有辦法解決這個問題,只有在內容寫入後才發送迴應?謝謝。