Jaringan Internet dan perangkat disekitarnya dibangun untuk saling berkomunikasi melalui protokol HTTP (HyperText Transfer Protocol). HTTP merupakan bahasa umum yang menghubungkan server dengan perangkat-perangkat lain yang ingin mengakses sumber daya di dalam server tersebut.
Pada bagian ini kita akan melihat secara garis besar tentang HTTP. Kita akan melihat bagaimana aplikasi atau situs web berkomunikasi melalui HTTP, beserta cara kerja dari HTTP itu sendiri. Secara spesifik, pembahasan mencakup:
- Bagaimana server dan klien berkomunikasi
- Dari mana konten web berasal
- Format pesan yang digunakan pada komunikasi HTTP
- Komponen-komponen yang membangun HTTP
Setelah mempelajari intrik-intrik umum tentang HTTP, kita akan mencoba untuk membangun sebuah web server sederhana dengan menggunakan NodeJS agar kita dapat mengerti cara kerja web server secara lebih mendalam lagi.
Ada sangat banyak hal yang akan perlu kita pelajari pada bagian ini. Langsung saja, mari kita mulai pembahasannya.
HTTP: Penghubung Dunia Maya
Terdapat milyaran data dalam berbagai bentuk, dari gambar sampai dengan teks, dikirimkan melalui Internet setiap harinya. HTTP sebagai protokol penghubung utama memindahkan berbagai data ini dengan cepat, mudah, dan stabil dari server ke perangkat pengguna seperti browser.
HTTP dibangun di atas TCP, yang menyebabkan HTTP menjamin data yang dikirimkan dari satu perangkat ke perangkat lainnya tidak akan rusak atau terpecah belah. Bagi pengguna, hal ini sangat baik karena integritas data yang dikirimkan terjamin dengan baik. Untuk pengembang aplikasi, hal ini juga sangat baik karena pengembang dapat berfokus ke apakah data yang dikirimkan berguna atau tidak daripada bagaimana mengirimkan data tersebut.
HTTP merupakan sebuah protokol komunikasi yang terbuka dan netral. Hal ini berarti HTTP dapat dibaca oleh perangkat apapun yang telah dikembangkan untuk mengerti protokol HTTP. Pada awal perkembangan Internet, kita biasanya menggunakan HTTP pada sebuah browser, untuk mengakses halaman web. Pada perkembangan selanjutnya, akses HTTP dari perangkat bergerak seperti smartphone melalui aplikasi sudah menjadi hal yang biasa.
Sebagai sebuah protokol komunikasi, HTTP dapat mengirimkan berbagai jenis data. Misalnya, pada sebuah halaman web kita akan mengirimkan data HTML melalui HTTP. Data HTML ini kemudian akan dibaca dan ditampilkan oleh sebuah browser. Pada sisi lain, HTTP juga mungkin saja hanya mengirimkan data untuk diproses lebih lanjut oleh aplikasi lain. Jadi, tidak terdapat batasan terhadap apa yang dapat dikirimkan oleh HTTP maupun siapa yang mengirimkan / menerima data dari HTTP.
Selanjutnya, mari kita lihat lebih dekat cara HTTP mengirimkan data dalam web.
Klien dan Server Web
Sebuah server web merupakan server yang berkomunikasi menggunakan protokol HTTP. Server web menyimpan data-data yang digunakan oleh sebuah web, dan menyajikan data-data tersebut ketika diminta oleh pengguna web. Klien (pengguna) web mengirimkan HTTP Request kepada server, dan server mengembalikan HTTP Response berisi data yang diminta. Klien dan server HTTP ini merupakan komponen dasar dari World Wide Web (WWW).
Seperti yang telah dijelaskan sebelumnya, klien web merupakan perangkat yang dapat berkomunikasi dengan protokol HTTP. Klien web yang paling umum adalah browser seperti Chrome atau Firefox. Ketika mengirimkan permintaan dan menerima HTTP Response, klien akan membaca data respon (sesuai dengan tipe yang diberikan server) dan menampilkannya ke pengguna.
- HTTP Resource
Server web sendiri bertugas memberikan HTTP Response dengan isi data yang benar. Isi data dapat berupa sebuah file yang disimpan dalam server, ataupun dihasilkan secara dinamis oleh aplikasi tertentu. Isi data yang dikembalikan oleh web server kita kenal dengan nama HTTP Resource. HTTP Resource dapat berupa apa saja, dari file teks, HTML, Microsoft Word, JPEG, musik mp3, dan seterusnya.
Pada skala kecil atau untuk data-data statik seperti gambar, seringkali server hanya menyimpan dan menyajikan file saja. Tetapi untuk skala besar, misalnya Facebook, menyimpan 500 juta halaman untuk setiap pengguna tentunya sangat tidak praktis. Pada tingkat ini, biasanya data HTML dihasilkan secara dinamis, menggunakan program spesifik (dalam kasus Facebook misalnya, data HTML dihasilkan secara dinamis melalui data pengguna dalam basis data, dengan bahasa pemrograman PHP)
2. Media Type
Karena terdapat sangat banyak jenis data yang ada di Internet, HTTP memberikan tanda terhadap setiap file yang dikirimkan melalui HTTP. Penanda format file ini dibuat agar klien dapat dengan mudah memahami data apa yang diterima, dan mengetahui apa yang harus dilakukan dengan data tersebut (gambar ditampilkan, video dimainkan, dst). Format penanda data HTTP kita kenal dengan nama MIME type.
MIME (Multipurpose Internet Mail Extension) pada awalnya dikembangkan sebagai solusi masalah pengiriman pesan pada sistem email. MIME bekerja dengan sangat efektif sehingga ia juga diadopsi oleh HTTP sebagai format untuk menjelaskan data multimedia pada HTTP.
Sebuah MIME Type merupakan label dalam bentuk teks, yang merepresentasikan jenis objek utama serta jenis pendukung dari file tersebut, dipisahkan oleh garis miring. Misalnya:
- Sebuah dokumen teks berformat HTML ditandai sebagai
text/html
. - Sebuah dokumen teks ASCII standar ditandai sebagai
text/plain
. - Sebuah gambar beformat JPEG ditandai sebagai
image/jpeg
. - Sebuah gambar dengan format GIF ditandai sebagai
image/gif
. - Sebuah video dengan format mp4 ditandai sebagai
video/mp4
- Sebuah presentasi yang dibuat dengan PowerPoint bertanda
application/vnd.openxmlformats-officedocument.presentationml.presentation
.
MIME Type dari setiap jenis format dan jenis pendukung diolah oleh IANA (Internet Assigned Numbers Authority) untuk memastikan setiap perangkat klien maupun server memiliki informasi yang sama mengenai hal ini.
Setiap pengembang aplikasi dengan format baru dapat meminta MIME Type dari file mereka dibuat oleh IANA. Karena hal ini, terdapat sangat banyak sekali MIME Type seperti yang nampak pada contoh di atas, dan tidak mungkin kita tuliskan semuanya. Halaman MIME Type pada Wikipedia memberikan daftar MIME Type yang cukup lengkap.
URI, URL, dan URN
Seluruh data yang ada pada sebuah web server memiliki nama agar klien yang ingin mengakses dapat merujuk ke data yang diinginkannya. Data yang ada pada server dikenal dengan nama URI (Uniform Resource Identifier). URI dapat dikatakan sebagai alamat post dari Internet, mengidentifikasikan seluruh sumber data yang ada di Internet dengan unik.
Berikut adalah contoh dari sebuah URI:
http://contoh.com/gambar/dinosaurus.png
URI di atas menunjukkan informasi lengkap di mana data yang ingin diakses disimpan. Informasi yang diberikan yaitu:
- Protokol pengaksesan, pada bagian
http://
- Alamat Internet, pada bagian
contoh.com
- Letak file yang ingin diakses pada web server, pada bagian
/gambar/dinosaurus.png
Contoh di atas merupakan salah satu dari dua cara representasi data oleh URI. URI memiliki dua cara representasi data, yaitu dengan URL dan URN.
URL
URL (Uniform Resource Locator) merupakan representasi URI yang paling sering digunakan. URL mendeskripsikan lokasi spesifik dari sebuah data di dalam server tertentu. URL bukan hanya mendeskripsikan lokasi, tetapi juga cara mengakses data yang kita inginkan.
Contoh URI yang kita lihat sebelumnya:
http://contoh.com/gambar/dinosaurus.png
merupakan contoh dari URL. Tiga bagian dari URL yang telah kita bahas sebelumnya (protokol, alamat, lokasi file) dapat digantikan sesuai dengan cara penyimpanan pada server. Misalnya:
ftp://bert@ftp.contoh.com/dokumen/laporan/2014-finansial.xslx
Pada contoh URL di atas, kita mengambil dokumen melalui protokol FTP (File Transfer Protocol) pada alamat
ftp.contoh.com
yang diakses dengan pengguna bert
. File disimpan pada lokasi /dokumen/laporan/2014-finansial.xslx
. Dengan informasi yang diberikan oleh URL ini, kita dapat mengambil data laporan finansial yang dibutuhkan dari manapun.
Pada dunia web di masa penulisan (awal 2015), hampir semua URI yang ada merupakan URL.
URN
URN (Uniform Resource Name) merupakan penanda berbentuk nama unik dari sebuah data atau konten tertentu, terlepas dari di mana sebenarnya data tersebut berada. Sifat yang tidak terikat dengan lokasi dari URN ini memungkinkan data sebenarnya berpindah-pindah secara bebas (misal jika terjadi perubahan server atau kepemilikan). URN juga memungkinkan kita untuk mengakses data dari beberapa protokol berbeda dengan nama yang sama. Misalnya, mungkin saja kita mengakses melalui FTP di desktop, dan melalui HTTP di tablet dengan URN yang sama.
Berikut adalah contoh dari sebuah URN:
urn:isbn:0201896834
Seperti yang dapat dilihat dari contoh di atas, URN terdiri dari tiga bagian:
- Bagian pertama,
urn:
merupakan penanda protokol yang digunakan, sama sepertihttp://
pada URL. - Bagian kedua yang dikenal dengan nama NID merupakan pengidentifikasi namespace. NID menentukan arti dari bagian selanjutnya. Bagian ini memberikan identifikasi objek apa yang sedang diakses. Pada contoh
isbn
, kita dapat langsung mengetahui kalau sumber daya yang ingin diakses adalah buku. Untuk perangkat lunak misalnya, kita mungkin saja menemukanuuid
di sini. - Bagian ketiga yang disebut dengan NSS merupakan nilai yang bersifat unik terhadap sumber daya yang diakses, sesuai dengan NID yang ada. Format penulisan dari NSS bergantung kepada NID. Cara penuliasn ISBN tentunya berbeda dengan UUID atau format lainnya.
Jadi, berdasarkan contoh URN di atas, kita mengetahui bahwa data yang ingin diakses adalah sebuah buku dengan ISBN 0201896834. Jika anda mencari kode tersebut, anda akan mendapatkan buku “The Art of Computer Programming” karangan Donald E. Knuth. Pada implementasi ideal, kita dapat mengisikan URN dan akan mendapatkan buku tersebut tanpa perlu tahu persis di mana lokasi buku tersebut berada. Hal ini tentunya jauh lebih memudahkan kita dibandingakn URL yang mewajibkan kita untuk mengetahui letak persis dari data yang ingin diakses.
Meskipun terlihat lebih mudah dan menyenangkan, sayangnya URN memerlukan perubahan infrastruktur yang besar dibandingkan dengan infrastruktur Internet yang kita gunakan sekarang. Hal ini mengakibatkan tidak adanya implementasi URN yang dapat kita gunakan seakrang, walaupun standar URN sendiri telah diajukan sejak tahun 90-an.
Karena tidak adanya implementasi dan adopsi luas dari URN, kita tidak akan membahas URN lebih lanjut pada tulisan ini. Bagian-bagian selanjutnya dari tulisan akan eksklusif membahas tentang URI (dan URL). Istilah URI dan URL juga akan kita anggap sama, karena pada prakteknya hampir tidak ada perbedaan antara URL dan URI (walaupun secara konsep mendasar kedua hal ini dianggap sama).
Transaksi HTTP
Kita telah mengetahui bagaimana klien dan server berkomunikasi secara garis besar. Kita juga telah melihat bagaimana data yang dikomunikasikan disimpan dan diakses pada server. Sekarang mari kita lihat bagaimana klien menafaatkan HTTP untuk berhubungan dengan web server dalam mengamil data atau sumber daya yang ada. Kita menyebut pemanfaatan HTTP untuk pertukaran informasi ini “Transaksi HTTP”.
Sebuah transaksi HTTP terdiri dari dua bagian:
- sebuah perintah request (permintaan) yang dikirimkan dari klien ke server, dan
- sebuah perintah response (tanggapan) yang dikirimkan dari server ke client.
Baik response maupun request dikirimkan menggunakan blok data dengan format spesifik yang kita kenal dengan sebutan HTTP Message. Gambar di bawah menunjukkan transaksi HTTP secara garis besar.
Pesan-pesan yang dikirimkan HTTP bergerak dalam satu arah. Pesan HTTP mengalir dari hulu ke hilir, terlepas dari apakah pesan tersebut merupakan request atau response. Pengirim pesan, baik server (pada kasus response) maupun client (pada kasus request) merupakan hulu, dan penerima pesan adalah hilir.
Arah transaksi HTTP berbeda dengan alur pesan. Ketika transaksi bergerak dari client ke server, transaksi memiliki arah inbound. Ketika server selesai bekerja dan menjalankan transaksi ke client, transaksi disebut memiliki arah outbound. Untuk mempermudah pengertian akan keempat istilah ini, perhatikan gambar berikut:
Semua server yang terlibat dalam perjalanan hulu ke hilir dari sebuah pesan HTTP akan menjadi hulu untuk bagian berikutnya. Pada gambar di atas, Proxy 1 merupakan hulu dari Proxy 2 di dalam alur request. Tetapi sebaliiknya, did alam alur response Proxy 2 menjadi hulu dari Proxy 1.
Bentuk Pesan HTTP
Sebuah pesan HTTP merupakan sebuah data sederhana, yang dibentuk dalam format tertentu. Setiap pesan selalu berisi requestataupun response, yang dibagi ke dalam 3 bagian:
- Bagian Start Line yang berisi deskripsi pesan
- Bagian Header yang berisi daftar atribut dari pesan
- Bagian Body yang berisi data
Bagian Start Line dan Header merupakan data teks ASCII standar, yang dipisahkan oleh baris baru. Pemisah baris yang digunakan oleh HTTP dibangun dari dua karakter, yaitu Carriage Return (CR, ASCII 13) dan Line Feed (LF, ASCII 10). Kedua karakter ini jika digabungkan akan menghasilkan baris baru, dan dikenal dengan nama CRLF pada notasi umum. Begitupun, sebuah aplikasi browser yang baik akan menerima CRLF maupun LF saja. Ketika mengembangkan aplikasi HTTP, disarankan untuk selalu membuat baris baru dengan CRLF untuk memastikan pesan HTTP berhasil diterima dengan benar.
Bagian Body dari HTTP berisi data yang ingin dikirimkan. Data yang dikirimkan dapat berisi apapun, misalnya HTML (paling umum), gambar, atau data biner apapun. Bagian body juga boleh tidak berisi (kosong).
Gambar berikut memberikan contoh bentuk pesan HTTP:
Seperti yang dapat dilihat, kita dapat memiliki banyak atribut pesan (bagian header) dalam HTTP. Terdapat banyak atribut yang dapat diberikan, baik atribut standar maupun non-standar. Pembahasan detil akan dilakukan pada bagian berikutnya. Pada pesan di atas, “content-type” berisi informasi tipe data pada bagian Body dengan format MIME (dalam kasus ini, data teks). Atribut “content-length” sendiri berisi informasi ukuran dari bagian Body yang dikirimkan, yaitu 24 byte.
1. Sintaks Pesan HTTP
Hanya ada 2 jenis pesan HTTP: request dan response. Seperti yang telah dijelaskan sebelumnya, request berisi permintaan data, danresponse berisi jawaban dari request, dalam bentuk apapun.
Apa arti dari setiap kata yang ada di dalam kurung siku? Mari kita lihat satu per satu:
- method
- Merupakan aksi yang ingin client minta dijalankan oleh server. Sebuah
method
selalu terdiri dari satu kata seperti “GET”, “POST”, dll. Detail mengenaimethod
akan kita bahas pada bagian berikutnya. - request-URL
- Lokasi dari data yang diminta oleh client. Lokasi dapat dimintai dalam format URL lengkap ataupun hanya bagian path saja. Jikarequest dikirimkan langsung kepada server yang akan memberikan respon tanpa perantara, biasanya bagian path saja sudah cukup, karena server dapat mengasumsikan protokol dan host dari URL adalah sama dengan yang dimiliki oleh server.
- version
- Versi HTTP yang digunakan oleh pengirim pesan.
- di mana major maupun minor berisi sebuah bilangan bulat penanda versi.
- status-code
- Sebuah bilangan tiga digit yang mendeskripsikan apa yang terjadi selama request diproses. Detail mengenai status code akan kita bahas pada bagian berikutnya.
- reason-phrase
- Teks yang mendeskripsikan
status-code
dalam bahasa manusia. Biasanya hanya berisi deskripsi singkat, karenareason-phrase
akan dianggap selesai jika baris baru ditemukan. Hal ini berartireason-phrase
hanya dapat terdiri dari satu baris kalimat. - headers
- Nol atau lebih header.Masing-masing header akan memiliki nama dan isi yang unik, dipisahkan oleh CRLF. Jika seluruh header telah diberikan, akan terdapat sebuah baris kosong untuk memisahkan antara header dengan body.
- entity-body
- Isi dari pesan yang dikirimkan. Dapat berisi data biner apapun. Jika pesan tidak memiliki isi, maka bagian ini hanya akan berisi sebuah CRLF.
Sebuah catatan penting lainnya adalah bahwa header HTTP selalu diakhiri oleh sebuah baris baru (baris yang hanya berisi CRLF), bahkan ketika pesan tidak memiliki header dan body. Hal ini berarti ketika sebuah pesan tidak memiliki header dan body, bagian dari penutup pesan akan memiliki dua buah CRLF. Terdapat sangat banyak kliend an server HTTP yang melakukan kesalahan dengan hanya mengirimkan satu CRLF saja pada akhir pesan yang tidak memiliki header dan body. Jika anda mengembangakn server maupunclient HTTP, pastikan perangkat lunak anda dapat menangani kesalahan ini.
2. Start Line
Semua pesan HTTP diawali dengan satu baris pertama Start Line. Start Line memiliki arti yang berbeda, tergantung jenis pesan. Pada pesan request, Start Line mendeskripsikan apa yang harus dilakukan server. Pada pesan response Start Line mendeskripsikan apa yang terjadi setelah server melakukan pesan request.
Mari kita lihat bagaimana perbedaan isi dan bentuk dari kedua jenis Start Line tersebut.
Start Line pada Request
Berikut adalah sebuah contoh Start Line pada sebuah pesan HTTP request:
GET /test/hello.txt HTTP/1.1
Bagian pertama, yaitu
GET
yang kita kategorikan sebagai method
mendeskripsikan operasi apa yang harus dilakukan oleh server. Dalam kasus ini, operasi yang dilakukan yaitu pengambilan data dari server. Terdapat total tujuh buah jenis perintah yang dispesifikasikan oleh standar HTTP, di mana beberapa pesan mewajibkan kita untuk mengisikan bagian Body dan beberapa pesan tidak.
Tabel berikut menunjukkan ketujuh perintah pesan yang ada pada HTTP standar:
Method | Deskripsi | Body wajib? |
GET | Ambil dokumen dari server | Tidak |
HEAD | Ambil header dokumen dari server | Tidak |
POST | Kirimkan data ke server untuk diproses | Ya |
PUT | Simpan data yang ada di bagian Body ke server | Ya |
TRACE | Ikuti jejak pesan dari proxy server sampai ke server | Tidak |
OPTIONS | Temukan method apa saja yang dapat dijalankan oleh server | Tidak |
DELETE | Hapus data dari server | Tidak |
Ingat bahwa tidak semua server mengimplementasikan ketujuh fungsi standar HTTP ini. Tambahan lagi, karena HTTP dirancang untuk mudah dikembangkan, terdapat banyak server yang mengimplementasikan fungsi-fungsi tamabahan di luar ketujuh fungsi ini. Fungsi tambahan seperti ini dinamakan “extension method”.
Bagian kedua dari Start Line pada contoh pesan request yang diberikan yaitu
/test/hello.txt
. Bagian ini menunjukkan lokasi dari data atau sumber daya mana yang akan diproses oleh server dengan perintah yang diberikan oleh method
. Pada contoh kita, server akan mengambil dokumen yang disimpan pada /test/hello.txt
di server. Jika pesan berbentuk:DELETE /test/hello.txt HTTP/1.1
maka server akan menghapus file
/test/hello.txt
.
Bagian ketiga, yaitu
HTTP/1.1
menunjukkan versi protokol yang digunakan oleh pengirim pesan. Format penulisan versi ini selaluHTTP/x.y
pada protokol HTTP. Versi protokol penting untuk memastikan semua pihak yang terlibat (client dan server) dapat memahami pesan yang dikirimkan dan diterima. Sebuah server yang hanya mengerti protokol versi 1.0 tentunya tidak akan dapat mengerti pesan yang dikirimkan oleh klien dalam format protokol 2.0.
Nomor versi yang dikirimkan menunjukkan versi protokol tertinggi yang didukung oleh aplikasi. Hal ini berarti sebuah pesan dengan versi
HTTP/1.1
hanya mengindikasikan bahwa pengirim pesan mengerti protokol HTTP/1.1
, bukan bahwa pesan menggunakan format atau fitur HTTP/1.1
.
Perlu diketahui juga bahwa nomor versi pada protokol HTTP bukan bilangan desimal. Semua bilangan pada versi (contoh: “1” dan “0” pada
HTTP/1.0
) dianggap nilai yang berbeda. Hal ini berarti HTTP/1.22
memiliki versi yang lebih tinggi dari HTTP/1.3
.
Meskipun penggunaan method HTTP terlihat sederhana secara sekilas, pada prakteknya terdapat banyak intrik dan detil dalam penggunaan method. Penjelasan mengenai method secara mendalam dapat dibaca pada bagian Lampiran A.
Start Line pada Response
Pesan response berisi informasi status dan data hasil operasi yang dikirimkan balik kepada client. Berikut adalah contoh dari sebuah Start Line pada pesan response:
HTTP/1.0 200 OK
Bagian pertama dari response adalah versi protokol. Format dan arti versi protokol sama dengan yang ditemukan pada pesan request.
Bagian berikutnya dari response, yaitu
200 OK
berisi kode status dari informasi yang diminta oleh pesan request. Jika method
memberikan informasi apa yang harus dilakukan, maka bagian ini memberikan informasi apa yang terjadi setelah operasi dilakukan. Kode status terdiri dari dua bagian:- Bagian pertama berupa kode angka (
status-code
;200
pada contoh). Dibuat agar kode status mudah diproses oleh komputer. - Bagian kedua berupa teks penjelasan (
reason-phrase
;OK
pada contoh). Dibuat agar mudah dimengerti oleh manusia (pengguna sistem).
Kode status dibagi ke dalam beberapa kateogri, yang dapat dilihat pada tabel berikut:
Keseluruhan Kode | Kode yang Terdefinisi | Kategori |
100 - 199 | 100 - 101 | Informasional |
200 - 299 | 200 - 206 | Sukses |
300 - 399 | 300 - 305 | Redirection |
400 - 499 | 400 - 415 | Kesalahan Client |
500 - 599 | 500 - 505 | Kesalahan Server |
Bagian keseluruhan kode pada tabel di atas mengindikasikan keseluruhan kode status yang mungkin ada untuk satu kategori. Misalnya, kode status dalam cakupan 400-499 akan selalu berisi kode tentang kesalahan server. Begitupun, spesifikasi HTTP baru mendefinisakn sebagian arti kode saja (hanya 400-415). Jika aplikasi menemukan kode status 450 misalnya, kemungkinan server HTTP menggunakan penambahan (extension) dari protokol HTTP.
Berikut adalah beberapa contoh kode status yang sering ditemui pada aplikasi web:
status-code | reason-phrase | Arti |
200 | OK | Operasi berhasil! Data ada di Body |
401 | Unauthorized | Tidak diizinkan mengakses URL. Mungkin perlu username dan password |
404 | Not Found | URL tidak ditemukan pada server. |
Spesifikasi HTTP tidak menentukan secara jelas isi dari
reason-phrase
. Begitupun, karena makna dari status-code
sangat jelas danreason-phrase
mewakili hanya satu status-code
, umumnya kita akan menemukan reason-phrase
yang sama untuk setiapstatus-code
pada kebanyakan server.
Jumlah kode status sendiri sangat banyak, dan tidak akan diberikan deskripsi detailnya pada bagian ini. Deskripsi detil dari masing-masing kode status dapat dilihat pada Lampiran B.
Header
Pada bagian sebelumnya kita telah melihat detil dari baris pertama dari pesan response maupun request. Sekarang kita akan melihat detil dari bagian Header, yaitu baris-baris selanjutnya dari sebuah pesan HTTP.
HTTP Header menyajikan informasi tambahan untuk pesan request maupun response. Pada dasarnya HTTP Header hanya merupakan daftar dari name / value sederhana. Misalnya, HTTP Header berikut:
Content-length: 20
merupakan sebuah HTTP Header yang memberikan informasi mengenai panjang konten (name;
Content-length
) dengan detil bahwa panjang konten adalah 20 (value, 20
).Klasifikasi HTTP Header
Terdapat banyak HTTP Header pada spesifikasi resmim HTTP, dan seluruh header ini diklasifikasikan ke dalam beberapa kategori. Aplikasi pengimplementasi juga boleh membuat header tersendiri jika dibutuhkan. Adapun kelas kategori dari HTTP Header adalah sebagai berikut:
- General Header
- Merupakan header yang dapat digunakan pada request maupun response.
- Request Header
- Header yang memberikan informasi tambahan mengenai request.
- Response Header
- Header yang memberikan informasi tambahan mengenai response.
- Entity Header
- Header yang menyajikan informasi tentang konten dan sumber daya, baik dari sisi ukuran, jenis, maupun data lainnya.
- Extension Header
- Header tambahan buatan aplikasi, yang tidak dispesifikasikan secara langsung oleh HTTP.
Sintaks penulisan HTTP Header sendiri sangat sederhana, yaitu:
:
// header selanjutnya
Tabel di bawah memberikan beberapa contoh header yang umum digunakan.
Contoh Header | Arti |
Date: Sun, 1 Mar 2015 11:50:21 GMT | Tanggal dan waktu server menuliskan header |
Content-length: 1024 | Bagian body berukuran 1024 |
Content-type: image/png | Bagian body berisi gambar dengan format PNG |
Accept: image/gif, image/jpeg, text/html | Klien dapat menerima data dengan format GIF, JPEG, dan HTML |
Karena jumlah dari header yang cukup bervariasi, kita tidak akan mendeskripsikan seluruh header yang ada pada bagian ini. Jika tertarik, referensi tentang header dan deskripsinya dapat ditemukan pada Lampiran C.
Header Continuation Line
Terkadang isi dari sebuah header memberikan informasi yang sangat detil, sehingga tidak dapat dimasukkan ke dalam satu baris. Kita dapat memisahkan header ke dalam beberapa baris dengan menggunakan fitur header continuation line. Jika header lebih dari satu baris, tambahkan sebuah spasi atau tab sebagai penanda. Misalnya:
HTTP/1.1 200 OK
Content-type: image/png
Content-length: 1024
Server: Simple HTTP Server
Version: 1.0
Pada contoh di atas, header
Server
memiliki informasi yang dibagi ke dalam dua baris, yaitu nama server (Simple HTTP Server
) dan versi server (Version: 1.0
).Entity Body
Bagian ketiga dan terakhir dari sebuah pesan HTTP adalah entity body. Seperti namanya, entity body merupakan isi pesan yang ingin dikirimkan, baik oleh client maupun server. HTTP dirancang untuk mengirimkan entity body dari satu titik ke titik lainnya. Entity bodybersifat opsional, boleh ada dan boleh tidak ada.
Pesan HTTP dapat berisi banyak jenis data: gambar, video, dokumen HTML, aplikasi, surat elektronik, dan sebagainya. Semua data yang dikirimkan ini berada di dalam entity body.