繁体   English   中英

res.redirect() 输出到浏览器“找到。 重定向到<url> ”</url>

[英]res.redirect() outputs to browser “Found. Redirecting to <url>”

我找到了我的问题的答案,它完全在我最初提出的问题的 scope 之外——实际上有一行代码故意将这个 output 写到屏幕上。 因为stackoverflow不允许我删除问题,所以原始问题仍然存在......

我有一个在开发环境中运行良好的节点应用程序,但是当我在本地运行它时(使用npm run start )并且当一个单独的服务提交一个 POST 请求时:

final ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, request, String.class);

我遇到了这个问题:

res.redirect(302, 'http://google.com');

此行不是重定向,而是显示在浏览器中:

Found. Redirecting to http://google.com

我试过 Firefox 和 Chrome。 浏览器或终端中没有错误。 我没有看到任何重定向配置。 为什么在本地运行时会发生这种情况?

假设resexpress响应 object,您可以检查几件事: 1. 当您返回重定向响应时,浏览器控制台上是否有任何错误? 2. 检查您的 express 配置文件 (CORS ♂️) 中的任何外部重定向配置。 这些通常是特定于环境的配置。

PS您可以删除302并仅通过URL来redirect function。 如果您使用 express,则默认值为 302。

如果这是您在评论中指出的提交表单的方式(您现在显然已删除):

<body Onload="document.forms[0].submit()"><form method="POST" action=/url/path> 

然后,您通过 Javascript 提交表单,因此 302 重定向响应返回到您的 Javascript 并且浏览器本身看不到它或对其采取行动。

如果浏览器直接响应在 URL 栏中键入的内容,或者浏览器通过提交按钮(而不是通过 Javascript)直接提交表单,则浏览器只会自动处理重定向。

你有几个选择让浏览器跟随表单提交的重定向:

  1. 更改您的表单以使用提交按钮提交,并且不涉及 Javascript。

  2. 更改您的 Javascript 以提交表单,等待响应,检查响应,如果它是 3xx 状态,然后从指定重定向位置的响应中获取location header 并手动将window.location位置设置为新位置。


请注意,如果页面在没有任何用户交互的情况下加载,页面就会自动将表单提交回原始服务器,这有点奇怪。 我想不出这种情况是需要的,因为为原始页面提供服务的服务器本身可能只是自己执行了表单操作,而不是将表单发送回浏览器只是让浏览器将其提交回服务器而不更改页面中的任何内容。 这似乎是浪费在浏览器的往返行程,因为在将表单直接发送回服务器之前,客户端没有进行任何修改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM