Perbedaan GET dan POST Pada HTTP
Dalam membuat aplikasi web, tentunya kita sudah sering menggunakan metode GET dan POST dalam pengiriman data ke web server. Secara gamblang kita bisa menyebutkan perbedaan GET dan POST dari metode pengiriman data yang mereka gunakan. Yang mana dengan GET kita cukup mengirimkan data dengan menambahkannya di URI. Berikut contoh pengiriman data dengan metode GET
http://google.com?q=dolly+aswin+harahap
Dari contoh URI diatas, bisa diartikan bahwa kita mengakses web server google.com dan mengirimkan data melalui variabel q untuk di proses di web server google. Sedangkan untuk metode POST data tidak bisa dikirimkan melalui URI, kita harus mendefenisikan form dengan menggunakan method POST terlebih dahulu. Walaupun kita juga bisa mendefenisikan form dengan metode GET juga. Untuk itu disini saya mencoba menjelaskan perbedaan diantara keduanya lebih detail (maaf kalau ternyata kurang detail juga).
Metode GET Menurut RFC 2616
Dengan menggunakan metode GET, HTTP Client bisa mengambil informasi dari server dengan mengirimkan data melalui URI walaupun bisa juga dengan form yang menggunakan metode GET yang mana ujung - ujungnya duit data tersebut tetap dikirimkan juga melalui URI.
Hasil dari permintaan dengan metode GET dapat bersifat cacheable. Dan metode GET juga memiliki kondisional If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, ataupun If-Range yang ditujukan untuk menentukan apakah hasil dari permintaan HTTP Client akan diberikan server atau tidak. Ini bertujuan untuk mengurangi trafik antara HTTP Client dan Server yang mana jika hasil permintaan hasil permintaan tersebut sudah pernah ada di HTTP Client (sudah pernah diminta sebelumnya) maka HTTP Server tidak lagi memberikan permintaan tersebut.
Metode POST Menurut RFC 2616
Metode POST digunakan untuk mengirimkan data dari HTTP Client untuk diproses di HTTP Server, kemudian HTTP server memberikan hasil dari proses tersebut ke HTTP Client. Data yang dikirimkan dengan metode POST disertakan pada baris permintaan (body of request) bukan pada URI. Dan hasil dari permintaan dengan metode POST ini tidak bersifat cacheable.
Contoh Komunikasi HTTP Client dan HTTP Server Dengan Metode GET
Berikut contoh komunikasi antara HTTP Client dan HTTP Server dengan metode GET
GET /info.php?serv=1 HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20070310 Iceweasel/2.0.0.3 (Debian-2.0.0.3-1) Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive
HTTP Client meminta HTTP Server milik localhost untuk memberikan hasil dari info.php dengan mengirimkan data serv yang bernilai 1 ke HTTP Client. Setelah mendapat permintaan tersebut HTTP Server menjawab seperti ini:
HTTP/1.x 200 OK Date: Fri, 11 Apr 2008 21:28:40 GMTServer: Apache/2.2.3 (Debian) DAV/2 SVN/1.4.2 mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch1 mod_ruby/1.2.6 Ruby/1.8.5(2006-08-25) mod_perl/2.0.2 Perl/v5.8.8 X-Powered-By: PHP/5.2.0-8+etch1 Keep-Alive: timeout=15, max=99 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8
Contoh Komunikasi HTTP Client dan HTTP Server Dengan Metode POST
Berikut contoh komunikasi antara HTTP Client dan HTTP Server dengan metode POST.
POST /submit.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20070310 Iceweasel/2.0.0.3 (Debian-2.0.0.3-1)
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/submit.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
user=dolly&password=dollykerenHTTP Client meminta HTTP Server milik localhost untuk memberikan hasil dari submit.php dengan mengirimkan data user dan password untuk diproses di server kemudian. Setelah mendapat permintaan tersebut HTTP Server menjawab seperti ini:
HTTP/1.x 200 OK Date: Sat, 12 Apr 2008 00:03:00 GMTServer: Apache/2.2.3 (Debian) DAV/2 SVN/1.4.2 mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch1 mod_ruby/1.2.6 Ruby/1.8.5(2006-08-25) mod_perl/2.0.2 Perl/v5.8.8 X-Powered-By: PHP/5.2.0-8+etch1 Content-Length: 1234 Keep-Alive: timeout=15, max=99 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8
Dari jawaban HTTP Server diatas bisa diartikan bahwa permintaan dari HTTP Client dikabulkan (HTTP/1.1 200 OK). Kemudian HTTP Server memberikan permintaan HTTP Client tadi dan beberapa informasi seperti Date, Server dan selebihnya bisa lihat sendiri diatas.
Sebenarnya beginilah cara web browser (HTTP Client) berkomunikasi dengan web server (HTTP Server) dan ini disembunyikan dari anda. Lho koq bisa ketahuan juga? Caranya gampang, dan anda tidak perlu menjadi blogger hacker untuk mengetahuinya. Untuk web browser mozilla firefox tambahkan saja extension Live HTTP Header, untuk browser yang lain saya kurang tahu. Dan cara yang lebih geek lagi, gunakan telnet :p
Penggunaan Metode GET dan POST Dalam AJAX
Dalam AJAX penggunaan metode GET dan POST sebenarnya juga berbeda[3]. Untuk metode GET kita bisa langsung meminta ke HTTP Server dan mengirimkan data melalui URI. Berikut contoh penggunaan metode POST dalam AJAX:
var params = "lorem=ipsum&name=binny";
http.open("POST", url, true);
//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
http.onreadystatechange = function() {
//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(params);
Sebenarnya beginilah cara penggunaan POST dan GET di dalam AJAX. Dan pada pustaka jQuery penggunaannya sudah lebih gampang tidak seperti ini lagi, sehingga antara metode POST dan GET kelihatannya sama.
Referensi:
[1] http://en.wikipedia.org/wiki/HTTP
[2] http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
[3] www.openjs.com.articles.ajax_xmlhttp_using_post.php

Comments
tambahan:
mungkin perlu untuk encodeURIComponent params nya, kalau yg di pass di parameter mengandung karakter aneh semacam plus, persen atau pager
misal:
var params = "lorem=ipsum&name=" + encodeURIComponent(document.getElementById("form").value);
@ferdhie
Hohoho iya om, kelupaan untuk encodenya
Thanks yah
Kirim Komentar