Perbedaan GET dan POST Pada HTTP

Saturday, April 12th, 2008

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=dollykeren

HTTP 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 url = "get_data.php";
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

Menambahkan Keyword Id di Subversion

Tuesday, April 8th, 2008

Terkadang kita ingin menampilkan nomor revisi terakhir di dalam dokumen yang kita buat sesuai dengan nomor revisi dari version control yang kita gunakan. Kalau menggunakan CVS cukup dengan menambahkan $Id$ pada dokumen yang kita buat. Maka setelah melakukan commit $Id$ tadi akan diganti menjadi berupa informasi tentang nama dokumen, nomor revisi dan juga waktu commit terakhir.

Lain halnya dengan Subversion, kita tidak bisa melakukannya hanya dengan menambahkan $Id$ di dalam dokumen yang kita buat. Karena pada Subversion $Id$ merupakan salah satu keyword dari propertynya. Untuk itu kita harus menset property keyword terlebih dahulu untuk bisa menggunakan $Id$. Untuk menset property pada svn gunakan opsi propset dari svn client. Berikut ini contoh perintah untuk menset property keyword Id:

svn propset svn:keywords Id tes.txt

Jika telah menset property Id maka tambahkan $Id$ pada dokumen anda dan kemudian commit. Buka kembali dokumen tadi maka anda akan melihat $Id$ tadi sudah diganti menjadi informasi revisi dari dokumen tersebut.

$Id: tes.txt 11 2008-04-07 23:53:43Z $

Petunjuk di atas cuma bisa menambahkan keyword Id pada dokumen tertentu saja. Untuk menambahkan keyword Id pada setiap dokumen yang ada di dalam direktori cukup dengan menambahkan opsi -R (rekursif) pada saat menset property keyword.

svn propset -R svn:keywords Id [direktori]

Kemudian tambahkan $Id$ pada setiap dokumen yang ada di direktori tersebut. Ada beberapa keyword lain yang bisa digunakan di subversion seperti URL, Author dan LastChangedBy. Untuk lebih jelasnya silahkan lihat help untuk opsi propset dari svn client.

svn help propset

How to improve credit scores
Remind Ringtones
Refinance houses
Credit card applications for bad
Soma
Fixed low apr credit cards
No credit score mortgage
Capital one credit card application in canada
Consolidate student loan debt
Codeine
Instant approval credit cards applications
Instant credit approval cards
Dave Hollister Ringtones
Dynamic ip VPN
Instant approval credit cards
Credit cards online application
Instant approval credit cards for
Debt consolidation lending
Mac os x VPN
Home insurance price
Ultram
How do i get a free credit report
Linksys VPN
Credit report dispute forms
Credit card offer
Credit card offer
Low apr credit cards uk
Diazepam
Renter insurance
Cialis
Personal credit score
Card credit debt plan reduction
Credit report
Small commercial loan
Best creditcard debt reduction strategies
Low apr credit cards
Free Verizon Ringtones
Auto loan
Secured credit card application
Kmart credit card application
Low apr student credit cards
Check credit reports
Instant approval bad credit credit cards
Instant online approval for credit cards
Business card consolidation credit credit debt debt finances
Anonymous internet
First time home loans
Credit card application for people with bad credit
Good credit scores
Best credit report
Instantly instant free online credit report
Apr credit cards
Instant approval credit cards
Home equity mortgage
Maxis Caller Ringtones
Levitra
Nextel Ringtones
Boost your credit score
Credit cards instant approval
Credit report fico score
Best way to eliminate credit card debt
San diego credit score needed to get a mortgage
Tylenol
Ways to improve credit score
Card credit debt debt negotiation reduction service
Canada credit card application
Credit card applications for people
Home equity
Insurance credit score
Scores credit
Firewall and VPN
Credit score uk
Card consumer credit debt stastics
Free debt settlement
Fair credit reporting act of 1970
Effexor
Credit card application instant

Akun debian-sys-maint pada MySQL di Debian

Tuesday, April 1st, 2008

Kemarin ada teman yang mempunyai masalah pada MySQL Server di mesin Ubuntu miliknya. Setiap MySQL Server dijalankan selalu memberikan pesan kesalahan ERROR 1045 (28000): Access Denied For user ‘debian-sys-maint’@'localhost’. Pesan kesalahan ini didapat setelah mengimpor semua data dari MySQL Server yang ada di Windows termasuk database MySQL. Pesan ini menunjukkan bahwa akun debian-sys-maint mencoba menggunakan MySQL tetapi gagal dalam melakukan autentikasi.

Ada perlu apa debian-system-maint menggunakan MySQL?

Akun debian-sys-maint digunakan oleh sistem operasi Debian dan anak cucunya untuk melakukan maintenance terhadap MySQL. Yang mana setiap menjalankan MySQL Server maka sistem akan melakukan pengecekan apakah ada database ataupun tabel yang crash apa tidak. Jika ada yang crash maka mysql akan menampilkan proses apa saja yang ada pada MySQL dan juga statusnya. Pengecekan ini diatur pada file /etc/mysql/debian-start yang memanfaatkan tools dari mysql, yaitu mysqlcheck dan mysqladmin.

Kenapa bisa mendapat pesan kesalahan seperti ini?

Seperti sebelumnya yang saya katakan, pesan ini didapat karena akun debian-sys-maint gagal melakukan autentikasi. Hal ini disebabkan beberapa hal, yaitu:

  • Tidak adanya akun debian-sys-maint di MySQL disebabkan oleh impor data yang dilakukan. Karena pada data yang sebelumnya (MySQL versi Windows ataupun Sistem Operasi lain) tidak memiliki akun debian-sys-main.
  • Tidak cocoknya password debian-sys-maint pada file konfigurasi dengan password MySQL
    Konfigurasi dari akun debian-sys-maint sendiri bisa dilihat pada file /etc/mysql/debian.cnf

Bagaimana cara mengatasinya?

Untuk mengatasi masalah ini cukup dengan menset ulang password akun debian-sys-maint diganti dengan password yang ada pada file konfigurasi. Jika akun debian-sys-maint ternyata tidak ada di MySQL maka kita harus membuatnya terlebih dahulu. Untuk melakukannya cukup dengan cara berikut:

$ mysql -u root -p

mysql> GRANT ALL PRIVILEGES ON *.* TO ‘debian-sys-maint’@'localhost’ IDENTIFIED BY ‘password yg ada di file konfigurasi’ WITH GRANT OPTION;

mysql> \q

$ sudo /etc/init.d/mysql restart

Keterangan:

  • Pertama - tama kita masuk ke MySQL dengan menggunakan akun root.
  • Setelah masuk maka kita menjalankan perintah GRANT ALL … untuk menambahkan akun ataupun menset ulang password debian-sys-maint.
  • Keluar dari mysql
  • Restart MySQL Server untuk melihat apakah masih ada pesan kesalahan seperti sebelumnya.

Lasix
Instant approval credit cards applications
Client dns openVPN
Buy Diclofenac
Credit card application
Sleepwell
Buying life insurance
Credit card reward offers
Credit reports com
Canada credit card online application
Low fixed interest apr credit cards balance transfers
Order credit reports
Online Viagra Cialis
Tramadol Online
Cozaar
Home insurance uk
Credit score interest rate
Phentermine Online
Secured credit card applications
Free credit report service
VPN download
Popular press article on college credit card debt
Cheap Cipro
Free credit report online no membership
Credit report and scores
Credit score of
Zovirax
Affect credit score
Get credit score
Ansaid
Credit report bureau
Burial insuranceCreditcard debt elimination
Cheap Lisinopril
Voltaren
Avapro
Best credit score
Tylenol
Health care insurance
Credit card debt consolidation
Credit card application bad
Online capital one 0 interest credit card application
Loans credit score
Levitra
Credit rating report
Correcting credit reports
Buy Viagra
Card credit debt option reduction
Cheap Protonix
Boost your credit score
Torn up credit card application
No credit card application
Allegra
Buy Flomax
Xenical
Credit scores online
Purchase auto insurance online
Plendil
Cheap Capoten
Application bad card credit credit unsecured
Coreg
Free Sprint Ringtones
To increase credit score
Cephalexin
Free online credit report no trial offer
Credit score loan
Card credit debt grant help pay
Credit card applications with
Instant free credit report
Chase manhattan credit card application
Free credit report. Com
Credit report gov
Online Nexium
Propecia
Homeowners insurance quotes
Increasing credit scores
Levaquin