前端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。

相关推荐
yuanyxh12 小时前
macOS 应用 - 纯对话生成
前端·macos·ai编程
大家的林语冰12 小时前
ES5 凉凉,Babel 8 正式发布,默认不再编译为 ES5 和 CJS......
前端·javascript·前端工程化
光影少年13 小时前
react批量更新、同步/异步更新场景
前端·react.js·掘金·金石计划
假如让我当三天老蒯13 小时前
模块化:ES Module 与 CommonJS 的区别
前端·面试
用户409501157731713 小时前
Private Forge v2.0 发布:12大前端业务场景技能系统
前端
weedsfly14 小时前
异步编程全景与事件循环——彻底搞懂 JS 执行机制
前端·javascript
用户0595401744614 小时前
AI Agent记忆测试踩坑实录:Mock骗了我一周,Mem0+pytest一招破局
前端·css
用户17335980753714 小时前
纯前端 PDF 数字签名实战:Vue 3 + pdf-lib 在浏览器里完成签名嵌入
前端·javascript
IT_陈寒15 小时前
SpringBoot自动配置的坑,我爬了三天才出来
前端·人工智能·后端
Avan_菜菜21 小时前
AI 能写代码了,为什么我反而开始要求它先写文档?
前端·github·ai编程