HTTPQUERY
Bahasa Indonesia

417 Expectation Failed

Penggunaan

Ketika pesan error 417 Expectation Failed diterima, klien telah menetapkan satu atau beberapa kondisi untuk negosiasi proaktif di dalam header Expect pada permintaan. Hal ini berkaitan dengan respons informasional 100.

Ketika sebuah permintaan dikirim menggunakan header Expect: 100-continue, server memeriksa detail permintaan yang relevan. Detail ini mencakup kolom header Content-Type atau Content-Length. Jika server bersedia menerima body pesan, respons informasional 100 dikembalikan.

Jika server tidak bersedia menerima body pesan, status yang sesuai akan dikirim, misalnya 401 atau 405. Error 417 Expectation Failed hanya dikembalikan ketika server atau rantai respons tidak mendukung expectation. Jika pesan ini diterima, klien mengirim ulang permintaan tanpa header Expect.

Dampak SEO

Mesin pencari seperti Google tidak akan mengindeks URL dengan status respons 417 Expectation Failed. URL yang sebelumnya terindeks akan dihapus dari hasil pencarian.

Pertimbangan khusus bagi klien

Klien yang mengirim Expect: 100-continue tidak diwajibkan menunggu selama jangka waktu tertentu. Klien dapat melanjutkan pengiriman body pesan tanpa lebih dulu menerima respons. Karena server HTTP/1.0 tidak mendukung expectation, ketika server semacam itu digunakan sebagai perantara, klien tidak menunggu tanpa batas waktu sebelum mengirimkan body pesan.

Pertimbangan khusus bagi server

Jika server menerima Expect: 100-continue sebagai bagian dari permintaan HTTP/1.0, expectation tersebut harus diabaikan. Server tidak perlu memberi konfirmasi dengan 100 jika body pesan sudah diterima atau jika tidak ada body pesan sama sekali.

Ketika server mengirim 100, pada akhirnya harus menyusul status final seperti 200, kecuali koneksi terputus sebelum itu.

Jika server merespons dengan respons final sebelum menerima seluruh body pesan, respons tersebut menunjukkan apa yang akan dilakukan server terhadap koneksi: menutup koneksi, atau terus membaca dan membuang pesan permintaan.

Contoh

Klien meminta untuk mengirim berkas PDF berukuran 10K. Server merespons dengan 417 Expectation Failed karena expectation tidak didukung.

Permintaan

PUT /docs HTTP/1.1
Host: example.com
Content-Type: application/pdf
Content-Length: 10000
Expect: 100-continue

Respons

HTTP/1.1 417 Expectation Failed
Content-Type: text/html
Content-Length: 159

<html>
  <head>
    <title>Expectations not supported</title>
  </head>
  <body>
   <p>Expectations are not supported by this server.
   </p>
  </body>
</html>

Cara memperbaiki

Hapus header Expect: 100-continue dan kirim ulang permintaan dengan menyertakan body secara penuh. Server atau proxy perantara tidak mendukung mekanisme 100-continue.

Banyak pustaka klien HTTP menambahkan header Expect: 100-continue secara otomatis untuk payload berukuran besar tanpa instruksi eksplisit. Nonaktifkan perilaku ini di tingkat pustaka:

Masalah proxy dan perantara. Proxy HTTP/1.0, load balancer, dan gateway versi lama tidak memahami handshake Expect: 100-continue. Ketika permintaan melewati perantara semacam itu, proxy menolak permintaan sebelum server asal memproses expectation tersebut. Meningkatkan versi proxy atau mengalihkan rute agar tidak melewati perantara HTTP/1.0 menyelesaikan masalah ini pada lingkungan tersebut.

Di sisi server, status ini jarang terjadi pada tumpukan HTTP modern. Sebagian besar server menghormati Expect: 100-continue atau mengabaikan header tersebut secara diam-diam. Mengembalikan 417 adalah sinyal yang disengaja agar expectation dihapus dari permintaan.

Referensi kode

.NET

HttpStatusCode.ExpectationFailed

Rust

http::StatusCode::EXPECTATION_FAILED

Rails

:expectation_failed

Go

http.StatusExpectationFailed

Symfony

Response::HTTP_EXPECTATION_FAILED

Python3.5+

http.HTTPStatus.EXPECTATION_FAILED

Java

HttpServletResponse.SC_EXPECTATION_FAILED

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_EXPECTATION_FAILED

Angular

@angular/common/http/HttpStatusCode.ExpectationFailed