-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path18d-sameOriginPolicy.js
executable file
·80 lines (60 loc) · 2.63 KB
/
18d-sameOriginPolicy.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// --- Same-Origin Policy ---
// server dapat tampung sebuah web, aplikasi, gambar, video dll
// ketika server menampung wbm mungkin beberapa dta gambar, video, stylesheet biasanya diambil dari
// alamat server lain atau origin berbeda
// contoh stylesheet yang diambil dari Bootstrap CDN atau gambar dari server Unsplash
// hal ini wajar dan dapat dilakukan
// tahukah anda bahwa tidak semua data bisa diambil dari origin yang berbeda ?
// jika web request sesuatu dg teknik di luar originnya, maka permintaan tsb akan ditolak, karna kebijaka same-origin
// kasus ini terjadi pada aplikasi dan web server yang kita buat
// origin terdiri dari 3 hal : protokol, host dan port number
// origin dari aplikasi client kita adalah :
// http://notesapp-v1.dicodingacademy.com
// - http:// adalah protokol
// - notesapp-v1.dicodingacademy.com adalah host
// - :80(implisit) adalah port
// selama aplikasi client akses data dari origin yang sama, hal ini dpat dilakukan.
// bila ada salah satu saja yang berbeda misal port 8001, maka permintaan itu ditolak
// origin web server kita saat ni adalah http://localhost:5000/
// solusi utk menangani hal tsb adalah dengan mekanisme Cross-Origin Resource sharing (CORS)
// pada web server, kita hanya perlu memberikan nilai header "Access-Control-Allow-Origin" dengan nilai origin luar yang akan mengkonsumsi datanya
/*
const response = h.response({error: false, message: 'Catatan berhasil ditambahkan});
response.header('Access-Control-Allow-Origin', 'http://notepad-v1.dicodingacademy.com');
return response;
*/
// atau anda bisa menggunakan tanda * pada nilai origin untuk memperbolehkan data dikonsumsi oleh seluruh origin
/*
const response =h.response({error: false, message:'Catatan berhasil ditambahkan'});
response.header('Access-Control-Allow-Origin','*');
return response
*/
// penerapan ini akan jauh lebih mudah menggunakan Hapi. Hapi dapat menetapkan CORS secara spesifik ke route yang dituju
// dengan menambahkan properti option.cors di konfigurasi route. contohnya sbb:
/*
{
method: 'POST',
path: '/notes',
handler: addNoteHandler,
options: {
cors: {
origin: ['*'],
},
},
},
*/
// bila ingin cakupan yang lebih luas CORS diaktifkan di seluruh route yang ada di server, anda bisa tetapkan CORS pada konfig ketika henda membuat
// server dengan menambahkan properti routes.cors seperti berikut:
/*
const server = Hapi.server({
port: 5000,
host: 'localhost',
routes: {
cors: {
origin : ['*'],
},
},
});
*/
// simpan perubahan pada berkas server.js
// pastikan server masih berjalan