Friday, 11 September 2015

Partial Content 206


Partial Content 206


perkenalkan ane newbie di dunia proxy squid dan sekedar berbagi tips kecil, salam utk mastah2 disini :
tujuan : agar terjadi HIT utk file partial TCP/206 :
acl partial206 url_regex .*gemscool.*
range_offset_limit -1 partial206
refresh_pattern -i .*gemscool.* 1440 90% 43200
contoh diatas adalah agar update game dr web gemscool saja, baik file single (TCP 200) atau partial (TCP 206) dapat tercache atau HIT.
update game yg menggunakan file partial menurut om pc mikrotik adalah Tales Hero
‪#‎under‬ tested on squid versi 3.4.7
gunakan range_offset_limit dengan bijak krn kelemahannya adalah dapat mengkonsumsi bandwidth berlebihan.
gambar ss hanya percobaan saja, mengemulasi download partial yaitu dengan IDM yg cara kerjanya membagi beberapa file, jika pada log quid statusnya sama yaitu TCP 206

 perkenalkan ane newbie di dunia proxy squid dan sekedar berbagi tips kecil, salam utk mastah2 disini : tujuan : agar terjadi HIT utk file partial TCP/206 : acl partial206 url_regex .*gemscool.* range_offset_limit -1 partial206 refresh_pattern -i .*gemscool.* 1440 90% 43200 contoh diatas adalah agar update game dr web gemscool saja, baik file single (TCP 200) atau partial (TCP 206) dapat tercache atau HIT. update game yg menggunakan file partial menurut om pc mikrotik adalah Tales Hero #under tested on squid versi 3.4.7 gunakan range_offset_limit dengan bijak krn kelemahannya adalah dapat mengkonsumsi bandwidth berlebihan. gambar ss hanya percobaan saja, mengemulasi download partial yaitu dengan IDM yg cara kerjanya membagi beberapa file, jika pada log quid statusnya sama yaitu TCP 206
Add caption

Wednesday, 2 September 2015

Mudahnya membuat regex untuk helper storeurl atau storeid di SQUID Web PROXY untuk PEMULA

Mudahnya membuat regex untuk helper storeurl atau storeid di SQUID Web PROXY untuk PEMULA

Ada kabar gembira…
Apa tuh..?
Semua orang bisa buat regex storeurl/storeid..MUDAH bangetss !! :-D

CMIIW (Cuma Mau Ingetin Indahnya Woles) hehehe

apa fungsi helper storeurl atau storeid?
fungsi storeurl atau storeid adalah untuk menulis ulang “URL-URL dinamis” ke alamat “URL statis” supaya bisa di-“HIT” oleh SQUID
ini versi saya lho penjelasannya, boleh beda dengan versi kawan2. Lha wong Quick Count Capres aja boleh beda koq :-D
Apakah URL dinamis tidak bisa di-“HIT” oleh SQUID?
mari kita lihat contoh dibawah ini
saya coba download MP3 surat yasin dari 4shared di alamat http://www.4shared.com/mp3/WWBGUKwf/036_Surat_Yasin_.htm
ternyata untuk konten mp3 surat yasin yang kita download diarahkan ke mesin-mesin CDN dengan alamat URL yang dinamis
http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-220825-db6d3b73&lgfp=2000
http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-222355-d60ed0a8&lgfp=2000
http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-230027-59959c01&lgfp=2000
URL diatas itu URL “dinamis” dengan konten yg “sama”
TAPI SQUID akan menganggap kedua konten diatas adalah berbeda, sehingga akan selalu “MISS” , padahal sudah didownload berulang-ulang
cek access.log
1405030243.320 110241 192.168.0.251 TCP_MISS/200 12753873 GET http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-220825-db6d3b73&lgfp=2000 – ORIGINAL_DST/199.101.133.64 audio/mpeg
1405031073.012  14070 192.168.0.251 TCP_MISS/200 12753873 GET http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-222355-d60ed0a8&lgfp=2000 – ORIGINAL_DST/78.140.186.28 audio/mpeg
1405033362.093 114522 192.168.0.251 TCP_MISS/200 12753873 GET http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-230027-59959c01&lgfp=2000 – ORIGINAL_DST/199.101.133.64 audio/mpeg
Bagaimana supaya bisa ter-“HIT” ?
Nah, seperti udh disebutkan diatas, disini kita butuh helper storeurl/storeid
helper ini akan mencocokkan pola URL-URL dinamis diatas dengan “regex” dan menulis ulang/mengganti URL diatas ke “URL statis”
Apa itu Regex?
Regular Expression atau regex adalah pattern/pola yg digunakan untuk mencocokkan teks
Alat bantu
Saya sih msh bodoh buat regex beginian jadi mesti pake alat bantu :-D. Alat bantu saya ketika membuat regex adalah website rubular.com. ntar kalo sudah terbiasa, ga perlu alat bantu lagi.
Analisa log
OK, lanjut kita buat regex dari URL-URL diatas. Kalo saya biasanya ambil beberapa URL dari access.log untuk dianalisa pola URL nya
Link 1 : http://www.4shared.com/mp3/WWBGUKwf/036_Surat_Yasin_.htm
http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-220825-db6d3b73&lgfp=2000
http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-222355-d60ed0a8&lgfp=2000
http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-230027-59959c01&lgfp=2000
Pertama adalah, kita cari dulu bagian dari ketiga URL diatas yang “dinamis” atau yang berubah-ubah. yang saya cetak tebal adalah bagian2 dari URL yang dinamis
1. dc436,dc474
2. tsid=20140710-220825-db6d3b73&lgfp=2000 , 20140710-222355-d60ed0a8&lgfp=2000 , 20140710-230027-59959c01&lgfp=2000 
lanjut, kita buka website rubular.com
1. masukin ketiga URL diatas pada kolom “Your test string”
http://s18.postimg.org/c0w12cfyh/1_rubular.png
2. copy 1 URL dari kolom “Your test string” , lalu paste di kolom “Your Regular Expression”
http://s11.postimg.org/j4pt7dvf7/2_rubular.png
3. Ok. Sekarang liat ada pesan error “Forward slashes must be escaped”. tambahkan karakter “\” sebelum karakter “/” pada semua bagian URL di kolom “Your Regular Expression”
http://s24.postimg.org/wlmof3945/3_rubular.png
4. sekarang muncul pesan “No Matches” artinya regex yang kita buat belum cocok. Tenang saudara-saudara. Mari kita utak atik :-D. hapus “dc436.” ganti menjadi “.*
http://s1.postimg.org/6tkh3w9zj/4_rubular.png
5. masih muncul pesan “No Matches” artinya regex yang kita buat belum cocok. Sabar-sabar :-D . sekarang hapus “?tsid=20140710-220825-db6d3b73&lgfp=2000” ganti menjadi “.*
http://s23.postimg.org/5j8apcy9n/5_rubular.png
6. Asyeek asyeek..udh muncul di kolom “Match result” berarti regex yang kita buat sudah benar. Mudah pake banget ya ? :-D
pertanyaan berikutnya adalah apa sih arti dari “.*” ?
saya ambil arti karakter . dan * dari website rubular jg sebagai referensi pada bagian regex quick reference
. = Any single character ( 1 karakter apa saja) misal d c 1 2 3 & * + – (termasuk spasi)
http://s14.postimg.org/ryrk56yox/6_rubular.png
* = Zero or more (nol atau lebih). tanda bintang diletakkan setelah sebuah karakter, yang artinya karakter tersebut dapat ada nol atau lebih perulangan yang diharapkan dalam pola.
jadi .* artinya nol atau lebih pengulangan karakter apa aja boleh
Kalau sudah cocok, maka regex yang sudah kita buat tadi yaitu ^http:\/\/.*4shared\.com\/(download\/WWBGUKwf\/036_Surat_Yasin_.mp3).* tinggal kita masukkan ke script helper storeurl atau storeid
Membuat helper storeid (SQUID3X)
pico /etc/squid/pembantuku.pl
copy paste script dibawah ini
#!/usr/bin/perl
$|=1;
while (<>) {
@X = split;
$x = $X[0] . ” “;
if ($X[1]=~m/^http:\/\/.*4shared.com\/(download\/WWBGUKwf\/036_Surat_Yasin_.mp3).*/) {
print $x . “OK store-id=http://download.di4shared.squidlover.internal/$1\n”;
} else {
print $x . “OK store-id=$X[1]\n”;
}
}
simpan file
jalankan command chmod +x /etc/squid/pembantuku.pl
backup script jg bisa diliat di >> http://pastebin.com/4VNnVahb
buka file squid.conf, masukkan config dibawah ini :
#buat ACL dengan url_regex untuk 4shared
acl 4shared url_regex -i ^http:\/\/.*4shared.com\/(download\/WWBGUKwf\/036_Surat_Yasin_.mp3).*
store_id_program /etc/squid/pembantuku.pl
store_id_children 1 startup=1 idle=1 concurrency=10000
store_id_access allow 4shared
store_id_access deny all
Simpan squid.conf
jalankan command squid -k reconfigure lalu service squid restart
test dah buka http://www.4shared.com/mp3/WWBGUKwf/036_Surat_Yasin_.htm  
Hasilnya
access.log
Anda bisa liat dibawah ini dari domain dc474.4shared.com atau dc436.4shared.com bisa HIT
1405086972.677   2133 192.168.6.5 TCP_HIT/200 12753688 GET http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140711-065534-7242007a&lgfp=2000 – HIE
R_NONE/- audio/mpeg
1405087089.933   1875 192.168.6.5 TCP_HIT/200 12753688 GET http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140711-065739-9d6cb268&lgfp=2000 – HIE
R_NONE/- audio/mpeg
cache.log dengan debug options 84,9
dibawah ini terlihat proses rewriting URL dinamis ke URL statis yang kita buat di helper storeid
2014/07/11 13:56:10.544 kid1| helper.cc(415) helperSubmit:  buf[153]=http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140711-065534-7242007a&lgfp=2000 192.168.6.5/- – GET myip=78.140.186.28 myport=80
2014/07/11 13:56:10.544 kid1| helper.cc(906) helperHandleRead: helperHandleRead: 99 bytes from store_id #Hlpr0
2014/07/11 13:56:10.544 kid1| helper.cc(915) helperHandleRead:  accumulated[99]=0 OK store-id=http://download.di4shared.squidlover.internal/download/WWBGUKwf/036_Surat_Yasin_.mp3
2014/07/11 13:58:08.140 kid1| helper.cc(415) helperSubmit:  buf[154]=http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140711-065739-9d6cb268&lgfp=2000 192.168.6.5/- – GET myip=199.101.133.64 myport=80
2014/07/11 13:58:08.140 kid1| helper.cc(906) helperHandleRead: helperHandleRead: 99 bytes from store_id #Hlpr0
2014/07/11 13:58:08.140 kid1| helper.cc(915) helperHandleRead:  accumulated[99]=0 OK store-id=http://download.di4shared.squidlover.internal/download/WWBGUKwf/036_Surat_Yasin_.mp3
Apakah problem download dari 4shared selesai?
Tentu saja belum, saat ini mungkinAnda senang karena download dari link http://www.4shared.com/mp3/WWBGUKwf/036_Surat_Yasin_.htmsudah bisa “HIT”, bagaimana jika Anda coba download dari 4shared link yanglain misalnya http://www.4shared.com/mp3/9yI4I09b/Al-Quran_Surah_Ar_rahman-_Ahma.htm
Opsss….MISSlagi. Anda tau kenapa MISSlagi? Ya..karena kita hanya buat regex khusus link ini http://www.4shared.com/mp3/WWBGUKwf/036_Surat_Yasin_.htm  saja. OK, berarti kita harus modifikasilagi regex yang sudah kita buat supaya semua download dari 4shared bisater-“HIT”.
Bagaimanacaranya?
Kita harus kumpulkan log (ambildari file access.log) dari download di 4shared sebanyak-banyaknya sehingganantinya mempermudah kita membuat regex-nya.
Berikut dibawah ini adalah log URL dinamis dari download di 4shared :
http://dc313.4shared.com/download/wZqn2XnC/Padi_-_Kasih_Tak_Sampai.mp3?tsid=20140712-020244-61c996d&lgfp=2000
http://dc100.4shared.com/download/wZqn2XnC/Padi_-_Kasih_Tak_Sampai.mp3?tsid=20140712-021130-345586b3&lgfp=2000
http://dc480.4shared.com/download/9yI4I09b/Al-Quran_Surah_Ar_rahman-_Ahma.mp3?tsid=20140710-232225-d77b2969&lgfp=2000
http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-220825-db6d3b73&lgfp=2000
http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-222355-d60ed0a8&lgfp=2000
Sekarang coba buka kembali website rubular.com
1. Copy semua URL diatas ke kolom “Your test string”
http://s27.postimg.org/mr2vp1hc3/7_rubular.png

2. Masukkan regex yang sudah kita buat sebelumnya kekolom “Your regular expression”
http://s11.postimg.org/bzjxili9v/8_rubular.png
Anda bisa lihat bahwa hanya download dari link surat yasin yang baru“match”
3. Coba lihat pada URL dinamis diatas, path dan nama file yangberubah-ubah pada setiap link download di 4shared adalah setelah download/.coba perhatikan yang saya cetak tebal:
http://dc313.4shared.com/download/wZqn2XnC/Padi_-_Kasih_Tak_Sampai.mp3?tsid=20140712-020244-61c996d&lgfp=2000
http://dc100.4shared.com/download/wZqn2XnC/Padi_-_Kasih_Tak_Sampai.mp3?tsid=20140712-021130-345586b3&lgfp=2000
http://dc480.4shared.com/download/9yI4I09b/Al-Quran_Surah_Ar_rahman-_Ahma.mp3?tsid=20140710-232225-d77b2969&lgfp=2000
http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-220825-db6d3b73&lgfp=2000
http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-222355-d60ed0a8&lgfp=2000
4. Nah, bagian ini yang akan kita buat regexnya. Masih sama dengansebelumnya kita gunakan saja regex .* untuk menggantikan path dan namafile yang berubah-ubah tadi. Mudah kan ? :-D
5. Hapus WWBGUKwf\/036_Surat_Yasin_.mp3
http://s2.postimg.org/zdu7jqcx5/9_rubular.png
6. Ganti dengan .*
Taaaraaaaa…sukses :-D . Semua URL dinamis sudah match
http://s28.postimg.org/bpgmsqne5/10_rubular.png
Tugas berikutnya adalah mengganti config pada squid.conf dan merubahscript pada file pembantuku.pl
Filepembantuku.pl UPDATE!
#!/usr/bin/perl
$|=1;
while (<>) {
@X = split;
$x = $X[0] . ” “;
if ($X[1]=~m/^http:\/\/.*4shared.com\/(download\/.*).*/) {
print $x . “OKstore-id=http://download.di4shared.squidlover.internal/$1\n”;
} else {
print $x . “OKstore-id=$X[1]\n”;
}
}
Filesquid.conf UPDATE!
#buat ACL dengan url_regex untuk4shared (ambil dari regex 4shared diatas)
acl4shared url_regex -i ^http:\/\/.*4shared.com\/(download\/.*).*
Jalankancommand squid -k reconfigure dan service squid restart
Sekarang test download dari link apapundi 4shared. Aktifkan debug options 84,9 dan cek cache.log , pastikan semua URL dinamis dari 4shared sudah di tulisulang ke URL statis http://download.di4shared.squidlover.internal/path/namafile
Sepertidibawah ini :
http://download.di4shared.squidlover.internal/download/wZqn2XnC/Padi_-_Kasih_Tak_Sampai.mp3
http://download.di4shared.squidlover.internal/download/9yI4I09b/Al-Quran_Surah_Ar_rahman-_Ahma.mp3
http://download.di4shared.squidlover.internal/download/WWBGUKwf/036_Surat_Yasin_.mp3
UPDATE
Website lain sejenis rubular.com adalah regexr.com. Di websiteregexr.com, Anda juga bisa menampilkan langsung replacement/substitution ataualamat URL statis yang akan kita masukkan di helper storeurl atau storied.
http://s2.postimg.org/dk5cbf7jd/regexr.png
INFO :
Sedekah untuk GAZABCA 603 030 8059an. Yysn Daarul Qur’an Nusantara. Info: 021 500311
atau MER-C http://www.mer-c.org/index.php/id/
Bank Central Asia (BCA)

Rek. No. 686.033.5555 (Kemanusiaan Palestina)
Rek. No. 686.0153678 (Alkes RS Indonesia – Palestina)
Bank Mandiri
Rek. No. 124.000.8111925 (Alkes RS Indonesia – Palestina)
Rek. No. 124.000.3753754 (Kemanusiaan Palestina)Bank Syariah Mandiri (BSM)
Rek. No. 700.1352.061 (Alkes RS Indonesia – Palestina)
Bank Negara Indonesia Syariah (BNI Syariah)
Rek. No. 081.119.2973 (Alkes RS Indonesia – Palestina)
Bank Muamalat Indonesia (BMI)
Rek. No. 301.00521.15 (Alkes RS Indonesia – Palestina)
Bank Rakyat Indonesia (BRI)
Rek. No. 033.501.0007.60308 (Alkes RS Indonesia – Palestina)


Wednesday, 26 August 2015


Mencoba memahami Cache-Control: public , max-age pada response header

Mencoba memahami Cache-Control: public , max-age pada response header

jalankan command dibawah ini pada mesin Proxy :
curl -I http://192.168.7.2/squid.txt
Response Header
HTTP/1.1 200 OK
Cache-Control: max-age=300, public
Content-Type: text/plain
Accept-Ranges: bytes
ETag: “3497351881”
Last-Modified: Thu, 05 Sep 2013 08:10:44 GMT
Content-Length: 1354
Date: Mon, 16 Jun 2014 01:33:49 GMT
Server: WEB-SERVER-KU-SENDIRI
diskusi kali ini tentang Cache-Control: max-age=300, public (CMIIW)
public
response cache-control “public” meng-informasikan bahwa objek squid.txt ini boleh disimpan didalam cache
max-age
response cache-control “max-age=300” meng-informasikan bahwa umur objek squid.txt didalam “cache” tdk boleh lebih dari angka 300 detik atau 5 menit atau dengan kata lain objek ini dianggap FRESH jika kurang dari 300 detik didalam “cache”
max-age ini di set oleh Web Developer untuk mengontrol “Freshness/kesegaran” dari objek tadi, Supaya user tidak menerima konten yang basi/stale dari “cache”. Setelah umur objek didalam “cache” melewati max-age, “cache” akan melakukan pengecekan ke Web Server asal (validasi), apakah objek sudah berubah atau belum.
Sekarang kita lihat bagaimana SQUID bekerja, jika response max-age sudah lebih dari 300 detik
1. SQUID mendengar ada permintaan file squid.txt
———-
2014/06/16 08:39:13.453 kid1| client_side.cc(2407) parseHttpRequest: HTTP Client local=192.168.7.2:80 remote=192.168.6.2:1080 FD 24 flags=33
2014/06/16 08:39:13.453 kid1| client_side.cc(2408) parseHttpRequest: HTTP Client REQUEST:
———
GET /squid.txt HTTP/1.1
Host: 192.168.7.2
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
2. Karena file squid.txt , sudah ada didalam “cache” maka dicek Freshness nya dengan directive refresh_pattern di file squid.conf
———-
2014/06/16 08:39:13.453 kid1| refresh.cc(247) refreshCheck: refreshCheck: ‘http://192.168.7.2/squid.txt
2014/06/16 08:39:13.453 kid1| refresh.cc(262) refreshCheck: refreshCheck: Matched ‘. 0 0%% 259200’
2014/06/16 08:39:13.453 kid1| refresh.cc(264) refreshCheck: age: 324
2014/06/16 08:39:13.454 kid1| refresh.cc(266) refreshCheck: check_time: Mon, 16 Jun 2014 01:39:13 GMT
2014/06/16 08:39:13.454 kid1| refresh.cc(268) refreshCheck: entry->timestamp: Mon, 16 Jun 2014 01:33:49 GMT
2014/06/16 08:39:13.454 kid1| refresh.cc(176) refreshStaleness: STALE: expires 1402882729 < check_time 1402882753
2014/06/16 08:39:13.454 kid1| refresh.cc(288) refreshCheck: Staleness = 24
2014/06/16 08:39:13.458 kid1| refresh.cc(540) getMaxAge: getMaxAge: ‘http://192.168.7.2/squid.txt
2014/06/16 08:39:13.459 kid1| http.cc(2219) sendRequest: HTTP Server local=192.168.5.2:52722 remote=192.168.7.2:80 FD 25 flags=1
2014/06/16 08:39:13.459 kid1| http.cc(2220) sendRequest: HTTP Server REQUEST:
———
ternyata umur objek didalam “cache” sdh lebih dari 300 detik
age: 324
squid.txt ini dianggap stale/basi, harus dicek ulang ke Web Server asalnya 192.168.7.2
3. SQUID bilang ke Om Web Server
“Om Web Server minta file squid.txt  yang tanggal modifikasinya Thu, 05 Sep 2013 08:10:44 GMT atau Etag nya bukan “3497351881”
GET /squid.txt HTTP/1.1
If-Modified-Since: Thu, 05 Sep 2013 08:10:44 GMT
If-None-Match: “3497351881”
Host: 192.168.7.2
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
X-Forwarded-For: 192.168.6.2
Cache-Control: max-age=259200
Connection: keep-alive
4. diresponse sama om Web Server
“Om SQUID, squid.txt belum ada perubahan (304 Not Modified), tanggal modifikasi terakhir masih Thu, 05 Sep 2013 08:10:44 GMT dan Etagnya jg msh sama “3497351881”
———-
2014/06/16 08:39:13.465 kid1| ctx: enter level  0: ‘http://192.168.7.2/squid.txt
2014/06/16 08:39:13.465 kid1| http.cc(749) processReplyHeader: HTTP Server local=192.168.5.2:52722 remote=192.168.7.2:80 FD 25 flags=1
2014/06/16 08:39:13.465 kid1| http.cc(750) processReplyHeader: HTTP Server REPLY:
———
HTTP/1.1 304 Not Modified
Cache-Control: max-age=300, public
Vary: Accept-Encoding
Content-Type: text/plain
Last-Modified: Thu, 05 Sep 2013 08:10:44 GMT
ETag: “3497351881”
Date: Mon, 16 Jun 2014 01:39:13 GMT
Server: WEB-SERVER-KU-SENDIRI
5. OK, kalo gitu gue kasi yg ada di “cache” aja karena masih sama
———-
2014/06/16 08:39:13.465 kid1| ctx: exit level  0
2014/06/16 08:39:13.465 kid1| ctx: enter level  0: ‘http://192.168.7.2/squid.txt
2014/06/16 08:39:13.465 kid1| http.cc(568) cacheableReply: NO because HTTP status 304
2014/06/16 08:39:13.466 kid1| ctx: exit level  0
2014/06/16 08:39:13.466 kid1| client_side.cc(1459) sendStartOfMessage: HTTP Client local=192.168.7.2:80 remote=192.168.6.2:1080 FD 24 flags=33
2014/06/16 08:39:13.466 kid1| client_side.cc(1460) sendStartOfMessage: HTTP Client REPLY:
———
HTTP/1.1 200 OK
Content-Encoding: gzip
Last-Modified: Thu, 05 Sep 2013 08:10:44 GMT
Content-Type: text/plain
Accept-Ranges: bytes
Content-Length: 1354
Cache-Control: max-age=300, public
Vary: Accept-Encoding
ETag: “3497351881”
Date: Mon, 16 Jun 2014 01:39:13 GMT
Server: WEB-SERVER-KU-SENDIRI
Age: 0
X-Cache: HIT from SQUIDLOVERS
Connection: keep-alive
di access.log , akan terlihat :
1402882753.468     15 192.168.6.2 TCP_REFRESH_UNMODIFIED/200 1717 GET http://192.168.7.2/squid.txt – ORIGINAL_DST/192.168.7.2 text/plain
file squid.txt masih diambil dari “cache” tapi dengan memvalidasi dulu ke Web Server asal makanya muncul TCP_REFRESH_UNMODIFIED/200 dan X-Cache: HIT from SQUIDLOVERS
Bagaimana response yang diterima jika ternyata file squid.txt sudah ada perubahan ?
1. SQUID mendengar ada permintaan file squid.txt
2014/06/16 14:55:51.722 kid1| client_side.cc(2407) parseHttpRequest: HTTP Client local=192.168.7.2:80 remote=192.168.6.2:1184 FD 22 flags=33
2014/06/16 14:55:51.722 kid1| client_side.cc(2408) parseHttpRequest: HTTP Client REQUEST:
———
GET /squid.txt HTTP/1.1
Host: 192.168.7.2
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
2. Karena file squid.txt , sudah ada didalam “cache” maka dicek Freshness nya dengan directive refresh_pattern di file squid.conf
———-
2014/06/16 14:55:51.723 kid1| refresh.cc(247) refreshCheck: refreshCheck: ‘http://192.168.7.2/squid.txt
2014/06/16 14:55:51.723 kid1| refresh.cc(262) refreshCheck: refreshCheck: Matched ‘. 0 0%% 604800
2014/06/16 14:55:51.723 kid1| refresh.cc(264) refreshCheck:     age:    5712
2014/06/16 14:55:51.723 kid1| refresh.cc(266) refreshCheck:     check_time:    Mon, 16 Jun 2014 07:55:51 GMT
2014/06/16 14:55:51.723 kid1| refresh.cc(268) refreshCheck:     entry->timestamp:    Mon, 16 Jun 2014 06:20:39 GMT
2014/06/16 14:55:51.723 kid1| refresh.cc(176) refreshStaleness: STALE: expires 1402899939 < check_time 1402905351
2014/06/16 14:55:51.723 kid1| refresh.cc(288) refreshCheck: Staleness = 5412
2014/06/16 14:55:51.724 kid1| refresh.cc(540) getMaxAge: getMaxAge: ‘http://192.168.7.2/squid.txt
2014/06/16 14:55:51.724 kid1| http.cc(2219) sendRequest: HTTP Server local=192.168.5.2:52789 remote=192.168.7.2:80 FD 23 flags=1
2014/06/16 14:55:51.724 kid1| http.cc(2220) sendRequest: HTTP Server REQUEST:
———
ternyata umur objek didalam “cache” sdh lebih dari 300 detik
age:    5712
3. SQUID bilang ke Om Web Server
“Om Web Server minta file squid.txt  yang tanggal modifikasinya Thu, 05 Sep 2013 08:10:44 GMT atau Etag nya bukan “3497351881”
GET /squid.txt HTTP/1.1
If-Modified-Since: Thu, 05 Sep 2013 08:10:44 GMT
If-None-Match: “3497351881”
Host: 192.168.7.2
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
X-Forwarded-For: 192.168.6.2
Cache-Control: max-age=604800
Connection: keep-alive
4. diresponse sama om Web Server
“Om SQUID, file squid.txt sudah ada perubahan , tanggal modifikasi terakhir Mon, 16 Jun 2014 07:52:29 GMT dan Etag baru 3148978175″
———-
2014/06/16 14:55:51.747 kid1| ctx: enter level  0: ‘http://192.168.7.2/squid.txt
2014/06/16 14:55:51.747 kid1| http.cc(749) processReplyHeader: HTTP Server local=192.168.5.2:52789 remote=192.168.7.2:80 FD 23 flags=1
2014/06/16 14:55:51.747 kid1| http.cc(750) processReplyHeader: HTTP Server REPLY:
———
HTTP/1.1 200 OK
Cache-Control: max-age=300, public
Vary: Accept-Encoding
Content-Encoding: gzip
Last-Modified: Mon, 16 Jun 2014 07:52:29 GMT
ETag: “3148978175”
Content-Type: text/plain
Accept-Ranges: bytes
Content-Length: 1388
Date: Mon, 16 Jun 2014 07:55:52 GMT
Server: WEB-SERVER-KU-SENDIRI
5. OK, Om Web Server. Response baru saya simpan kedalam cache
2014/06/16 14:55:51.747 kid1| ctx: exit level  0
2014/06/16 14:55:51.747 kid1| ctx: enter level  0: ‘http://192.168.7.2/squid.txt
2014/06/16 14:55:51.747 kid1| refresh.cc(247) refreshCheck: refreshCheck: ‘http://192.168.7.2/squid.txt
2014/06/16 14:55:51.747 kid1| refresh.cc(262) refreshCheck: refreshCheck: Matched ‘. 0 0%% 604800’
2014/06/16 14:55:51.747 kid1| refresh.cc(264) refreshCheck:     age:    60
2014/06/16 14:55:51.747 kid1| refresh.cc(266) refreshCheck:     check_time:    Mon, 16 Jun 2014 07:56:51 GMT
2014/06/16 14:55:51.747 kid1| refresh.cc(268) refreshCheck:     entry->timestamp:    Mon, 16 Jun 2014 07:55:51 GMT
2014/06/16 14:55:51.747 kid1| refresh.cc(171) refreshStaleness: FRESH: expires 1402905651 >= check_time 1402905411
2014/06/16 14:55:51.747 kid1| refresh.cc(288) refreshCheck: Staleness = -1
2014/06/16 14:55:51.747 kid1| refresh.cc(373) refreshCheck: refreshCheck: object isn’t stale..
2014/06/16 14:55:51.747 kid1| refresh.cc(375) refreshCheck: refreshCheck: returning FRESH_EXPIRES
2014/06/16 14:55:51.747 kid1| http.cc(482) cacheableReply: YES because HTTP status 200
2014/06/16 14:55:51.748 kid1| ctx: exit level  0
5. File squid.txt yang baru dikasi ke klien
2014/06/16 14:55:51.748 kid1| client_side.cc(1459) sendStartOfMessage: HTTP Client local=192.168.7.2:80 remote=192.168.6.2:1184 FD 22 flags=33
2014/06/16 14:55:51.748 kid1| client_side.cc(1460) sendStartOfMessage: HTTP Client REPLY:
———
HTTP/1.1 200 OK
Cache-Control: max-age=300, public
Vary: Accept-Encoding
Content-Encoding: gzip
Last-Modified: Mon, 16 Jun 2014 07:52:29 GMT
ETag: “3148978175”
Content-Type: text/plain
Accept-Ranges: bytes
Content-Length: 1388
Date: Mon, 16 Jun 2014 07:55:52 GMT
Server: WEB-SERVER-KU-SENDIRI
X-Cache: MISS from SQUIDLOVERS
Connection: keep-alive
setelah di validasi ke Web Server asal ternyata file squid.txt sudah mengalami perubahan, maka
di access.log terlihat :
1402905351.749     26 192.168.6.2 TCP_REFRESH_MODIFIED/200 1744 GET http://192.168.7.2/squid.txt – ORIGINAL_DST/192.168.7.2 text/plain
di store.log terlihat
1402905351.748 SWAPOUT 00 0000119F 3C0D8CC25DB1A1A59C926301BA3B6319  200 1402905352 1402905149 1402905652 text/plain 1388/1388 GET http://192.168.7.2/squid.txt
SWAPOUT berarti file squid.txt yang baru disimpan ke dalam cache.
lalu bagaimana memaksa agar objek tersebut bisa lebih dari max-age -nya tp dianggap FRESH ?
mainkan refresh_pattern dengan opsi override-expire
opsi override-expire akan memaksa menggunakan angka min yang kita buat pada refresh_pattern di squid.conf meskipun Web Server memberikan cache-control max-age atau expire header
Format penulisan refresh_pattern
refresh_pattern [-i] regex              min percent max [options]
contoh :
refresh_pattern -i ^http://192.168.7.2/ 3600 10% 1 override-expire
jadi yg perlu di set adalah nilai min saja, nilai max terserah :-D, selamat menikmati HIT WARNING : 
Doing this VIOLATES the HTTP standard.  Enabling this feature could make you liable for problems which it causes.