前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Cloudflare Workers学习笔记,Cloudflare Workers 是什么?

Cloudflare Workers学习笔记,Cloudflare Workers 是什么?

作者头像
房东的狗丶
发布2023-04-24 09:55:06
1.9K0
发布2023-04-24 09:55:06
举报
文章被收录于专栏:友人a的笔记丶友人a的笔记丶

开发文档:https://developers.cloudflare.com/workers/

Cloudflare Workers

Cloudflare Workers提供了一个serverless执行环境,无需配置或维护基础架构即可创建全新的应用程序或扩充现有的应用程序。

特点

每天免费10w个请求,可以绑定自己的域名,可以访问外网,可以反代理外网的接口

1.开发部署

Wrangler是一个用于Cloudflare Workers功能开发、测试、部署的CLI工具

相关文档:https://developers.cloudflare.com/workers/wrangler/

2.使用限制

相关文档:https://developers.cloudflare.com/workers/platform/limits/

Worker开发

Wordker底层运行环境跟Node.js大致相同,但是只能调用Cloudflare提供的API。

相关案例:https://developers.cloudflare.com/workers/examples/

1.开发环境

安装Wrangler Cli,运行如下命令:

代码语言:javascript
复制
# 安装软件包
npm i -D wrangler 
# 初始化开发目录
npx wrangler init
# 运行开发环境
npx wrangler dev

运行后,将自动跳转Cloudflare进行授权,然后运行开发服务器。

不想自己搭建的话,也可以直接使用Cloudflare后台的在线开发环境。

2.运行时API

相关文档:https://developers.cloudflare.com/workers/runtime-apis/

关于Fetch

Fetch API:https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API

Fetch 提供了对 Request 和 Response(以及其他与网络请求有关的)对象的通用定义。这将在未来更多需要它们的地方使用它们,无论是 service worker、Cache API,又或者是其他处理请求和响应的方式,甚至是任何一种需要你自己在程序中生成响应的方式(即使用计算机程序或者个人编程指令)。

全局的 fetch() 方法用于发起获取资源的请求。它返回一个 promise,这个 promise 会在请求响应后被 resolve,并传回 Response 对象。

代码语言:javascript
复制
var myImage = document.querySelector('img');

var myRequest = new Request('flowers.jpg');

fetch(myRequest).then(function(response) {
  return response.blob();
}).then(function(response) {
  var objectURL = URL.createObjectURL(response);
  myImage.src = objectURL;
});

功能拓展

1.反代理ChatGPT接口

代码语言:javascript
复制
/* 监听请求事件 */
addEventListener('fetch', event => {
  event.respondWith(fetchAndApply(event.request));
})

/**
 * 响应请求
 * @param request
 * @return {Promise<"success"|"error">}
 */
async function fetchAndApply(request) {

  let response = null;
  let method = request.method; //请求方法

  let url = new URL(request.url);
  let url_hostname = url.hostname;
  url.protocol = 'https:';
  url.host = 'api.openai.com';

  let request_headers = request.headers;
  let new_request_headers = new Headers(request_headers);
  new_request_headers.set('Host', url.host);
  new_request_headers.set('Referer', url.protocol + '//' + url_hostname);

  let original_response = await fetch(url.href, {
    method: method,
    headers: new_request_headers,
    body: request.body
  })

  let original_response_clone = original_response.clone();
  let original_text = null;
  let response_headers = original_response.headers;
  let new_response_headers = new Headers(response_headers);
  let status = original_response.status;

  new_response_headers.set('Cache-Control', 'no-store');
  new_response_headers.set('access-control-allow-origin', '*');
  new_response_headers.set('access-control-allow-credentials', true);
  new_response_headers.delete('content-security-policy');
  new_response_headers.delete('content-security-policy-report-only');
  new_response_headers.delete('clear-site-data');

  original_text = original_response_clone.body
  response = new Response(original_text, {
    status,
    headers: new_response_headers
  })

  return response

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Cloudflare Workers
    • 1.开发部署
      • 2.使用限制
      • Worker开发
        • 1.开发环境
          • 2.运行时API
          • 关于Fetch
          • 功能拓展
            • 1.反代理ChatGPT接口
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档