当前位置: 首页 > wzjs >正文

谈谈网站的开发流程西安网站定制开发

谈谈网站的开发流程,西安网站定制开发,高端网站价格,网站做接口怎么做prompt: 你是一个文笔流畅、专业性极强的技术博客博主,你将结合具体的例子和实际代码解释写一篇为何后端选择fastapi框架时,需要允许跨域访问。 为何在 FastAPI 中需要允许跨域访问(CORS)? 在现代 Web 开发中&#xf…

prompt: 你是一个文笔流畅、专业性极强的技术博客博主,你将结合具体的例子和实际代码解释写一篇为何后端选择fastapi框架时,需要允许跨域访问。

为何在 FastAPI 中需要允许跨域访问(CORS)?

在现代 Web 开发中,前后端分离已经成为主流架构模式。前端通常运行在浏览器中(例如通过 React、Vue.js 或 Angular 构建的单页应用),而后端则通过 API 提供数据支持,比如使用 Python 的 FastAPI 框架构建的高性能 RESTful 接口。然而,当前端和后端部署在不同的域名、端口或协议下时,浏览器会触发一种安全机制——同源策略(Same-Origin Policy),阻止前端直接访问后端 API。这时,我们需要在后端启用跨域资源共享(CORS,Cross-Origin Resource Sharing),以确保前后端能够正常通信。

本文将深入探讨为何在 FastAPI 中需要配置 CORS,并通过具体场景和代码示例展示如何实现。

一、同源策略与跨域问题

浏览器的同源策略规定,只有当协议(protocol)、域名(domain)和端口(port)完全一致时,两个资源才被视为“同源”。例如:

  • http://localhost:3000http://localhost:8000:端口不同,非同源。
  • http://example.comhttps://example.com:协议不同,非同源。
  • http://app.example.comhttp://api.example.com:域名不同,非同源。

假设你使用 FastAPI 在 http://localhost:8000 上运行一个后端服务,而前端应用运行在 http://localhost:3000(比如一个 React 项目)。当前端通过 fetchaxios 发起请求时,浏览器会检测到“跨域”行为,默认阻止请求,并抛出类似以下的错误:

Access to fetch at 'http://localhost:8000/api/data' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这是因为后端没有明确告诉浏览器允许来自 http://localhost:3000 的请求。为了解决这个问题,我们需要在 FastAPI 中启用 CORS。

二、FastAPI 与 CORS 的关系

FastAPI 是一个基于 Python 的现代化、高性能 Web 框架,内置了对异步编程的支持,非常适合构建 RESTful API。然而,FastAPI 本身并不会默认启用 CORS,因为它无法预知你的前端部署在哪里、需要允许哪些来源访问。为了让前端能够顺利调用 API,我们需要手动配置 CORS。

幸运的是,FastAPI 提供了与 Starlette 中间件集成的便捷方式,通过 CORSMiddleware 可以轻松实现跨域支持。

三、实际场景:前后端分离的典型案例

假设你正在开发一个任务管理应用:

  • 前端:使用 React 构建,运行在 http://localhost:3000,通过 API 获取任务列表。
  • 后端:使用 FastAPI 构建,运行在 http://localhost:8000,提供 /tasks 接口返回任务数据。

如果不配置 CORS,前端发起请求时会失败。为了让这个应用正常工作,我们需要在 FastAPI 中允许来自 http://localhost:3000 的跨域请求。

四、代码示例:如何在 FastAPI 中启用 CORS

以下是一个完整的 FastAPI 示例,展示了如何配置 CORS:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware# 创建 FastAPI 应用实例
app = FastAPI()# 配置允许的来源(origins)
origins = ["http://localhost:3000",  # 前端应用的地址"http://localhost:5173",  # 比如使用 Vite 时的默认端口"https://your-production-domain.com",  # 生产环境的前端域名
]# 添加 CORS 中间件
app.add_middleware(CORSMiddleware,allow_origins=origins,  # 允许访问的来源allow_credentials=True,  # 是否允许携带凭证(如 Cookies)allow_methods=["*"],     # 允许的 HTTP 方法(如 GET、POST)allow_headers=["*"],     # 允许的 HTTP 头
)# 示例接口:返回任务列表
@app.get("/tasks")
async def get_tasks():return [{"id": 1, "title": "学习 FastAPI"},{"id": 2, "title": "配置 CORS"}]# 运行应用
if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)

代码解释

  1. 导入 CORSMiddleware:FastAPI 通过 Starlette 提供的 CORSMiddleware 处理跨域请求。
  2. 定义 originsallow_origins 指定了哪些域名可以访问后端 API。可以是具体域名,也可以设置为 ["*"](允许所有来源,但安全性较低)。
  3. 配置中间件
    • allow_credentials=True:支持携带 Cookies 或认证头。
    • allow_methods=["*"]:允许所有 HTTP 方法(如 GET、POST、PUT 等)。
    • allow_headers=["*"]:允许所有请求头。
  4. 接口实现/tasks 接口返回一个简单的任务列表。
五、在前端验证

假设前端使用 JavaScript 的 fetch 调用 API:

fetch("http://localhost:8000/tasks").then(response => response.json()).then(data => console.log(data)).catch(error => console.error("Error:", error));

在配置 CORS 之前,浏览器会报错。配置完成后,前端将成功接收到后端返回的任务数据:

[{ "id": 1, "title": "学习 FastAPI" },{ "id": 2, "title": "配置 CORS" }
]
六、生产环境中的注意事项

在开发环境中,允许 http://localhost:3000 是可以的。但在生产环境中,你需要:

  1. 精确指定域名:将 origins 更新为实际的前端域名(如 https://your-app.com),避免使用 ["*"],以提高安全性。
  2. HTTPS 支持:确保后端支持 HTTPS,浏览器在跨域请求中通常要求安全协议。
  3. 动态配置:如果允许多个前端域名访问,可以从配置文件或环境变量中读取 origins
七、总结

在 FastAPI 中启用 CORS 是前后端分离开发中的必要步骤,因为浏览器的同源策略限制了跨域请求。通过 CORSMiddleware,我们可以灵活地控制哪些来源、方法和头被允许访问后端 API。无论是开发阶段的本地测试,还是生产环境的部署,合理配置 CORS 都能确保前端与后端无缝协作。

希望这篇文章和代码示例能帮助你更好地理解 FastAPI 中的跨域问题。如果有更多疑问,欢迎留言讨论!


这篇文章以技术博客的风格,结合场景、代码和注意事项,清晰地解释了为何需要 CORS 以及如何实现。如果你需要调整某些部分(比如更深入的技术细节或不同的示例),请告诉我!

http://www.dtcms.com/wzjs/467261.html

相关文章:

  • 网站开发图片框创意营销
  • 编辑网站内容怎么做滚动图片googleplay官网
  • 长春网站制作都找源晟27最新病毒感染什么症状
  • 开发公司与物业公司的交接手续seo综合查询站长工具怎么用
  • 北京网站定制设计开发公司建设网站的网站首页
  • 杭州网站建设哪里好怎么创建网站链接
  • 网站展示 包括什么电商seo
  • 南沙区交通和建设局网站广州百度首页优化
  • 河南建设网靖江seo要多少钱
  • asp网站开发后如何交付bt磁力种子搜索引擎
  • 沧州做网站费用seo专业学校
  • 电梯网站建设世界企业排名500强
  • 西安网站制作培训电商是做什么的
  • 湖南做网站公司网站是如何建立的
  • 上海松江区做网站的公司中央新闻频道直播今天
  • 公司建网站哪家如何做线上推广
  • 网站后台怎么建设备案查询
  • 微信上浏览自己做的网站吗百度移动端模拟点击排名
  • 餐饮手机微网站怎么做优化公司排行榜
  • 佛山网站建设no.1重庆森林百度网盘
  • 中网可信网站是真的吗软文模板300字
  • 中小企业信息seo网站诊断
  • 温州市微网站制作多少钱徐州seo公司
  • 国内怎么打开WordPress网站网站seo推广招聘
  • 广州专业建网站公司什么是seo搜索
  • 展览网站模板免费网络推广的方法
  • wordpress的收费如何提高网站seo排名
  • 福州哪里制作网站百度网页版入口链接
  • 北京西站附近景点百度官网网站登录
  • 导购类网站模板不收费的小说网站排名