Pendahuluan

Untuk penjelasan awal mengenai HTTP Response status code, bisa lihat di sini dan di sini

Dalam HTTP Response ini ada status code berupa 3 angka yang bisa kita analisa.

Misalnya 200, 201, 400, 404, 500, dll.

Masing-masingnya mengisyaratkan Status Code response dari request yang diminta waktu melakukan pemanggilan HTTP.


HTTP Response Code 3xx ?


Untuk part 1 , bisa dilihat di sini

Disana dibahas mengenai Response Status Code :

  • 300 - Multiple Choice
  • 301 - Moved Permanently
  • 302 - Found

Coba kita lihat daftar HTTP Status Code 3XX sisanya



HTTP Status Code - 303 - See Other

Response Status Code 303 ini artinya Http requestnya diterima, dan server cenderung untuk mengarahkan client ke URL yan lain sebagai alternatif URL yang “seharusnya” terkait dengan resource yang diminta oleh client

Sebenarnya status Code 303 ini mirip dengan status code 301 (Moved Permanently), tetapi 303 biasanya memang “sengaja” dibuat untuk pemisahan antara request URL dengan hasilnya.

Sementara 301 (Moved Permanently) memang biasanya karena kita mengubah alamat domain, url, page, dll.

Contohnya untuk status code 303 ini misalnya :

  • Sebuah POST request dikirimkan ke HTTP Server. Kemudian server mengirimkan hasil dari POST request tersebut dalam URL yang berbeda, agar client bisa melakukan HTTP Request GET yang baru untuk mendapatkannya. Hal ini bisa terjadi karena di URL yang baru, bisa lebih teroptimasi secara cache, bisa dibookmark, dll.

HTTP Status 303 ini bisa dikembalikan oleh HTTP Server dengan memasukkan alamat URL yang baru di HTTP Header Location.

HTTP Server juga bisa mengembalikan juga response berisi messag dan Hypertext berisi alamat URL yang lain tersebut, tetapi tentunya harus sama dengan URL yang ada di HTTP Header Location.

HTTP Client bisa mengambil data dari sana untuk melakukan HTTP GET.



HTTP Status Code - 304 - Not Modified

Response Status Code 304 ini artinya Http requestnya diterima, dan server menginformasikan kalau hasil dari requestnya itu sama dengan request sebelumnya yang sudah disimpan di sisi client dan tidak ada perubahan

Status Code 304 ini terkait dengan mekanisme Caching yang ada di sisi client, atau di sisi proxy.

Tujuannya sebenarnya adalah meminalisir transfer data berulang terhadap sumberdaya/resource yang sudah dipunyai/direquest oleh HTTP Client.

Tentunya dengan syarat di sisi client harus dilakukan Caching.

Oleh karena nya itu pula, maka response message dari Status Code 304 ini tidak akan memiiki content/body/representasi yang dikirimkan ke client.

Yang dikirimkan adalah HTTP Header sbb :

  • Content-Location
  • Date
  • ETag
  • Vary
  • Cache-Control
  • Expires

Dengan Status Code 304 ini, maka HTTP Client bisa mengambil data resource/representasi dari Cache nya sendiri, karena sudah di konfirmasi oleh server kalau datanya tidak dimodifikasi sejak request terakhir.



HTTP Status Code - 305 - Use Proxy (Deprecated)

Response Status Code 304 ini artinya Http requestnya diterima, dan server menginformasikan kalau request ini hanya bisa dilakukan melalui Proxy agar mendapatkan resource yang diinginkan.

Alamat dari proxy yang bisa digunakan akan dikembalikan oleh server di HTTP Header Location.

Contoh kasusnya misalnya :

  • Kita mempunyai sebuah server proxy berfungsi sebagai server cache. Daripada melakukan request langsung ke server aslinya, maka HTTP server menyarankan agar HTTP client mengambil resource nya dari server proxy tersebut.

Dengan mengembalikan HTTP Status 305 ini, maka HTTP Client bisa melakukan request selanjutnya berupa HTTP CONNECT untuk membuat sebuah tunnel melalui Proxy untuk mendapatkan resource yang diinginkan.

Tetapi, harap diingat bahwa HTTP Status 305 ini sekarang sudah Deprecated.



HTTP Status Code - 306 - Tidak digunakan (Sebelumnya bernama Switch Proxy)

HTTP Status Code - 306 saat ini tidak digunakan.

Sebelumnya digunakan untuk kasus Switch Proxy.



HTTP Status Code - 307 - Temporary Redirect

Response Status Code 307 ini artinya Http requestnya diterima, dan server menginformasikan bahwa resource yang diinginkan berada di URL yang berbeda, dan user agent diminta tetap menggunakan HTTP Method yang sama untuk URL yang baru tersebut.

Kasus ini bisa terjadi kalau kita melakukan A/B Testing atau perubahan URL yang bisa berganti-ganti tetapi dengan kontrak HTTP request yang sama.

Lho, lalu apa perbedaannya dengan [HTTP Status 302 (Found)] ?

Perbedaannya adalah dari HTTP Method yang digunakan :

  • di 302, HTTP Method yang digunakan untuk redirect bisa saja berubah.
  • di 302, HTTP Method yang digunakan harus sama.

kemudian secara otomatis membuat HTTP Request baru dengan HTTP Method GET ke URL yang baru.

Padahal yang direquest diawal memakai HTTP POST, sehingga mestinya ketika menemui HTTP Status 302 (Found), maka request juga dengan method yang sama (HTTP POST).

HTTP Status 307 ini membuat statusnya lebih jelas dan lebih terang benderang.

Dari sisi content, maka HTTP Server akan menginformasikan URL yang baru di HTTP Header Location dan HTTP Server juga bisa mengembalikan content dalam bentuk Hypertext atau Hyperlink di body/content nya.



HTTP Status Code - 308 - Permanent Redirect

Response Status Code 308 ini artinya Http requestnya diterima, dan server menginformasikan bahwa resource yang diminta telah dipindah ke URL yang lain secara permanent, dan URL yang baru dikirimkan sebagai response message, agar user agent/http client bisa melakukan redirect tanpa mengubah HTTP Method nya.

Spesifikasinya ada di RFC 7538, dan bisa dilihat untuk penjelasannya untuk kasus HTTP Method yang tidak boleh diubah di (https://www.rfc-editor.org/rfc/rfc7538#section-3)

Jadi HTTP Status Code 308 ini mirip dengan HTTP Status Code 301 (Moved Permanently), akan tetapi :

  • di 301, HTTP Method yang digunakan untuk redirect bisa saja berubah.
  • di 308, HTTP Method yang digunakan harus sama.


Catatan

Jadi kalau kita mau simpulkan, ada beberapa HTTP Status yang mirip tapi berbeda :

Tipe URL nya berubah Boleh mengubah HTTP Method Tidak Boleh mengubah HTTP Method
Permanent 301 308
Temporarty 302 307

Demikian saja.

Kita lanjut ke Status Code 4xx - Bagian 1