首页 > 其他分享 >fastapi 跨域请求

fastapi 跨域请求

时间:2024-08-26 10:38:18浏览次数:9  
标签:HTTP 跨域 fastapi allow 允许 请求

问题描述

在前后端开发中遇到一个问题,前端发送请求后,后端报 'OPTIONS /mock/user/login HTTP/1.1' 405 Method Not Allowed,如下图:

但用fastapi自带的swagger或postman测试又是可以的。

 

定位原因

这是因为在跨域的情况下,在浏览器发起"复杂请求"时主动发起的。跨域共享标准规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求 。服务器确认允许之后,才发起实际的 HTTP 请求。这也明明需要一个POST请求,但是实际浏览器发两次HTTP请求给服务器的原因。

 

解决方案

FastAPI提供了一个名为fastapi.middleware.cors的中间件模块,可用来处理跨域问题。

from fastapi.middleware.cors import CORSMiddleware
from fastapi import FastAPI

app = FastAPI()

# 允许所有来源的跨域请求
app.add_middleware(
    CORSMiddleware,
    # 允许所有来源的跨域请求,你也可以设置为具体的域名来限制请求来源
    allow_origins=["*"],
    # 参数设置为True表示允许携带身份凭证,如cookies
    allow_credentials=True,
    # 表示允许所有HTTP方法的请求
    allow_methods=["*"],
    # 表示允许所有请求头
    allow_headers=["*"]
)

 

标签:HTTP,跨域,fastapi,allow,允许,请求
From: https://www.cnblogs.com/shenh/p/18375907

相关文章

  • Access-Control-Allow- 设置 跨域资源共享 CORS 详解
    跨域访问的项目常在过滤器或者拦截器中添加如下配置   response.setHeader("Access-Control-Allow-Origin","*");response.setHeader("Access-Control-Allow-Methods","POST,OPTIONS,GET");response.setHeader("Access-Control-Max-Age&qu......
  • SpringbootWeb请求响应和分层解耦
    目录前言一、请求(学会使用postman和接收请求参数)1.后端接口测试工具Postman(1)引入(2)介绍(3)安装和使用 2.简单参数 (1)postman发送请求测试 (2)原始方式接收(3)SpringBoot方式(4)Spingboot方式参数名不一致问题3.实体参数(1)简单实体(2)复杂实体4.数组集合参数 (1)数组(2)集......
  • 现代Web开发中AJAX请求的运作原理
    ajax的请求过程1、新建ajax对象:    IE6不兼容newXMLHttpRequest();    IE6下,ajax对象的兼容方法:        try判断的方法:          varxhr=null;            try{    xhr=newXMLHttpRequest();    }      ......
  • **为何HTTP请求方法如此重要?5个理由告诉你!**
    HTTP请求方法post向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。get请求指定的页面信息,并返回实体主体。delete请求服务器删除指定的页面。put从客户端向服务器传送的数据......
  • 跨域解决 | 面试常问问题
    跨域解决|面试常问问题跨域问题一直是前端开发中不可避免的一部分,它涉及到浏览器的同源策略和安全机制。本文将深入解析跨域问题的本质,并探讨前端和后端的多种解决方案,同时分享一些扩展与高级技巧。最后,我们还将总结跨域解决方案的优缺点,并列出一些面试中常见的问题......
  • abp vnext请求头增加,以及请求头增加公共头部回调
    context.Services.AddHttpContextAccessor();要访问请求头的话,要加上这个语句;追加请求头的方法:1、服务层服务的HttpApi.Client项目Module类的ConfigureServices方法开头位置添加如下代码:context.Services.AddTransient<AddHeaderHandler>();context.Services.AddHttpClient(Prod......
  • 渗透测试SSRF技术 之 【服务端请求伪造】 SSRF和CSRF区别是啥 从知道是啥到如何玩ssrf
    目录ssrf和csrf的区别是啥SSRF攻击流程SSRF带来的危害:最后:ssrf和csrf的区别是啥:解释:CSRF:跨站请求伪造,客户端请求伪造。SSRF(Server-SideRequestForgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标......
  • usb请求块以及提交方式
    URB结构体structurb{/*private:usbcoreandhostcontrolleronlyfieldsintheurb*/structkrefkref;/*referencecountoftheURB*/void*hcpriv;/*privatedataforhostcontroller*/atomic_tuse_count;/*......
  • python-jose 实现fastapi登录验证
    JWT和Session的区别:JWT:JWT是一种无状态的认证机制。由于JWT令牌包含了用户的身份信息以及相关的元数据,服务端不需要存储任何用户状态信息,只需要验证JWT令牌的真实性和有效性即可。这使得JWT非常适合于构建无状态的分布式系统,因为JWT令牌可以在不同的服务之间轻松共享。Sessio......
  • Axios:轻松进行 HTTP 请求的强大工具
    在前端开发中,与服务器进行通信是非常常见的需求。无论是获取数据、发送表单,还是上传文件,HTTP请求都扮演着重要角色。虽然JavaScript提供了原生的fetchAPI和XMLHttpRequest,但它们在处理复杂请求时可能不太方便。这时候,Axios作为一个基于Promise的HTTP客户端库,提......