425 Too Early
Penggunaan
Error 425 Too Early berkaitan dengan waktu yang dibutuhkan untuk mengamankan koneksi HTTPS. Ketika latensi cukup besar, waktu yang dibutuhkan TLS untuk membuat koneksi aman menjadi panjang. Salah satu optimasinya adalah klien mengirim data lebih awal dalam proses tersebut, sebelum koneksi aman sepenuhnya terbentuk.
Jika ada perantara yang terlibat dalam rantai tersebut, perantara itu harus menyertakan header permintaan Early-Data: 1. Perantara tidak boleh menghapus header ini. Header tersebut memberi tahu server bahwa permintaan dikirim sebagai early data dan bahwa klien memahami respons 425 Too Early.
Permintaan
GET /tech-news HTTP/1.1
Host: example.com
Early-Data: 1
Pengirim asli sebuah permintaan tidak perlu mengirim header ini. Dengan mengirim data lebih awal, klien secara implisit menyatakan memahami konsekuensinya dan menangani respons 425 Too Early dengan semestinya.
Mengirim early data tidak menguntungkan dalam situasi tertentu, dan server mengembalikan error ini sebagai respons. Risikonya adalah permintaan klien dapat diputar ulang (replay), yang menimbulkan efek samping yang membahayakan keamanan.
Ketika klien menerima status code ini, permintaan dicoba ulang secara otomatis. Yaitu setelah handshake selesai dan koneksi aman telah terbentuk.
Dampak SEO
Mesin pencari seperti Google tidak akan mengindeks URL dengan status respons 425. URL yang sebelumnya terindeks dan mengembalikan status code ini akan dihapus dari hasil pencarian.
Contoh
Klien meminta sebuah sumber daya dan server merespons dengan 425 Too Early, menginstruksikan klien untuk menunggu hingga koneksi sepenuhnya terbentuk sebelum mencoba ulang.
Permintaan
GET /tech-news HTTP/1.1
Host: example.com
Content-Type: application/xml
Content-Length: 225
<Message includes early data>
Respons
HTTP/1.1 425 Too Early
Cara memperbaiki
Coba ulang permintaan setelah TLS handshake selesai sepenuhnya. Klien menunggu koneksi aman rampung sebelum mengirim ulang. Sebagian besar browser dan pustaka HTTP menangani percobaan ulang ini secara otomatis.
Hindari mengirim permintaan non-idempoten (seperti POST, PUT, atau DELETE) dalam early data TLS 0-RTT. Hanya permintaan GET yang idempoten yang aman untuk early data, karena memutar ulangnya tidak menimbulkan efek samping.
Di sisi server pada nginx, direktif ssl_early_data mengontrol perilaku 0-RTT. Setel ssl_early_data off; untuk menolak semua early data dan menghilangkan respons ini sepenuhnya. Ketika 0-RTT diaktifkan, teruskan sinyal early-data ke backend dengan proxy_set_header Early-Data $ssl_early_data; sehingga aplikasi memutuskan per permintaan apakah menerima atau menolak early data.
Aplikasi backend yang menerima header Early-Data: 1 menolak permintaan yang memiliki efek samping (perubahan akun, pembayaran, pengiriman form) dengan merespons 425. Endpoint hanya-baca yang aman tetap diproses seperti biasa.
Perantara yang meneruskan early data dari klien harus mempertahankan header Early-Data: 1. Menghapus header tersebut mencegah server origin mendeteksi risiko replay.
Referensi kode
.NET
HttpStatusCode.TooEarly
Rust
http::StatusCode::TOO_EARLY
Rails
:too_early
Go
http.StatusTooEarly
Symfony
Response::HTTP_TOO_EARLY
Python3.9+
http.HTTPStatus.TOO_EARLY
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_TOO_EARLY
Angular
@angular/common/http/HttpStatusCode.TooEarly