522 字
3 分鐘
[Day1] 用Workers做whoami網站,顯示Request資訊 — 30天實戰Cloudflare
2023-05-20
無標籤

上一個系列介紹完Cloudflare各種常見的功能,我們接著來了解到Cloudflare實作哪些功能,本篇會先介紹到如何使用Workers做一個類似whoami的網站,來顯示Client的Request資訊。


功能效果#

效果會如下,可以呈現出Request Header、Body等資訊,另外Cloudflare也提供除了Request以外的使用者資訊,如:IP、國家、時區、座標等。

其中Cloudflare資訊只能夠在Workers中取得相關資訊,不會丟到後端的原點伺服器,原點伺服器只能取得Request的Header、Body。如果希望在伺服器能夠取得使用者資訊,可以到「規則」、「轉換規則」、「受控轉換」中,勾選要HTTP請求標頭,以此來取得使用者IP與其他資訊。


程式範例#

參考之前Workers的基本教學,我們建立一個專案,並複製貼上範例程式碼,程式碼如下:

export default {
async fetch(request, env) {
let result = "";
// 取得Cloudflare參數
result = request.method + " " + request.url + "\n";
result += "\nCLOUDFLARE\n---\n";
for (const [key, value] of Object.entries(request.cf)) {
var v = JSON.stringify(value);
result += `${key}: ${v}\n`;
}
// 取得Request Header
result += "\nHEADER\n---\n";
const headers = Object.fromEntries(request.headers);
for (const [key, value] of Object.entries(headers)) {
result += `${key}: ${value}\n`;
}
// 取得Request Body
result += "\nBODY\n---\n";
result += await request.text();
return new Response(result);
}
}

我們這邊功能有三段,第一段讀取Cloudflare中使用者的參數,並把它全部列出來,這裡使用request.cf的參數,可以參考官方文件看看有哪些資訊可以取得。第二段我們使用request.headers取得使用者過來的所有標頭資訊。第三段使用await request.text()取得使用者的body資訊。

再來到Workers提供的網址,就可以瀏覽這個我們撰寫的程式。我們也可以另外將自己的網域設定上去,在自訂網域中新增即可,我這邊範例以whoami.twcanhelp.me為例。


結語#

透過以上方式我們可以簡單實作一個取的Request Header、Body的工具,如果不想自建,也可以考慮使用現成的工具如Beeceptor