当前位置: 首页 > 面试题库 >

GET请求重定向由浏览器启动,但未成功

司空俊悟
2023-03-14
问题内容

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

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

我在JSF服务器端使用。服务器根本没有收到启动的GET请求。但是由浏览器根据服务器的要求启动。我猜问题只是在客户端

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

请求重定向标头:

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的JSF
ajax请求发送重定向HttpServletResponse#sendRedirect()。这是不对的。该XMLHttpRequest不会把302响应作为一个新的window.location,但只是作为一个新的Ajax请求。但是,当您返回一个完整的普通HTML页面作为ajax响应,而不是一个预定义的XML文档(其中包含要更新HTML部分的说明)时,JSF
ajax引擎不知道如何处理重定向的ajax请求的响应。您最终会遇到JS错误(您是否在JS控制台中看到了它?),如果未jsf.ajax.onError()配置处理程序,则没有任何形式的视觉反馈。

为了指示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);


 类似资料:
  • 当我将请求发送到https://DOMAIN:443/path它在我尝试过的每个web浏览器中都能正常工作。但是当涉及到旋度(和wget)时,我得到了一个错误。我已经重新编译了openssl和curl(最新版本),没有任何更改。 curl-vvhttps://DOMAIN:443/path 输出 *TCP_NODELAY设置 *连接到DOMAIN(IPADDRESS)端口443(#0)*ALPN,

  • 我试图点击一个postendpoint,但它给出了错误302,当我在同一台服务器上尝试另一个get Url时,它给出了200。然后,我使用laxrirectstrategy()重定向了post请求。post请求正在重定向到get请求(只有同一个endpoint的方法名是get和post),它没有从post方法获得响应。有人能告诉我如何使用apahce httpClient 4.5将post请求重定

  • 我一直试图在浏览器localhost:8080上运行它,但它说“站点无法到达”,尽管它说Tomcat在终端中运行 我通过从网站下载二进制版本安装了它。 这是加泰罗尼亚,出去 这是grep tomcat 根38084 0.1 1.0 6062688 80312 s000 S 8:54AM 0:15.59/library/java/javavirtualmachines/jdk1.8.0_91.jdk

  • 以下是Chrome使用的头(从DevTools获得): 接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8 接受编码:gzip、deflate、sdch 接受语言:en-us,en;q=0.8 授权:协商TLRMTVNTUAADAAAAAAAAAYAIOAAABKAWQBOGAAAAAWADABYA

  • null 也尝试了配置跳过SSL证书验证,输出相同: TrustStrategy acceptingTrustStrategy=(X509Certificate[]chain,String authType)-> SSLContext SSLContext=org.apache.http.ssl.SSLContexts.custom().LoadTrustMaterial(null,accepti

  • 我已经开始学习Selenium WebDriver。我注意到的问题,如给定的网址不采取后火狐浏览器推出。请帮忙解决问题 WebDriver版本:2.53 Firefox:48.0 我看到下面的错误 组织。openqa。硒。火狐。NotConnectedException:45000毫秒后无法连接到端口7055上的主机127.0.0.1。Firefox控制台输出:,“syncGUID”:“0Sec7