前端post提交一次会有两次请求?

1 问题:前端post只提交一次会有两次请求?

前端post只提交一次会有两次请求?如下图:

这里是执行了两次post提交,每个post都有两次(一次是preflight以options方式,一次是xhr,原本post),这与浏览器的跨域资源共享(CORS)策略有关,每一次类型preflight是浏览器自动发起的options请求,不可以直接控制,但可以通过服务端配置的方式向浏览器缓存允许直接请求,只需配置适当的Access-Control-Max-Age头即可解决。

2 设置后端代码,避免预检请求

以springboot后端代码示例:

java 复制代码
@Configuration
public class WebConfiguration implements WebMvcConfigurer {


    private CorsConfiguration corsConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        List<String> list = new ArrayList<>();
        list.add("*");
        corsConfiguration.setAllowedOrigins(list);
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.setMaxAge(3600L); 

        return corsConfiguration;
    }
}

配置后测试再也没有发现preflight以options方式的请求,如下图

3 不设置后端,避免预检请求?

如果你想避免预检请求,可以尝试以下方法:

  • 使用简单的HTTP方法(如GET或POST,但不包括自定义头部)。
  • 避免使用非简单的请求头(如Content-Type必须是application/x-www-form-urlencoded, multipart/form-datatext/plain)。
  • 将CORS策略配置为允许跨域请求而不需要预检。

总结来说,浏览器会为了安全性,在跨域请求时先发出预检请求,确保目标服务器允许跨域访问,然后才进行实际的POST请求。这就是为什么会有两次请求,一次是preflight,一次是xhr。

相关推荐
小范馆1 分钟前
STM32F03C8T6通过AT指令获取天气API-下篇
前端·stm32·esp8266-01s
开开心心_Every8 分钟前
无广告输入法推荐:内置丰富词库免费皮肤
服务器·前端·学习·决策树·edge·powerpoint·动态规划
卓怡学长1 小时前
m111基于MVC的舞蹈网站的设计与实现
java·前端·数据库·spring boot·spring·mvc
C_心欲无痕6 小时前
前端实现水印的两种方式:SVG 与 Canvas
前端·安全·水印
尾善爱看海9 小时前
不常用的浏览器 API —— Web Speech
前端
美酒没故事°10 小时前
vue3拖拽+粘贴的综合上传器
前端·javascript·typescript
jingling55511 小时前
css进阶 | 实现罐子中的水流搅拌效果
前端·css
悟能不能悟12 小时前
前端上载文件时,上载多个文件,但是一个一个调用接口,怎么实现
前端
可问春风_ren13 小时前
前端文件上传详细解析
前端·ecmascript·reactjs·js
羊小猪~~13 小时前
【QT】--文件操作
前端·数据库·c++·后端·qt·qt6.3