js 使用不同的 http 方法发送 307Next.js 13 重定向

问题描述 投票:0回答:1

我有 Next.js 路由处理程序,由外部支付 API 使用 POST 方法调用,以在支付后重定向。在该路由处理程序中,我将用户重定向到不同的页面。结果,用户实际上被重定向到该页面,但使用 POST 方法并且没有显示任何页面,仅显示 405 浏览器错误页面。我需要使用 GET 方法将用户从 POST 路由处理程序重定向到另一个 URL 以获取页面内容。我如何在 Next.js 13 中做到这一点?

这是我的代码

import { env } from "@/env.mjs";
import { NextResponse } from "next/server";

export async function POST(req: Request) {
    return NextResponse.redirect(new URL(`${env.NEXT_PUBLIC_SITE_URL}/catalog`));
}

这里还有标题

enter image description here

http next.js
1个回答
2
投票

我在有关使用初始方法保存进行重定向的文档中找到了一些有用的信息。

为什么Next.js使用307和308?传统上302用于临时重定向,301用于永久重定向,但许多浏览器将重定向的请求方法更改为GET,而不管原始方法如何。例如,如果浏览器向 POST /v1/users 发出请求,该请求返回状态代码 302,位置为 /v2/users,则后续请求可能是 GET /v2/users,而不是预期的 POST /v2/users。 Next.js 使用 307 临时重定向和 308 永久重定向状态代码来显式保留所使用的请求方法。

默认情况下,Next.js 使用 307 和 308 状态进行临时和永久重定向,以防止将 HTTP 方法从当前方法更改为 GET 方法,就像 301 和 302 状态(较旧的重定向状态)一样。因此,为了防止保存方法,我更新了代码以使用状态 302 进行重定向,以便它自动将方法更改为 GET。

这是更新的代码:

import { env } from "@/env.mjs";
import { NextResponse } from "next/server";

export async function POST(req: Request) {
    return NextResponse.redirect(newURL(`${env.NEXT_PUBLIC_SITE_URL}/catalog`), 302);
}
© www.soinside.com 2019 - 2024. All rights reserved.