我试图了解如何使用CORS,并对Access-Control-Allow-Credentials标题的作用感到困惑.
文件说
指示凭证标志为true时是否可以公开对请求的响应.
但我不明白"暴露"的反应意味着什么.
任何人都可以解释这个标题被设置为true(与设置为true的凭证标志一起)实际上是什么?
我尝试在 FastAPI 框架上使用 CORS,但它不适用于 GET 方法
这是我正在处理的代码:
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=['*'],
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/test1")
async def test1():
return {"message": "Hello World"}
Run Code Online (Sandbox Code Playgroud) 我已经为钱编写代码 20 多年了,但我没有理由回答这个问题。
天哪,我用谷歌搜索过它。我知道这里有很多半相同的问题,我想我已经阅读了所有的回答,并尝试了所有建议的模式。许多问题都没有得到特别明确的阐述,而且我的案例似乎有点自相矛盾(所有部分都是孤立工作的)。请耐心等待,我会尽力而为。
前面使用 svelte-kit,后面使用 fastapi。
首先,下面是我的“Buttons.svelte”组件,逐字复制。
<script lang="javascript">
async function worksJustFine() {
fetch("https://jsonplaceholder.typicode.com/todos")
.then(response => {
console.log(" response", response)
console.log(" r.json() >", response.clone().json())
response.json()
.then(json => {
console.log("json", json)
})
.catch(error => console.log(error))
})
}
async function doesNotWork() {
fetch(`http://localhost:8000/api/test_url?test_param=1`)
.then(response => {
console.log(" response", response)
console.log(" r.json() >", response.clone().json())
response.json()
.then(json => {
console.log("json", json)
})
.catch(error => console.log(error))
})
}
</script>
<buttons>
<button class="btn btn-outline-primary btn-lg" on:click={worksJustFine}>OK</button>
<button class="btn btn-outline-primary btn-lg" on:click={doesNotWork}>NOT OK</button>
</buttons>
<style lang="scss"> …Run Code Online (Sandbox Code Playgroud) 为什么 FastAPI 不将 cookie 返回到我的前端(这是一个 React 应用程序)?
这是我的代码:
@router.post("/login")
def user_login(response: Response,username :str = Form(),password :str = Form(),db: Session = Depends(get_db)):
user = db.query(models.User).filter(models.User.mobile_number==username).first()
if not user:
raise HTTPException(400, detail='wrong phone number or password')
if not verify_password(password, user.password):
raise HTTPException(400, detail='wrong phone number or password')
access_token = create_access_token(data={"sub": user.mobile_number})
response.set_cookie(key="fakesession", value="fake-cookie-session-value") #here I am set cookie
return {"status":"success"}
Run Code Online (Sandbox Code Playgroud)
当我从 Swagger UI autodocs 登录时,我可以使用 Chrome 浏览器上的 DevTools 在响应标头中看到 cookie。但是,当我从 React 应用程序登录时,没有返回 cookie。我正在使用 axios 发送这样的请求:
await axios.post(login_url, formdata)
我有一个简单的 React Ui,它应该从中获取 json 文件localhost:8000/todo并在localhost:3000. 这是所需的输出:

所以,这两行是“读一本书”。和“骑自行车环城”。没有显示。这两行应该来自localhost:8000/todo类型JSON信息。我觉得我可以从 获取数据localhost:8000/todo,但我不知道如何在 中显示它们localhost:3000,这是我的输出。
这是我为此提供的功能:
export default function Todos() {
const [todos, setTodos] = useState([])
const fetchTodos = async () => {
const response = await fetch("http://localhost:8000/todo")
const todos = await response.json()
setTodos(todos.data)
}
useEffect(() => {
fetchTodos()
}, [])
return (
<TodosContext.Provider value={{todos, fetchTodos}}>
<AddTodo />
<Stack spacing={5}>
{todos.map((todo) => (
<b>{todo.item}</b>
))}
</Stack>
</TodosContext.Provider>
)
}
Run Code Online (Sandbox Code Playgroud)
{todos.item}是应该打印项目的部分,但它没有!
以下是 …
fastapi ×4
cors ×2
javascript ×2
python ×2
reactjs ×2
axios ×1
fetch-api ×1
http-headers ×1
svelte ×1