Anda di halaman 1dari 30

8/18/22, 4:19 PM HTTP Header untuk Dummies

Unlimited asset downloads!


Start 7-Day Free Trial 

Code  Web Development

HTTP Header untuk Dummies


Burak Guzel May 12, 2021


32
likes | 
17 mins | 
Bahasa Indonesia

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Apakah Anda seorang programmer atau bukan, Anda telah melihatnya di mana-mana di
web. Saat ini address bar browser Anda menunjukkan sesuatu yang dimulai dengan
"https://". Bahkan skrip Hello World pertama Anda mengirim HTTP header tanpa Anda
menyadarinya. Dalam artikel ini kita akan belajar tentang dasar-dasar dari HTTP header
dan bagaimana kita dapat menggunakannya dalam aplikasi web kita.

Apa itu HTTP Header?


HTTP adalah singkatan dari "Hypertext Transfer Protocol". Seluruh World Wide Web
menggunakan protokol ini. Didirikan pada awal 1990-an. Hampir segala sesuatu yang
Anda lihat dalam browser Anda ditransmisikan ke komputer Anda melalui HTTP. Misalnya,
ketika Anda membuka halaman artikel ini, browser mungkin telah mengirim lebih dari 40
permintaan HTTP dan menerima respon HTTP untuk masing-masing.

HTTP header adalah bagian inti dari permintaan dan respon HTTP ini, dan mereka
membawa informasi tentang browser klien, halaman yang diminta, server dan banyak lagi.

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 1/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Contoh

Ketika Anda mengetik url di address bar, browser Anda mengirimkan permintaan HTTP
dan itu mungkin terlihat seperti ini:

01 GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1


02 Host: net.tutsplus.com
03 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102
04 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
05 Accept-Language: en-us,en;q=0.5
06 Accept-Encoding: gzip,deflate
07 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
08 Keep-Alive: 300
09 Connection: keep-alive
10 Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
11 Pragma: no-cache
12 Cache-Control: no-cache

Baris pertama adalah "Request Line" yang berisi beberapa info dasar pada permintaan.
Dan sisanya adalah HTTP header.

Setelah permintaan itu, browser Anda menerima respon HTTP yang mungkin terlihat
seperti ini:

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 2/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

01 HTTP/1.x 200 OK
02 Transfer-Encoding: chunked
03 Date: Sat, 28 Nov 2009 04:36:25 GMT
04 Server: LiteSpeed
05 Connection: close
06 X-Powered-By: W3 Total Cache/0.8
07 Pragma: public
08 Expires: Sat, 28 Nov 2009 05:36:25 GMT
09 Etag: "pub1259380237;gz"
10 Cache-Control: max-age=3600, public
11 Content-Type: text/html; charset=UTF-8
12 Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
13 X-Pingback: https://net.tutsplus.com/xmlrpc.php
14 Content-Encoding: gzip
15 Vary: Accept-Encoding, Cookie, User-Agent
16  
17 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/D
18 <html xmlns="http://www.w3.org/1999/xhtml">
19 <head>
20 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
21 <title>Top 20+ MySQL Best Practices - Nettuts+</title>
22 <!-- ... rest of the html ... -->

Baris pertama adalah "Status Line", diikuti oleh "HTTP header", sampai dengan baris
kosong. Setelah itu, "konten" dimulai (dalam kasus ini, HTML output).

Ketika Anda melihat kode sumber halaman web di browser Anda, Anda hanya akan
melihat bagian HTML dan tidak HTTP header, meskipun mereka benar-benar telah
dikirimkan bersama-sama seperti yang Anda lihat di atas.

Permintaan HTTP ini juga dikirim dan diterima untuk hal-hal lain, seperti gambar, file CSS,
file JavaScript dll. Itu sebabnya saya katakan sebelumnya bahwa browser Anda telah
mengirimkan permintaan HTTP setidaknya 40 atau lebih saat Anda memuat hanya
halaman artikel ini.

Sekarang, mari kita mulai meninjau strukturnya secara lebih rinci.

Cara Melihat HTTP Header


Saya menggunakan ekstensi Firefox berikut untuk menganalisis HTTP header:

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 3/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Firebug

Live HTTP Headers

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 4/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Di PHP:

getallheaders() mendapat header permintaan. Anda juga dapat menggunakan array


$_SERVER.
headers_list() mendapatkan header respon.

Lebih lanjut dalam artikel ini, kita akan melihat beberapa contoh kode dalam PHP.

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 5/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Advertisement

Struktur Permintaan HTTP

Baris pertama dari permintaan HTTP disebut garis permintaan dan terdiri dari 3 bagian:

"Metode" menunjukkan jenis apa permintaan ini. Metode yang paling umum adalah
GET, POST dan HEAD.
"Jalan" umumnya bagian dari url yang datang setelah host (domain). Misalnya, ketika
meminta "https://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/" ,
porsi jalan adalah "/tutorials/other/top-20-mysql-best-practices/".
Bagian "protokol" berisi "HTTP" dan versi, yang biasanya 1.1 di browser modern.

Sisa dari permintaan berisi HTTP header sebagai pasangan "Nama: Nilai" pada masing-
masing baris. Ini berisi berbagai informasi tentang permintaan HTTP dan browser Anda.
Misalnya, baris "User-Agent" menyediakan informasi pada versi browser dan Sistem
Operasi yang Anda gunakan. "Accept-Encoding" memberitahu server jika browser Anda
dapat menerima output terkompresi seperti gzip.

Anda mungkin memperhatikan bahwa data cookie juga ditularkan dalam HTTP header.
Dan jika ada yang url acuan, maka akan ada di header juga.

Sebagian besar dari header ini adalah opsional. Permintaan HTTP ini bisa menjadi kecil
seperti ini:

1
https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 6/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

2 GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1


Host: net.tutsplus.com

Dan Anda masih akan mendapatkan respon yang valid dari server web.

Metode Permintaan
Tiga metode permintaan yang paling umum digunakan adalah: GET, POST dan HEAD.
Anda mungkin sudah akrab dengan dua yang pertama, dari menulis form html.

GET: Menerima Dokumen

Ini adalah metode utama yang digunakan untuk menerima html, gambar, JavaScript, CSS,
dll. Sebagian besar data yang dimuat di browser Anda diminta menggunakan metode ini.

Misalnya, ketika loading artikel Nettuts+, baris pertama dari request HTTP terlihat seperti:

1 GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1


2 ...

Sekali html memuat, browser akan mulai mengirim permintaan GET untuk gambar, yang
mungkin terlihat seperti ini:

1 GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1


2 ...

Form web dapat diatur untuk menggunakan metode GET. Berikut ini adalah contohnya.

1 <form method="GET" action="foo.php">


2  
3 First Name: <input type="text" name="first_name" /> <br />
4 Last Name: <input type="text" name="last_name" /> <br />
5  
6 <input type="submit" name="action" value="Submit" />
7  
8 </form>

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 7/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Bila form dikirimkan, permintaan HTTP dimulai seperti ini:

1 GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1


2 ...

Anda dapat melihat bahwa setiap input form ditambahkan ke dalam query string.

POST: Mengirim Data ke Server


Meskipun Anda dapat mengirim data ke server menggunakan GET dan query string, dalam
banyak kasus POST akan lebih baik. Mengirim data dalam jumlah besar menggunakan GET
adalah tidak praktis dan memiliki keterbatasan.

Permintaan POST adalah yang paling sering dikirim oleh form web. Mari kita mengubah
contoh form sebelumnya ke metode POST.

1 <form method="POST" action="foo.php">


2  
3 First Name: <input type="text" name="first_name" /> <br />
4 Last Name: <input type="text" name="last_name" /> <br />
5  
6 <input type="submit" name="action" value="Submit" />
7  
8 </form>

Mengirimkan form tersebut itu menciptakan sebuah permintaan HTTP seperti ini:

01 POST /foo.php HTTP/1.1


02 Host: localhost
03 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102
04 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
05 Accept-Language: en-us,en;q=0.5
06 Accept-Encoding: gzip,deflate
07 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
08 Keep-Alive: 300
09 Connection: keep-alive
10 Referer: http://localhost/test.php
11 Content-Type: application/x-www-form-urlencoded
12 Content-Length: 43
13  
14 first_name=John&last_name=Doe&action=Submit
https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 8/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Ada tiga hal penting untuk dicatat di sini:

Jalan di baris pertama adalah hanya /foo.php dan tidak ada query string lagi.
Header Content-Type dan Content-Lenght telah ditambahkan, yang memberikan
informasi tentang data yang sedang dikirim.
Semua data sekarang dikirim setelah header, dengan format yang sama seperti query
string.

Permintaan metode POST juga dapat dibuat melalui AJAX, aplikasi, cURL, dll. Dan semua
form upload file diperlukan untuk menggunakan metode POST.

HEAD: Menerima Informasi Header


HEAD adalah identik dengan GET, kecuali server tidak mengembalikan konten di respon
HTTP. Ketika Anda mengirim permintaan HEAD, itu berarti bahwa Anda hanya tertarik
pada kode respon dan HTTP header, bukan dokumennya.

Ketika Anda mengirim permintaan HEAD, itu berarti bahwa


Anda hanya tertarik pada kode respon dan HTTP header, bukan
dokumennya.

Dengan metode ini browser dapat memeriksa apakah dokumen telah dimodifikasi, untuk
tujuan caching. Juga dapat memeriksa apakah dokumennya ada.

Misalnya, jika Anda memiliki banyak link pada situs web Anda, Anda dapat secara berkala
mengirim permintaan HEAD ke semua dari mereka untuk memeriksa link yang rusak. Ini
akan bekerja jauh lebih cepat daripada menggunakan GET.

Struktur Respon HTTP

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 9/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Setelah browser mengirimkan permintaan HTTP, server merespon dengan respon HTTP.
Tidak termasuk konten, terlihat seperti ini:

Bagian pertama dari data adalah protokol. Ini lagi biasanya HTTP/1.x atau HTTP/1.1 pada
server modern.

Bagian berikutnya adalah kode status yang diikuti dengan sebuah pesan singkat. Kode 200
berarti bahwa permintaan GET kami sukses dan server akan mengembalikan konten dari
dokumen yang diminta, setelah header.

Kita semua telah melihat halaman "404". Nomor ini sebenarnya berasal dari kode status
bagian dari respon HTTP. Jika permintaan GET akan dibuat untuk jalan yang tidak dapat
ditemukan server, itu akan merespon dengan 404 daripada 200.

Sisa dari respon berisi header seperti permintaan HTTP. Nilai-nilai ini dapat berisi informasi
tentang perangkat lunak server, ketika halaman/file yang terakhir diubah, mime type dll...

Lagi-lagi, sebagian besar dari header tersebut adalah benar-benar opsional.

Kode Status HTTP


200 digunakan untuk permintaan yang sukses.
300 adalah untuk pengalihan.
400 digunakan jika ada masalah dengan permintaan.
https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 10/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

500 digunakan jika ada masalah dengan server.

200 OK

Seperti disebutkan sebelumnya, ini status kode yang dikirim dalam menanggapi
permintaan yang berhasil.

206 Partial Content

Jika sebuah aplikasi hanya meminta serangkaian file yang diminta, kode 206 dikembalikan.

Ini paling sering digunakan dengan manajer download yang dapat menghentikan dan
melanjutkan download, atau membagi download menjadi potongan-potongan.

404 Not Found

Ketika halaman atau file yang diminta tidak ditemukan, respon 404 adalah kode yang
dikirim oleh server.

401 Unauthorized
Halaman web yang dilindungi password mengirim kode ini. Jika Anda tidak memasukkan
login dengan benar, Anda akan melihat berikut ini di browser Anda.

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 11/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Perhatikan bahwa ini hanya berlaku untuk halaman HTTP yang dilindungi password, yang
menampilkan pop up login seperti ini:

403 Forbidden

Jika Anda tidak diizinkan untuk mengakses halaman, kode ini dapat dikirimkan ke browser
Anda. Hal ini sering terjadi ketika Anda mencoba untuk membuka url untuk folder, yang
tidak berisi halaman indeks. Jika pengaturan server tidak mengijinkann tampilan isi folder,
Anda akan mendapatkan error 403.

Misalnya, di server lokal saya membuat sebuah folder gambar. Di dalam folder ini saya
masukan file .htaccess dengan baris ini: "Options -Indexes". Sekarang ketika saya mencoba
untuk membuka http://localhost/images/ - saya melihat ini:

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 12/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Ada cara lain di mana akses dapat diblokir, dan 403 dapat dikirim. Misalnya, Anda dapat
memblokir berdasarkan alamat IP, dengan bantuan beberapa arahan htaccess.

1 order allow,deny
2 deny from 192.168.44.201
3 deny from 224.39.163.12
4 deny from 172.16.7.92
5 allow from all

302 (atau 307) Moved Temporarily & 301 Moved Permanently


Dua kode ini yang digunakan untuk mengarahkan browser. Misalnya, ketika Anda
menggunakan layanan pemendek url seperti bit.ly, itulah cara mereka meneruskan orang-
orang yang mengklik link mereka.

Semua 302 dan 301 ditangani sangat mirip oleh browser, tetapi mereka dapat memiliki
makna yang berbeda oleh spider dari mesin pencari. Misalnya, jika situs web Anda sedang
down untuk pemeliharaan, Anda dapat mengarahkan ke lokasi lain menggunakan 302.
Spider mesin pencari akan terus memeriksa halaman Anda nantinya di masa depan. Tapi
jika Anda mengalihkan menggunakan 301, ia akan memberitahu spider bahwa situs web
Anda telah pindah ke lokasi secara permanen. Untuk memberikan ide yang lebih
baik: http://www.nettuts.com dialihkan ke https://net.tutsplus.com/ menggunakan kode
301 bukannya 302.

500 Internal Server Error

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 13/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Kode ini biasanya terlihat ketika skrip web rusak. Kebanyakan skrip CGI tidak output
kesalahan langsung ke browser, tidak seperti PHP. Jika ada kesalahan fatal, mereka hanya
akan mengirim kode status 500. Dan programmer kemudian perlu mencari log kesalahan
server untuk menemukan pesan kesalahan.

Daftar Lengkap
Anda dapat menemukan daftar lengkap kode status HTTP beserta penjelasan mereka di
sini.

HTTP Header dalam Permintaan HTTP


Sekarang, kita akan meninjau beberapa dari HTTP header yang paling umum ditemukan
dalam permintaan HTTP.

Hampir semua dari header ini dapat ditemukan di array $_SERVER dalam PHP. Anda juga
dapat menggunakan fungsi getallheaders() untuk menerima semua header sekaligus.

Host
Permintaan HTTP dikirimkan ke Alamat IP tertentu. Tapi karena kebanyakan server mampu
meng-hosting beberapa situs web di bawah IP yang sama, mereka harus tahu nama
domain mana yang dicari browser.

1 Host: net.tutsplus.com

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 14/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Ini pada dasarnya adalah nama host, termasuk domain dan subdomain.

Dalam PHP, hal ini dapat ditemukan sebagai $_SERVER['HTTP_HOST'] atau


$_SERVER['SERVER_NAME'].

User-Agent

1 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 F

Header ini dapat membawa beberapa potongan informasi seperti:

Nama dan versi browser.


Nama dan versi Sistem Operasi.
Bahasa default.

Ini adalah bagaimana situs-situs dapat mengumpulkan beberapa informasi umum tentang
pengunjung sistem mereka. Misalnya, mereka dapat mendeteksi jika pengunjung
menggunakan browser ponsel dan mengarahkan mereka ke versi mobile dari situs web
mereka yang bekerja lebih baik dengan resolusi rendah.

Dalam PHP, dapat ditemukan dengan: $_SERVER['HTTP_USER_AGENT'].

1 if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {
2   echo "Please stop using IE6!";
3 }

Accept-Language

1 Accept-Language: en-us,en;q=0.5

Header ini menampilkan pengaturan bahasa default dari pengguna. Jika sebuah situs web
memiliki versi bahasa yang berbeda, hal ini dapat mengarahkan pengunjung baru
https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 15/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

berdasarkan data ini.

Itu bisa membawa berbagai bahasa, dipisahkan dengan koma. Yang pertama adalah
bahasa pilihan, dan masing-masing bahasa terdaftar dapat membawa nilai "q", yang
merupakan perkiraan dari preferensi pengguna untuk bahasa (min. 0 max. 1).

Dalam PHP, hal ini dapat ditemukan sebagai: $_SERVER["HTTP_ACCEPT_LANGUAGE"].

1 if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {
2     header('Location: http://french.mydomain.com');
3 }

Accept-Encoding

1 Accept-Encoding: gzip,deflate

Sebagian besar browser modern mendukung gzip, dan akan mengirim ini di header. Web
server kemudian dapat mengirim output HTML dalam format terkompresi. Hal ini dapat
mengurangi ukuran hingga 80% untuk menghemat bandwidth dan waktu.

Dalam PHP, dapat ditemukan sebagai: $_SERVER["HTTP_ACCEPT_ENCODING"]. Namun,


ketika Anda menggunakan fungsi panggilan balik ob_gzhandler(), itu akan memeriksa
nilai ini secara otomatis, sehingga Anda tidak perlu melakukannya.

1 // enables output buffering


2 // and all output is compressed if the browser supports it
3 ob_start('ob_gzhandler');

If-Modified-Since
Jika sebuah dokumen web sudah di-cache di browser Anda, dan Anda mengunjunginya
lagi, browser Anda dapat memeriksa apakah dokumen tersebut telah diperbarui dengan
mengirimkan ini:
https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 16/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

1 If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT

Jika itu tidak diubah sejak tanggal tersebut, server akan mengirim kode respon "304 Not
Modified", dan tidak ada konten - dan browser akan memuat konten dari cache.

Dalam PHP, dapat ditemukan sebagai: $_SERVER['HTTP_IF_MODIFIED_SINCE'].

01 // assume $last_modify_time was the last the output was updated


02  
03 // did the browser send If-Modified-Since header?
04 if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
05  
06     // if the browser cache matches the modify time
07     if ($last_modify_time == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
08  
09         // send a 304 header, and no content
10         header("HTTP/1.1 304 Not Modified");
11         exit;
12     }
13  
14 }

Ada juga HTTP header yang bernama Etag, yang dapat digunakan untuk memastikan
cache adalah yang terbaru saat ini. Kita akan berbicara tentang hal ini segera.

Cookie
Seperti namanya, ini mengirimkan cookie yang disimpan di browser Anda untuk domain
tersebut.

1 Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar

Ini adalah pasangan nama=nilai yang dipisahkan oleh titik koma. Cookie juga dapat berisi
id sesi.

Dalam PHP, cookie individu dapat diakses dengan array $_COOKIE. Anda dapat langsung
mengakses variabel sesi menggunakan array $_SESSION, dan jika Anda membutuhkan id

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 17/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

sesi, Anda dapat menggunakan fungsi session_id() bukannya dari cookie.

1 echo $_COOKIE['foo'];
2 // output: bar
3 echo $_COOKIE['PHPSESSID'];
4 // output: r2t5uvjq435r4q7ib3vtdjq120
5 session_start();
6 echo session_id();
7 // output: r2t5uvjq435r4q7ib3vtdjq120

Referer
Seperti namanya, ini HTTP header yang berisi url perujuk.

Sebagai contoh, jika saya mengunjungi homepage Nettuts+, dan klik pada link artikel,
header ini dikirim ke browser saya:

1 Referer: https://net.tutsplus.com/

Dalam PHP, dapat ditemukan sebagai $_SERVER['HTTP_REFERER'].

01 if (isset($_SERVER['HTTP_REFERER'])) {
02  
03     $url_info = parse_url($_SERVER['HTTP_REFERER']);
04  
05     // is the surfer coming from Google?
06     if ($url_info['host'] == 'www.google.com') {
07  
08         parse_str($url_info['query'], $vars);
09  
10         echo "You searched on Google for this keyword: ". $vars['q'];
11  
12     }
13  
14 }
15 // if the referring url was:
16 // http://www.google.com/search?source=ig&hl=en&rlz=&=&q=http+headers&aq=f&oq=&aqi=g-p1
17 // the output will be:
18 // You searched on Google for this keyword: http headers

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 18/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Anda mungkin telah memperhatikan kata "referrer" salah eja sebagai "referer". Sayangnya
itu dibuat menjadi spesifikasi HTTP resmi dan terjebak seperti itu.

Authorization

Ketika halaman web meminta otorisasi, browser akan membuka jendela login. Ketika Anda
memasukkan username dan password pada jendela ini, browser mengirim permintaan
HTTP lainnya, tapi kali ini berisi header ini.

1 Authorization: Basic bXl1c2VyOm15cGFzcw==

Data di dalam header adalah di-encode base64. Misalnya,


base64_decode('bXl1c2VyOm15cGFzcw==') akan mengembalikan 'myuser:mypass'

Dalam PHP, nilai-nilai ini dapat ditemukan sebagai $_SERVER['PHP_AUTH_USER'] dan


$_SERVER['PHP_AUTH_PW'].

Lebih lanjut tentang ini ketika kita berbicara tentang header WWW-Authenticate.

Advertisement

HTTP Header di Tanggapan HTTP


https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 19/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Sekarang kita akan melihat beberapa HTTP header yang paling umum ditemukan di
tanggapan HTTP.

Di PHP, Anda dapat mengatur respon header menggunakan fungsi header(). PHP sudah
mengirimkan header tertentu secara otomatis, untuk memuat konten dan pengaturan
cookie dll... Anda dapat melihat header yang dikirimkan, atau yang akan dikirim, dengan
fungsi headers_list(). Anda dapat memeriksa apakah header sudah dikirim, dengan
fungsi headers_sent().

Cache-Control
Definisi dari w3.org: "Field header-umum Cache-Control digunakan untuk menentukan
arahan yang HARUS dipatuhi oleh semua mekanisme caching seiring rangkaian
permintaan/respon." "Mekanisme caching" ini termasuk gateway dan proxy yang mungkin
digunakan ISP Anda.

Contoh:

1 Cache-Control: max-age=3600, public

"public" berarti bahwa respon dapat di-cache oleh siapa pun. "max-age" menunjukkan
berapa detik cache berlaku untuknya. Mengijinkan situs web Anda akan di-cache dapat
mengurangi beban dan bandwidth server, dan juga meningkatkan waktu load di browser.

Caching juga dapat dicegah dengan menggunakan direktif "no-cache".

1 Cache-Control: no-cache

Untuk info lebih rinci, lihat w3.org.

Content-Type

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 20/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Header ini menunjukkan "mime-type" dari dokumen. Browser kemudian memutuskan


bagaimana untuk menafsirkan konten berdasarkan ini. Sebagai contoh, sebuah halaman
html (atau skrip PHP dengan output html) dapat mengembalikan ini:

1 Content-Type: text/html; charset=UTF-8

"text" adalah jenisnya dan "html" adalah subtipe dari dokumen. Header juga bisa
mengandung lebih banyak info seperti charset.

Untuk gambar gif, ini mungkin akan dikirim.

1 Content-Type: image/gif

Browser dapat memutuskan untuk menggunakan aplikasi eksternal atau ekstensi browser
berdasarkan pada mime-type. Misalnya ini akan menyebabkan Adobe Reader untuk dapat
dimuat:

1 Content-Type: application/pdf

Ketika me-loading langsung, Apache biasanya dapat mendeteksi mime-type dari dokumen
dan mengirim header yang sesuai. Juga sebagian besar browser memiliki beberapa
sejumlah toleransi kesalahan dan deteksi-otomatis dari mime-type, dalam kasus header
yang salah atau tidak hadir.

Anda dapat menemukan daftar umum mime type di sini.

Di PHP, Anda dapat menggunakan fungsi finfo_file() untuk mendeteksi mime type dari


file.

Content-Disposition

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 21/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Header ini menginstruksikan browser untuk membuka kotak download file, bukannya
mencoba untuk mengurai kandungannya. Contoh:

1 Content-Disposition: attachment; filename="download.zip"

Yang akan menyebabkan browser untuk melakukan hal ini:

Perhatikan bahwa header Content-Type yang sesuai juga akan dikirim bersama dengan ini:

1 Content-Type: application/zip
2 Content-Disposition: attachment; filename="download.zip"

Content-Length
Ketika konten akan dikirimkan ke browser, server dapat menunjukkan ukurannya (dalam
byte) menggunakan header ini.

1 Content-Length: 89123

Ini terutama bermanfaat untuk download file. Itulah bagaimana browser dapat
menentukan proses kemajuan dari download.

Sebagai contoh, berikut ini adalah skrip dummy yang saya tulis, yang mensimulasikan
download lambat.
https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 22/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

01 // it's a zip file


02 header('Content-Type: application/zip');
03 // 1 million bytes (about 1megabyte)
04 header('Content-Length: 1000000');
05 // load a download dialogue, and save it as download.zip
06 header('Content-Disposition: attachment; filename="download.zip"');
07  
08 // 1000 times 1000 bytes of data
09 for ($i = 0; $i < 1000; $i++) {
10     echo str_repeat(".",1000);
11  
12     // sleep to slow down the download
13     usleep(50000);
14 }

Hasilnya adalah:

Sekarang saya akan memberi komentar ke header Content-Length

01 // it's a zip file


02 header('Content-Type: application/zip');
03 // the browser won't know the size
04 // header('Content-Length: 1000000');
05 // load a download dialogue, and save it as download.zip
06 header('Content-Disposition: attachment; filename="download.zip"');
07  
08 // 1000 times 1000 bytes of data
09 for ($i = 0; $i < 1000; $i++) {
10     echo str_repeat(".",1000);
11  
12     // sleep to slow down the download
13     usleep(50000);
14 }

Sekarang hasilnya adalah:

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 23/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Browser hanya dapat memberitahu Anda berapa banyak byte yang telah di-download,
tetapi tidak tahu jumlah totalnya. Dan progress bar tidak menunjukkan proses kemajuan.

Etag
Ini adalah header yang digunakan untuk tujuan caching. Terlihat seperti ini:

1 Etag: "pub1259380237;gz"

Web server dapat mengirim header ini dengan setiap dokumen yang dilayaninya. Nilainya
dapat didasarkan pada tanggal modifikasi terakhir, ukuran file, atau bahkan nilai checksum
dari file. Browser kemudian menyimpan nilai ini sebagai cache dokumen. Lain waktu saat
browser meminta file yang sama, ia akan mengirimkan ini dalam permintaan HTTP:

1 If-None-Match: "pub1259380237;gz"

Jika Etag nilai dokumen cocok dengannya, server akan mengirim kode 304 bukannya 200,
dan tidak ada konten. Browser akan memuat konten dari cache.

Last-Modified

Seperti namanya, header ini menunjukkan tanggal modifikasi terakhir dari dokumen, di
format GMT:

1 Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 24/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

1 $modify_time = filemtime($file);
2  
3 header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modify_time) . " GMT");

Ini menawarkan cara lain pada browser untuk cache dokumen. Browser dapat mengirim ini
dalam permintaan HTTP:

1 If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT

Kita sudah berbicara tentang ini sebelumnya di bagian "If-Modified-Since".

Location
Header ini digunakan untuk pengalihan. Jika kode respon 301 atau 302, server juga harus
mengirim header ini. Misalnya, ketika Anda pergi ke http://www.nettuts.com browser
Anda akan menerima ini:

1 HTTP/1.x 301 Moved Permanently


2 ...
3 Location: https://net.tutsplus.com/
4 ...

Di PHP, Anda dapat mengarahkan pengunjung seperti:

1 header('Location: https://net.tutsplus.com/');

Secara default, yang akan mengirimkan kode respon 302. Jika Anda ingin mengirim 301:

1 header('Location: https://net.tutsplus.com/', true, 301);

Set-Cookie

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 25/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Ketika sebuah situs web yang ingin ditetapkan atau memperbarui cookie di browser Anda,
itu akan menggunakan header ini.

1 Set-Cookie: skin=noskin; path=/; domain=.amazon.com; expires=Sun, 29-Nov-2009 21:42:28 G


2 Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; expires=Sat Feb

Setiap cookie yang dikirim sebagai header yang terpisah. Perhatikan bahwa cookie yang
ditetapkan melalui JavaScript tidak pergi melalui HTTP header.

Di PHP, Anda dapat mengatur cookie menggunakan fungsi setcookie(), dan PHP akan
mengirimkan HTTP header yang sesuai.

1 setcookie("TestCookie", "foobar");

Yang menyebabkan header ini dikirim:

1 Set-Cookie: TestCookie=foobar

Jika tanggal kadaluarsa tidak ditentukan, cookie akan dihapus ketika jendela browser
ditutup.

WWW-Authenticate

Sebuah situs web dapat mengirimkan header ini untuk otentikasi pengguna melalui HTTP.
Ketika browser melihat header ini, ia akan membuka jendela dialog login.

1 WWW-Authenticate: Basic realm="Restricted Area"

Yang terlihat seperti ini:

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 26/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Ada bagian di manual PHP, yang memiliki sampel kode tentang cara untuk melakukan ini
di PHP.

1 if (!isset($_SERVER['PHP_AUTH_USER'])) {
2     header('WWW-Authenticate: Basic realm="My Realm"');
3     header('HTTP/1.0 401 Unauthorized');
4     echo 'Text to send if user hits Cancel button';
5     exit;
6 } else {
7     echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
8     echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
9 }

Content-Encoding
Header ini biasanya ditetapkan ketika konten yang dikembalikan adalah dikompresi.

1 Content-Encoding: gzip

Dalam PHP, jika Anda menggunakan fungsi panggilan balik ob_gzhandler(), maka akan
diatur secara otomatis untuk Anda.

Kesimpulan
Terima kasih telah membaca. Saya harap artikel ini adalah titik awal yang baik untuk
belajar tentang Header HTTP. Silakan meninggalkan komentar dan pertanyaan di bawah,

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 27/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

dan saya akan mencoba untuk menjawab sebanyak yang saya bisa.

Advertisement

Web Development HTTP Web Servers

Did you find this post useful?


Yes 
No

Want a weekly email summary?

Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out
on learning about the next big thing.

Sign up

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 28/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

Burak Guzel

Burak Guzel is a full time PHP Web Developer living in Arizona, originally from
Istanbul, Turkey. He has a bachelors degree in Computer Science and Engineering
from The Ohio State University. He has over 8 years of experience with PHP and
MySQL.

QUICK LINKS - Explore popular categories

ENVATO TUTS+ 

JOIN OUR COMMUNITY 

HELP 

30,489 1,316 50,290


Tutorials Courses Translations

Envato Envato Elements Envato Market Placeit by Envato Milkshake All products Careers Sitemap

© 2022 Envato Pty Ltd. Trademarks and brands are the property of their respective owners.

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 29/30
8/18/22, 4:19 PM HTTP Header untuk Dummies

https://code.tutsplus.com/id/tutorials/http-headers-for-dummies--net-8039 30/30

Anda mungkin juga menyukai