当前位置: 首页 > 知识库问答 >
问题:

Javascript fetch调用后端两次[重复]

张嘉
2023-03-14

我有后端应用程序写在java ee和泽西。当我使用JavaScript Fetch API将数据发送到restendpoint时,我看到过滤器被激发了两次。一旦它没有授权头,第二个它有。当我尝试从web浏览器打开我的网站时,这个过滤器只被调用一次。为什么会发生这种事。也许是因为CORS?

下面我的日志从单一的帖子,两个打印从同一个过滤器。

 http://localhost:8080/BlogRest/controller/endpoint/|#]
  Key=host, value=localhost:8080|#]
  Key=origin, value=http://localhost:3000|#]
  Key=access-control-request-method, value=POST|#]
  Key=content-length, value=0|#]
  Key=access-control-request-headers, value=authorization,content-type|#]
  Key=connection, value=keep-alive|#]
  Key=accept, value=*/*|#]
  Key=user-agent, value=user agent data|#]
  Key=referer, value=http://localhost:3000/|#]
  Key=accept-language, value=pl-pl|#]
  Key=accept-encoding, value=gzip, deflate|#]
  

第二次通话

  http://localhost:8080/BlogRest/controller/endpoint/|#]
  Key=host, value=localhost:8080|#]
  Key=origin, value=http://localhost:3000|#]
  Key=content-type, value=application/json|#]
  Key=accept-language, value=pl-pl|#]
  Key=accept-encoding, value=gzip, deflate|#]
  Key=connection, value=keep-alive|#]
  Key=accept, value=*/*|#]
  Key=user-agent, value=user agent data|#]
  Key=authorization, value=Bearer token|#]
  Key=referer, value=http://localhost:3000/origin|#]
  Key=content-length, value=15|#]

共有1个答案

乐正远航
2023-03-14

有两个请求是因为CORS。一个请求方法是OPTIONS,当它被预成形时,就会启动预期的POST请求。选项请求不调用endpoint,它只获取te服务器配置。因此,我使用HttpServletRequest getMethod()按方法在Java过滤器请求中进行了过滤。

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest requ = (HttpServletRequest) request;

        if (requ.getMethod().toLowerCase().equals(HttpMethod.OPTIONS)) {
            chain.doFilter(request, response);
            return;
        }

        //do something on not options method.            

        chain.doFilter(request, response);

    }
 类似资料:
  • 我觉得有一个简单的解决办法,但由于某些原因,我不能把我的头围绕它。 我有一个情况,一个按钮必须先点击,才能点击另一个。用户为这2个JButtons选择的选项将决定程序的下一步。这意味着我必须调用actionListener两次,对吗?我如何在一个actionPerformed方法中做到这一点? 如果actionPerformed方法中的(e.getSource()==Square[1][4]&&e

  • 问题内容: 在我的Angular 2应用中,我具有以下后端服务。 调用此服务后,我想在上一个成功的情况下调用另一个服务。 第二次服务 这两个服务分别返回两个JSON数组。然后,我需要使用这两个数组进行一些登录。 已编辑 服务 然后,我在其他ts文件中使用following来调用服务。 但这会在控制台日志上出现以下错误。 任何建议表示赞赏。 问题答案: 您需要利用操作员在前一个请求完成后调用一个请求

  • 问题内容: 我在Go中关注一个简单的Web服务器示例。 我插入了一条语句,使生成的代码如下所示: 问题是,每当我在Web浏览器中加载端口8000时,此函数就会被调用两次。这是一个问题,因为我打算在每次页面访问时增加一个计数器。通过这种行为,计数器将增加两次。OTOH,如果我这样做,它只会被调用一次。 我觉得我在这里失踪真的很愚蠢。 问题答案: 只需记录请求。您将意识到您的浏览器还请求/favico

  • 我仍在尝试将RXJava2用于多个订阅者使用的轮询服务。它工作得很好,除了它总是调用两次。 我尝试使用publish(1)、take(1)、share()、refCount()等,但结果总是一样。叫两次或多次。 我还是不明白为什么它叫了两次。新订阅服务器应该接收最新发出的值,并且只在更改后的值(如果hashmap更改了)返回为modified List。 我的民意调查可观察到(单例) 我的谓词用于

  • 下面的代码循环了两次。第一个while循环要求用户输入(以做出选择)。我把选择默认值设置为“n”,使它变得更简单。 因此,它命中if语句并开始第2个while循环。现在它要求用户进行另一个选择。用户只能输入“a”,因为其他任何东西都会出现错误陷阱。用户输入“a”并得到添加一个数字的提示(变量num=0)。用户输入一个数字。 使用更多信息更新的代码 我已经尝试使用不同的变量进行选择。它不起作用。我想

  • 问题内容: 为什么在组合框中选择项目时会两次调用此事件? 问题答案: 对于一次更改,JComoboBox ItemListener确实会被调用两次。一次用于SELECTED事件,一次用于DESELECTED事件。 有关如何编写ItemListener的信息,请参见本教程页面。 基本上你要做的就是