Saya mulai menerapkan server sampel (dalam netty) untuk mendukung 100 lanjutkan. Saya mengalami kebingungan saat membuka RCF2616 bagian 8.2.3. Ia mengatakan
Setelah menerima permintaan yang mencakup kolom Expect request-header dengan ekspektasi "100-lanjutkan", server asal HARUS merespons dengan status 100 (Lanjutkan) dan terus membaca dari aliran input, atau merespons dengan kode status akhir. Server asal TIDAK HARUS menunggu isi permintaan sebelum mengirimkan respons 100 (Lanjutkan). Jika ia merespons dengan kode status akhir, ia MUNGKIN menutup koneksi transportasi atau MUNGKIN melanjutkan membaca dan membuang sisa permintaan. Itu TIDAK HARUS melakukan metode yang diminta jika mengembalikan kode status akhir.
Apa yang dimaksud dengan Server asal TIDAK HARUS menunggu isi permintaan sebelum mengirimkan respons 100 (Lanjutkan). Haruskah server saya terlebih dahulu memvalidasi header dan kemudian mengirimkan kode status 100 (lanjutkan) atau Segera kirim 100 kode status?
Tolong jelaskan saya perilaku sebenarnya dari server http untuk mendukung 100 lanjutkan
Saat ini ini adalah channelRead
saya
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
if (msg instanceof HttpRequest) {
HttpRequest req = (HttpRequest) msg;
request = req;
if (req.getMethod() != HttpMethod.POST) {
FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, METHOD_NOT_ALLOWED);
ctx.write(response).addListener(ChannelFutureListener.CLOSE);
} else {
boolean valid = false;
for (Map.Entry<String, String> header : req.headers()) {
if (header.getKey().equals("my-special-header")) {
valid = true;
break;
}
}
if (!valid) {
FullHttpResponse resp = new DefaultFullHttpResponse(HTTP_1_1, BAD_REQUEST);
ctx.write(resp).addListener(ChannelFutureListener.CLOSE);
} else {
if (HttpHeaders.is100ContinueExpected(request)) {
ctx.write(new DefaultFullHttpResponse(HTTP_1_1, CONTINUE));
}
}
}
} else if (msg instanceof LastHttpContent && msg != LastHttpContent.EMPTY_LAST_CONTENT) {
DefaultLastHttpContent content = (DefaultLastHttpContent) msg;
System.out.println("content read");
FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK, content.content());
response.headers().set(CONTENT_TYPE, "text/plain");
response.headers().set(CONTENT_LENGTH, response.content().readableBytes());
boolean keepAlive =HttpHeaders.isKeepAlive(request);
if (!keepAlive) {
ctx.write(response).addListener(ChannelFutureListener.CLOSE);
} else {
response.headers().set(CONNECTION, Values.KEEP_ALIVE);
ctx.write(response);
}
}
}
The origin server must not wait for the message body before sending the 100 (Continue) response.
Saat ini implementasi saya memeriksa header yang valid dan mengirimkan 100 atau permintaan buruk - person user392919   schedule 28.09.2015