gpt4 book ai didi

html - 浏览器发起的重定向 GET 请求未成功

转载 作者:搜寻专家 更新时间:2023-10-31 08:07:53 24 4
gpt4 key购买 nike

在尝试将用户重定向到 URL 时,它适用于 GET 请求,但不适用于回发请求。

通过 firebug 的网络窗口,我可以看到在回发请求(应该导致重定向)完成后浏览器收到的重定向响应。浏览器看似对重定向 URL 发起了 GET 请求,但实际上并没有成功重定向。它保留在同一页面上。

我使用 JSF 服务器端。服务器根本不接收发起的 GET 请求。但是由浏览器根据服务器的要求发起。我想问题只出在客户端

谁能解释一下如何使重定向成功?如果我需要提供更多信息,请告诉我。

编辑:

重定向的请求 header :

GET /Px10Application/welcome.xhtml HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: application/xml, text/xml, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://localhost:8080/Px10Application/channelPages.xhtml?channelId=-3412&type=Group
X-Requested-With: XMLHttpRequest
Faces-Request: partial/ajax
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: hb8=wq::db6a8873-f1dc-4dcc-a784-4514ee9ef83b; JSESSIONID=d40337b14ad665f4ec02f102bb41; oam.Flash.RENDERMAP.TOKEN=-1258fu7hp9
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

重定向的响应头:

HTTP/1.1 200 OK
X-Powered-By: Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1 Java/Sun Microsystems Inc./1.6)
Server: GlassFish Server Open Source Edition 3.1
Set-Cookie: oam.Flash.RENDERMAP.TOKEN=-1258fu7hp8; Path=/Px10Application
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
Content-Type: text/xml;charset=UTF-8
Content-Length: 262
Date: Wed, 22 May 2013 17:18:56 GMT

最佳答案

X-Requested-With: XMLHttpRequest
Faces-Request: partial/ajax

因此,您尝试使用“普通”Servlet API 的 HttpServletResponse#sendRedirect() 在 JSF ajax 请求上发送重定向。这个不对。 XMLHttpRequest 不会将 302 响应视为新的 window.location,而是将其视为新的 ajax 请求。但是,当您返回一个完整的纯普通 HTML 页面作为 ajax 响应而不是带有要更新哪些 HTML 部分的说明的预定义 XML 文档时,JSF ajax 引擎不知道如何处理重定向的 ajax 请求的响应。如果您没有配置 jsf.ajax.onError() 处理程序,您最终会遇到 JS 错误(您没有在 JS 控制台中看到它吗?)并且没有任何形式的视觉反馈。

为了指示 JSF ajax 引擎更改 window.location,您需要返回一个特殊的 XML 响应。如果你用过ExternalContext#redirect()相反,它会完全透明地发生。

externalContext.redirect(redirectURL);

但是,如果您不在 JSF 上下文中,例如在 servlet 过滤器中,因此手边没有 FacesContext,那么您应该手动创建并返回特殊的 XML 响应。

if ("partial/ajax".equals(request.getHeader("Faces-Request"))) {
response.setContentType("text/xml");
response.getWriter()
.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
.printf("<partial-response><redirect url=\"%s\"></redirect></partial-response>", redirectURL);
} else {
response.sendRedirect(redirectURL);
}

如果您碰巧使用了 JSF 实用程序库 OmniFaces , 那么你也可以使用 Servlets#facesRedirect()对于这份工作:

Servlets.facesRedirect(request, response, redirectURL);

另见:

关于html - 浏览器发起的重定向 GET 请求未成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16697768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com