Back to IF3110 Pengembangan Aplikasi Berbasis Web

Topic

Questions/Cues

  • Apa itu HTTP?

  • Bagaimana struktur dasar HTTP?

  • Apa saja metode permintaan (Request Methods)?

  • Apa perbedaan GET vs POST?

  • Apa fungsi Status Code?

  • Apa saja jenis-jenis HTTP Header?

  • Bagaimana cara kerja Caching?

  • Apa itu Persistent Connection?

  • Apa perbedaan HTTP/1.1 dan HTTP/2?

  • Apa itu HTTPS?

Reference Points

  • Slides IF3110-02a-HTTP-Protocol.pdf

Apa itu Protokol HTTP?

HTTP (Hypertext Transfer Protocol) adalah protokol fundamental yang digunakan dalam World Wide Web (WWW). Ia berfungsi sebagai protokol lapisan aplikasi (Application Layer) yang berjalan di atas TCP (Transmission Control Protocol).

Karakteristik Utama:

  • Sederhana: Desainnya yang simpel adalah kekuatan sekaligus kelemahannya.

  • Stateless: HTTP tidak menyimpan status atau informasi dari transaksi sebelumnya. Setiap permintaan (request) dari klien ke server dianggap sebagai transaksi yang independen dan tunggal. Server tidak mengingat apapun tentang klien setelah merespons.

  • Request-Response Paradigm: Komunikasi selalu diawali oleh klien yang mengirimkan request ke server, dan server akan membalas dengan sebuah response.

Struktur Pesan HTTP

Baik pesan request maupun response memiliki struktur yang serupa, terdiri dari tiga bagian utama:

  1. Start Line: Baris pertama yang mendefinisikan permintaan (misalnya, GET /index.html HTTP/1.1) atau status respons (misalnya, HTTP/1.1 200 OK).

  2. Headers: Beberapa baris metadata dalam format Nama-Header: nilai yang memberikan informasi tambahan tentang permintaan atau respons. Contohnya Host: www.itb.ac.id atau Content-Type: text/html.

  3. Message Body (Opsional): Bagian yang berisi data yang dikirim, seperti data formulir (dalam request POST) atau konten halaman HTML (dalam response). Bagian header dan body dipisahkan oleh satu baris kosong (CRLF).

Metode Permintaan (Request Methods)

Metode ini mendefinisikan aksi yang ingin dilakukan oleh klien terhadap sumber daya di server.

  • GET: Metode paling sederhana untuk meminta/mengambil data dari server. Parameter dikirim melalui URL (query string). Tidak memiliki request body dan seharusnya tidak mengubah data di server (idempotent).

  • POST: Mengirimkan data untuk diproses oleh server, misalnya data dari sebuah formulir. Data dikirim dalam request body. Metode ini dapat mengubah data di server.

  • HEAD: Sama seperti GET, tetapi server hanya mengembalikan header tanpa response body. Berguna untuk memeriksa metadata sumber daya (seperti tanggal modifikasi terakhir) tanpa perlu mengunduh seluruh konten.

  • PUT: Menyimpan (mengunggah atau memperbarui) sebuah sumber daya di URL tertentu. Jika sumber daya sudah ada, ia akan diperbarui.

  • DELETE: Menghapus sumber daya yang ada di URL tertentu.

  • TRACE: Mengembalikan pesan request yang diterima oleh server. Berguna untuk debugging dan melihat apakah ada proxy di tengah jalan yang mengubah request.

  • OPTIONS: Menanyakan metode HTTP apa saja yang didukung oleh server untuk URL tertentu.

  • CONNECT: Mengubah koneksi menjadi terowongan TCP/IP transparan, biasanya digunakan untuk komunikasi SSL/TLS (HTTPS).

  • PATCH: Menerapkan modifikasi parsial pada sebuah sumber daya.

Perbandingan GET vs POST

FiturGETPOST
CachingBisa di-cacheTidak pernah di-cache
History BrowserTersimpan di riwayatTidak tersimpan di riwayat
BookmarkBisa di-bookmarkTidak bisa di-bookmark
Visibilitas DataData terlihat di URLData tidak terlihat di URL (di body)
Panjang DataAda batasan panjang (tergantung browser/server)Tidak ada batasan panjang
Tipe DataHanya karakter ASCIIBisa data biner (misal: upload file)
Request ParametersDitambahkan di URL setelah tanda ”?”Ada di Request body

Kode Status (Status Code)

Kode tiga digit yang dikirim oleh server sebagai bagian dari response untuk menginformasikan hasil dari request yang diterima.

  • 1xx (Informational): Permintaan diterima, proses berlanjut.

  • 2xx (Success): Aksi berhasil diterima, dipahami, dan diterima. Contoh: 200 OK.

  • 3xx (Redirection): Klien perlu melakukan aksi lebih lanjut untuk menyelesaikan permintaan, biasanya pengalihan ke URL lain. Contoh: 301 Moved Permanently.

  • 4xx (Client Error): Permintaan mengandung sintaks yang salah atau tidak dapat dipenuhi. Contoh: 404 Not Found, 403 Forbidden.

  • 5xx (Server Error): Server gagal memenuhi permintaan yang valid. Contoh: 500 Internal Server Error.

HTTP Headers

Header menyediakan informasi kontekstual tentang pesan.

  • General Headers: Berlaku untuk request dan response (misal: Date, Connection).

  • Request Headers: Spesifik untuk request (misal: Host, User-Agent, Referer, Authorization, Cookie). Host wajib ada di HTTP/1.1 untuk mendukung virtual hosting.

  • Response Headers: Spesifik untuk response (misal: Server, Location, Set-Cookie).

  • Entity Headers: Mendeskripsikan message body (misal: Content-Type, Content-Length, Last-Modified).

Header VariableFungsi Utama**HTTP Request ****HTTP Response **
Content-LengthMenunjukkan ukuran body pesan (penting saat mengirim POST/PUT atau respons).
Content-TypeMenunjukkan format data di body (misalnya, application/json, text/html).
Set-CookieMenginstruksikan browser untuk menyimpan cookie baru.
User-AgentMengidentifikasi client (jenis browser, sistem operasi).
CookieMengirimkan cookie yang tersimpan kembali ke server.
Last-ModifiedMenunjukkan kapan sumber daya terakhir dimodifikasi di server.
AcceptMemberi tahu server format data apa yang diterima client (misalnya, application/json).
AuthorizationMengirimkan kredensial otentikasi (misalnya, Bearer Token).
LocationDigunakan untuk pengalihan (redirect).

Caching Control & Persistent Connection

  • Caching: Browser dapat menyimpan salinan respons untuk mempercepat waktu muat. Header If-Modified-Since pada request dan Last-Modified pada response digunakan untuk memeriksa apakah konten telah berubah, sehingga browser tidak perlu mengunduh ulang jika masih sama.

  • Persistent Connection: HTTP/1.0 membuka koneksi TCP baru untuk setiap request, yang tidak efisien. HTTP/1.1 memperkenalkan koneksi persisten (Connection: Keep-Alive), di mana satu koneksi TCP dapat digunakan kembali untuk beberapa request-response, mengurangi latensi.

Evolusi HTTP: HTTP/1.1 vs HTTP/2

HTTP/1.1, yang telah digunakan sejak lama, memiliki beberapa masalah kinerja seperti Head-of-Line Blocking (satu request lambat menahan request berikutnya). HTTP/2 diperkenalkan untuk mengatasi masalah ini.

Peningkatan di HTTP/2:

  1. Protokol Biner: Lebih efisien untuk diproses oleh mesin dibandingkan protokol teks HTTP/1.1.

  2. Multiplexing: Memungkinkan beberapa request dan response dikirim secara bersamaan melalui satu koneksi TCP tunggal, menghilangkan Head-of-Line Blocking.

  3. Kompresi Header: Mengurangi ukuran header untuk menghemat bandwidth.

  4. Server Push: Server dapat proaktif mengirim sumber daya yang akan dibutuhkan klien bahkan sebelum diminta (misalnya, mengirim file CSS saat HTML diminta).

HTTPS: HTTP yang Aman

HTTPS adalah singkatan dari HTTP over TLS (Transport Layer Security) over TCP. Ini bukan protokol yang terpisah, melainkan penggunaan HTTP di atas lapisan enkripsi. Sebelum komunikasi HTTP dimulai, klien dan server melakukan TCP 3-way handshake diikuti oleh TLS handshake untuk membuat saluran komunikasi yang aman dan terenkripsi.

Summary

HTTP adalah protokol lapisan aplikasi yang stateless dan bekerja dengan model permintaan-respons untuk komunikasi di World Wide Web. Setiap pesan HTTP, baik permintaan maupun respons, memiliki struktur yang terdiri dari start-line, header, dan body opsional. Metode permintaan seperti GET dan POST mendefinisikan aksi yang diinginkan, sementara kode status memberikan umpan balik atas hasilnya. Evolusi dari HTTP/1.1 ke HTTP/2 membawa perbaikan kinerja signifikan melalui fitur seperti multiplexing dan kompresi header. Untuk keamanan, HTTPS mengenkripsi komunikasi HTTP menggunakan TLS.