Server sampel untuk mendukung 100-lanjutkan

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);
        }
    }
}

person user392919    schedule 28.09.2015    source sumber
comment
RFC 2616 telah usang. Anda mungkin ingin membaca ‹greenbytes.de/tech/webdav/rfc7231.html# header.expect› sebagai gantinya.   -  person Julian Reschke    schedule 28.09.2015
comment
Terima kasih, tapi saya masih belum jelas dengan 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


Jawaban (1)


Saya pikir "TIDAK HARUS menunggu isi permintaan" cukup jelas. Badannya tidak menyertakan tajuk Anda, jadi saya tidak yakin dari mana kebingungan Anda berasal...

person Julian Reschke    schedule 28.09.2015