Article 3: HTTP – Methods Bag. 1

Pada bagian ini kita akan membahas method HTTP secara mendetail. Pada bagian Protokol HTTP kita telah melihat sedikit mengenai method HTTP, dengan tujuh buah method utama yang dispesifikasikan oleh HTTP sebagai berikut:

Di bagian ini kita akan membahas secara mendalam cara kerja dan kegunaan dari masing-masing method. Ingat bahwa tidak semua method diimplementasikan oleh setiap server HTTP yang ada. Agar dapat memenuhi standar HTTP versi 1.1, sebuah server hanya cukup mengimplementasikan GET dan HEAD saja.

Bahkan untuk server yang mengimplementasikan seluruh method, biasanya akan terdapat batasan-batasan penggunaan. Misalnya, method DELETE dan PUT hanya bisa dijalankan oleh pengguna-pengguna tertentu yang telah terautentikasi dengan hak akses tertentu. Pada mayoritas kasus, kita tidak ingin pengguna dapat secara bebas menambahkan dan menghapus data pada server, karena hal tersebut merupakan lobang keamanan yang besar. Tentu saja batasan seperti ini berbeda-beda untuk setiap kasus, dan seringkali menjadi fitur konfigurasi untuk pengguna.

Safe and Idempotent Method

Sebuah method HTTP dikatakan safe (aman) jika method tersebut tidak mengubah data atau sumber daya yang ada pada server. Misalnya, GET dan HEAD merupakan method yang dianggap aman, yang berarti penggunaan GET maupun HEAD tidak akan mengubah representasi data atau memicu aksi tertentu pada server.

Maksud dari “tidak memicu aksi tertentu” di sini adalah server tidak melakukan apapun ketika request dikirimkan. Misalkan jika kita sedang mengunjungi situs belanja seperti Amazon atau Lazada, jika kita menekan tombol “Beli” maka biasanya browser akan mengirimkan request ke server untuk mengeksekusi pembelian, memasukkan data pembelian ke basis data, pembayaran kartu kredit, dan seterusnya. Pada kasus ini terjadi sebuah “aksi tertentu” yang mengubah representasi data (pengguna tidak membeli menjadi membeli). Bandingkan jika kita membuka sebuah halaman blog di mana server hanya akan mengambil dan mengembalikan data blog kepada kita.

Tentu saja perubahan akan data mungkin saja terjadi ketika kita melakukan pemanggilan request GET, misalnya server yang mencatat jumlah pembaca artikel blog. Yang paling penting ialah representasi data tidak berubah dan pengguna tidak meminta perubahan tersebut. Sebuah artikel blog tetap merupakan artikel blog setelah request, dengan isi yang tetap sama. Jumlah pembaca sedniri merupakan efek samping yang tidak diminta oleh pengguna, dan tidak merubah representasi, sehingga GET tetap dianggap aman. Hal ini berarti request seperti ini:

GET /blog/7777/delete HTTP/1.1

Contoh diatas adalah contoh yang tidak tepat, karena pemanggilan request akan menghapus artikel yang dituliskan pada blog.

Karena representasi data akan selalu sama pada setiap kali pemanggilan method yang aman, maka method jenis ini akan sangat mudah disimpan dalam cache, tanpa efek samping yang berarti pada data.

Sebuah method HTTP dikatakan idempotent jika method tersebut dapat dipanggil sebanyak berapa kalipun tanpa mengubah keluaran. Tidak penting apakah method dipanggil satu kali atau ratusan kali, hasil eksekusi akan selalu sama. Sekali lagi, maksud “hasil” di sini adalah hasil dalam arti representasi dan jenis data, bukan isi dari data itu sendiri. Isi data tentu saja dapat berubah, dan jika data berubah pemanggilan method akan memberikan “hasil” yang berbeda, meskipun representasi dan maknanya sama. Misalkan sebuah artikel berita dapat diperbaharui isinya oleh penulis, tetapi pengambilan data melalui URL dan method yang sama akan tetap terus mengembalikan artikel berita dengan identitas yang sama – apapun isi berita tersebut.

Perhatikan kedua contoh berikut:

a = 4; // 1 
a++; // 2

Pada contoh kode di atas, kode yang ditandai 1 merupakan kode yang idempoten, karena nilai a akan selalu 4 berapa kalipun kode dijalankan. Kode yang bertanda 2 tidak idempoten karena nilai a akan berubah terus menerus pada tiap eksekusi baris tersebut. Kedua kode tersebut juga bukan merupakan kode yang aman, karena keduanya mengubah nilai a.

Sifat idempoten ini sangat penting untuk mengembangkan aplikasi server yang fault-tolerant (tahan banting). Misalnya ketika pengguna ingin memperbaharui sebuah data melalui POST. Karena POST bukan merupakan method yang idempoten, pengiriman request yang sama beberapa kali akan dapat menghasilkan pembaruan data yang salah. Akan terdapat banyak hal yang harus kita pertimbangkan ketika ingin memperbaharui data dengan method yang tidak idempoten, misalnya:

  • Apa yang terjadi ketika request dikirimkan dan server mengalami timeout (terlalu lama memproses data sehingga dibatalkan)?
  • Jika timeout terjadi, apakah data benar-benar telah diperbaharui? Bagaimana kita melakukan verifikasi terhadap hal ini?
  • Bagaimana kita mengetahui apakah timeout terjadi ketika request dikirimkan atau ketika response dikirimkan?
  • Jika timeout terjadi ketika request, apakah aman untuk mengirimkan request sekali lagi?

Dan masih banyak pertanyaan lainnya lagi. Dengan menggunakan method yang idempoten, kita tahu bahwa kita dapat mengirimkan request sekali algi dengan aman karena respon dan hasil eksekusi dijamin sama setiap kalinya.

Selanjutnya kita akan membahas status dari sifat idempoten dan keamanan yang masing-masing method memiliki standanya, untuk mempelajarinya klik tombol dibawah ini.

Article 2: Basic Architecture of Communication Networks / HTTP Protocol Bag. 2

Melanjutkan materi sebelumnya, pada materi kali ini kita akan mempelajari lebih lanjut yaitu mempelajari basic arsitekture dari HTTP Protocol, diagram berikut menunjukkan arsitektur yang sangat mendasar dari suatu aplikasi web dan menggambarkan di mana HTTP tersebut bekerja:

Protokol HTTP adalah protokol request/ response berdasarkan arsitektur berbasis client / server tempat browser web, robot, dan mesin pencari, dll. Bertindak seperti client HTTP, dan server Web bertindak sebagai server.

Client

Client HTTP mengirim permintaan (request) ke server dalam bentuk metode request, URI, dan protocol version, diikuti oleh pesan seperti MIME yang berisi pengubah request, informasi client, dan memungkinkan mengakses konten body melalui koneksi TCP / IP.

Server

Server HTTP merespons dengan baris status, termasuk pesan protocol version dan kode yang berhasil di kompilasi atau error kode, diikuti oleh pesan seperti MIME yang berisi informasi server, informasi meta entitas, dan memungkinkan mengakses konten entity-body.

Sumber: Tutorials Point dot Com

Article 1: Mengenal Tentang Communication Networks / HTTP Protocol Bag. 1

Hypertext Transfer Protocol (HTTP) adalah protokol tingkat aplikasi untuk sistem informasi hypermedia yang terdistribusi, kolaboratif. Ini adalah dasar untuk komunikasi data untuk World Wide Web (yaitu internet) sejak tahun 1990. HTTP adalah protokol umum dan stateless yang dapat digunakan untuk tujuan lain serta menggunakan ekstensi metode permintaan, kode kesalahan, dan header.

Pada dasarnya, HTTP adalah protokol komunikasi berbasis TCP / IP, yang digunakan untuk mengirimkan data (file HTML, file gambar, hasil permintaan, dll.) Di World Wide Web. Port default adalah TCP 80, tetapi port lain dapat digunakan juga. Ini memberikan cara standar bagi komputer untuk berkomunikasi satu sama lain. Spesifikasi HTTP menentukan bagaimana data permintaan klien akan dibangun dan dikirim ke server, dan bagaimana server menanggapi permintaan ini.

Dibawah ini adalah beberapa fitur dasar dari penggunaan protocol HTTP dimana fitur-fitur ini menjadikan procol HTTP ini sederhana namun kuat, berikut:

  • HTTP is connectionless: Client HTTP, yaitu, browser memulai permintaan HTTP dan setelah permintaan dibuat, klien menunggu respons. Server memproses permintaan dan mengirim respons kembali setelah client memutuskan koneksi. Jadi client dan server tahu tentang satu sama lain selama permintaan dan respons saat ini saja. Permintaan lebih lanjut dibuat pada koneksi baru seperti client dan server baru satu sama lain.
  • HTTP is media independent, Ini berarti, semua jenis data dapat dikirim melalui HTTP selama client dan server tahu bagaimana menangani konten data. Diperlukan untuk client serta server untuk menentukan tipe konten menggunakan tipe MIME yang sesuai.
  • HTTP is stateless, Seperti yang disebutkan di atas, HTTP adalah connectionless dan itu adalah hasil langsung dari HTTP menjadi protokol stateless. Server dan client saling mengetahui hanya selama permintaan saat ini dilakukan. Setelah itu, keduanya saling melupakan. Karena sifat protokol ini, baik klien maupun browser tidak dapat menyimpan informasi antara permintaan yang berbeda di seluruh halaman web.

HTTP / 1.0 menggunakan koneksi baru untuk setiap pertukaran permintaan / respons, sedangkan koneksi HTTP / 1.1 dapat digunakan untuk satu atau lebih pertukaran permintaan / respons.

Untuk mempelajari bab materi selanjutnya bisa dilihat pada link berikut ini: