Inject CORS Header menggunakan Extension pada Handycache

irfan-photo irfan · 2 bulan lalu

kita lanjut dari tutorial sebelumnya, yaitu memperbaiki CORS yang error menggunakan extension

jadi nantinya setiap proses don't update akan selalu menyertakan header CORS ini dengan begitu cache bisa dipakai saat diakses

Persiapan

  • Pastikan kalian punya text editor untuk mengedit kode
  • Buka text editor kalian dan kemudian buat file dengan format lua dan beri nama "YoutubeVideoCors.lua"
  • Simpan file tersebut didalam folder Extensions handycache, tujuannya agar file mudah dicari saat ditambahkan

Setelah semua persiapan selesai langsung saja kita menulis kodenya dimulai dari menuliskan tag HCExtension beserta atribut dan nilainya, silahkan masukan kode ini ditext editor

--[[<HCExtension>	
@name 			Youtube Video Cors Inject 
@author 		Belajar
@version 		v1.0
@min_HC_version		1.0.0.885
@description 		Inject CORS for Youtube Video
@rule 			^.*\.googlevideo\.com\/videoplayback\?.*&itag=.*&lmt=.*&range=.*
@exception		live=1&
@event 			RequestHeaderReceived
</HCExtension>]]

Setelah tag HCExtension dibuat sekarang saatnya kita membuat fungsi Inject, silahkan masukan kode ini setelah dibawah tag HCExtension

function RequestHeaderReceived()
	-- mengecekapakah file cache lebih dari 1 
	if string.len(hc.cache_file_name) >= 1 then
		-- jika ada maka memanggil fungsi Inject saat event BeforeAnswerHeaderSend
		hc.call_me_for('BeforeAnswerHeaderSend', 'Inject')
	end
end	

function Inject()
	-- mendefinisikan variable
	local new_answer_header	= hc.answer_header
	-- mencari jika di hc.answer_header terdapat nilai access-control-allow-origin
	if re.find(hc.answer_header, [[^Access-Control-Allow-Origin:]]) then
    	-- jika ditemukan maka menghapusnya
    	new_answer_header = re.replace(new_answer_header, 'Access-Control-Allow-Origin: .*?\r\n', nil)
    end
    -- jika nilai origin tersedia
    if re.match(hc.request_header, [[[oO]rigin:]]) then
    	--# set cors dari nilai header origin (agar cors menjadi dynamic)
    	-- misal saat mengujungi youtube.com maka akan set cors ke youtube.com / saat mengunjungi m.youtube.com maka set cors ke m.youtube.com
    	local origin = re.find(s, '(?-s)(^Origin: (.+))', 2)
    	build_header = 'Access-Control-Allow-Origin: '..origin..'\r\n' 
    	build_header = build_header..'Access-Control-Allow-Credentials: true\r\n'		
    	build_header = build_header..'Timing-Allow-Origin: '..origin..'\r\n'				
    	build_header = build_header..'Access-Control-Expose-Headers: Client-Protocol, Content-Length, Content-Type, X-Bandwidth-Est, X-Bandwidth-Est2, X-Bandwidth-Est3, X-Bandwidth-App-Limited, X-Bandwidth-Est-App-Limited, X-Bandwidth-Est-Comp, X-Bandwidth-Avg, X-Head-Time-Millis, X-Head-Time-Sec, X-Head-Seqnum, X-Response-Itag, X-Restrict-Formats-Hint, X-Sequence-Num, X-Segment-Lmt, X-Walltime-Ms\r\n'			
		-- menggabungkan build_header dengan new_answer_header >> set answer_header
		hc.answer_header = re.replace(new_answer_header, [[\r\n\r\n]], '\r\n'..build_header..'\r\n')
		-- mengirim pesan ke log monitor pada bagian rule
		hc.monitor_string = hc.monitor_string.."cors.inject"
	else
		hc.monitor_string = hc.monitor_string.."cors.missing"
	end
end

kemudian simpan filenya, dan menambahkan extension yang dibuat ini kedalam handycache untuk dicoba

Ujicoba Extension

handycache-test-extension-cors-inject-yt
Hasil Extension CORS Inject
handycache-test-extension-cors-inject-yt-on-devtools
Hasil debug menggunaan devtools browser
Terakhir diupdate 17 Jun 2022 09:59 WIB
Daftar Konten HandyCache