标签: http-status-code-302

反向代理模式Apache拦截或捕获来自后端服务器的302响应并在内部重定向,而不将302响应发送回客户端

有没有人知道如何在反向代理模式下告诉Apache拦截或捕获来自后端服务器的302(或30x)响应并在内部重定向而不向客户端发送30x响应?最终,响应被重定向到的后端服务器将无法从外部访问(或未在Apache conf中列出).


我的情况:
我有web_server_A和web_server_B正在侦听端口6666和7777.这些端口无法从外部访问,但可以从内部访问.
我最终可以更改web_server_A的行为,但不能更改web_server_B的行为.
Apache正在侦听端口80/443,可从外部访问,并充当反向代理,将发送到web_server_ {A,B} .example.com的请求发送到web_server_ {A,B}

客户端向Apache请求web_server_A.example.com/foo.Apache将请求代理到web_server_A,后者生成一些内容,然后将指向web_server_B.example.com/bar/secret_token的HTTP/302响应发送回Apache.Apache向客户端发回302响应,然后向Apache发送web_server_B.example.com/bar/secret_token的HTTP请求.Apache将请求代理到web_server_B,后者回复了一些内容(通常会发回一些大文件).


我的问题:
我不希望客户端知道url web_server_B.example.com/bar/secret_token,最终我不希望从外部访问web_server_B.

web_server_A可以向web_server_B发出请求,然后从web_server_B发回答案,而不发出302回复.但是,web_server_B的答案可能需要一些时间,可能会非常大,而web_server_A不应该在任何请求上花费太多时间(它无法处理大文件).


所以我想到了一个"302捕手"功能,如果存在的话会很好,但到目前为止还没有在网上为如何做到这一点提供任何资金.任何的想法?

apache redirect reverse-proxy http-status-code-302

6
推荐指数
1
解决办法
2456
查看次数

在非200响应的情况下,javascript图像onError

我必须计算图像加载时间.onLoadHandler对此负责.

<img onError="onErrorHandler(this);" onLoad="onLoadHandler(this);" alt="" border='0' width='1' height='1'   src='http://exmaple.com/02.jpg'/>
Run Code Online (Sandbox Code Playgroud)

如果图像是具有200个服务器响应的普通文件,则它工作正常.

但是合作伙伴提供了302个重定向链,并且onError会在第一次重定向时触发.所以我永远不会真正加载图像时间.

有一些解决方法吗?

谢谢

javascript handler onload onerror http-status-code-302

6
推荐指数
1
解决办法
1373
查看次数

如何在QtWebKit中获得第一个重定向(301或302)事件

我们正在使用QtWebKit 4.7并想知道帧加载何时进行重定向.

目前我们在QNetworkAccessManager的子类中计算传出请求,我们在其中覆盖createRequest.

这在大多数情况下都很好用,但是当第一个响应是301或302(重定向)时,它会在某处被吞噬.

我们只需要通过以下方式请求网址:

QNetworkRequest request(QUrl("http://www.twitter.com")); // 301 to twitter.com
frame->load(request);
Run Code Online (Sandbox Code Playgroud)

qt qtwebkit qwebkit http-status-code-302 qt4.7

6
推荐指数
2
解决办法
3895
查看次数

302无限循环

我有一个陷入无限循环的Web应用程序,我不知道接下来要去哪里看.这是一个内部网站点,所以没有我可以分享的链接,但我已经列出了我能想到的许多细节.我将不胜感激任何想法或建议.任何人都有.

细节:

  • IIS 7
  • .Net 4.0
  • Windows 2008
  • 默认文档是Login.aspx
  • 在app上没有设置HTTP重定向,在IIS中没有设置Login.aspx
  • Fiddler使用状态代码302显示Login.aspx并重定向到Login.aspx

如果我打开我的网站,它指向Login.aspx并陷入302循环.如果我打开网站但指向register.aspx,Fiddler会将register.aspx显示为Login.aspx,当然会重定向到Login.aspx.

我做了什么:

  • 从Visual Studio运行webapp - 一切正常
  • 检查web.config是否有重定向命令 - 没有
  • 检查IIS是否有重定向命令 - 没有
  • 看看Fiddler在循环中的另一个页面 - 没有,只​​有Login.aspx到Login.aspx
  • 检查Login.aspx是否有重定向命令 - 没有
  • 检查重定向命令后面的Login.aspx代码 - 没有
  • 使用服务器上的web.config在我的盒子上运行应用程序 - 一切正常
  • 检查Login.aspx是否有重定向命令 - 没有
  • 清除缓存 - 问题仍然存在
  • 重新发布 - 问题仍然存在
  • 重新发布和清除缓存 - 问题仍然存在
  • IIS中禁用默认文档

asp.net iis-7 infinite-loop http-status-code-302

6
推荐指数
2
解决办法
7732
查看次数

互联网延迟:在Chrome开发者工具网络标签中,PENDING和FROM CACHE的含义是什么

我想确认一下我是否正确理解这一点.当我在Chrome地址栏中输入"google.com"时遇到严重的延迟问题,但在我在其他浏览器中执行相同操作时却没有.我还下载了Canary,并在那里遇到同样的问题.我认为其他浏览器可能会重写URL客户端,避免前两个301和302错误.似是而非?

"待定"是否意味着该请求尚未得到满足?并且"(来自缓存)"是否意味着浏览器正在我的PC上查找该文件?

为"google.com"请求返回301错误需要21秒,然后返回302秒并将最终重定向返回到完整网址.这是否意味着处理此类请求的服务器真的负担过重?

为什么这些图片需要很长时间才能获取?59秒,还在等待?

Chrome开发者工具网络标签截屏

google-chrome latency http-status-code-301 http-status-code-302

6
推荐指数
1
解决办法
1140
查看次数

为什么 RESTEasy 会忽略 POST 方法的 HTTP 302 状态代码?

我对 JAX-RS 和 RESTEasy 很陌生,有一件事我真的不明白。首先我来描述一下我们做了什么:

  • 我们使用 JBoss AS 7.2(是的,就是那个旧版本)和 RESTEasy 2.3.5 进行机器对机器通信。
  • 我们编写了一项接受 POST 消息但不返回正文的服务。使用通过 void 方法映射到 Java 接口的 JAX-RS 注释。
  • 该服务应仅允许安全 (HTTPS) 通信,不允许 HTTP。为了防止意外使用 HTTP,我们将Transport-guarantee设置为CONFIDENTIAL。因此,每个 HTTP 请求都会导致带有状态代码 302 和 HTTPS 位置的响应。
  • 现在有人不小心配置了 HTTP URL 而不是 HTTPS。服务器回复了 302 状态代码和正确的位置。不幸的是,客户端既没有遵循重定向也没有引发异常。因此,它没有表明呼叫未接通

关于HTTP 状态代码的RFC,我理解 POST 方法不应该有自动重定向。我本以为会引发异常。相反,这个问题会被忽略,让客户端应用程序根本没有机会检测到它刚刚发出的调用没有到达它应该到达的地方。为什么会出现这种情况以及我该如何正确执行此操作

我不相信像 RESTEasy 这样的库不允许正确处理这种情况,所以我确信我使用它是错误的。不幸的是,即使经过几个小时的谷歌搜索,我仍然没有找到我的问题的答案。我希望这里有人能启发我。

为了重现该问题并允许与其他 JAX-RS 实现进行比较,我将一个小型演示应用程序上传到了Github。它只需要 Maven 和 JDK 8 即可运行。

先感谢您,

马丁

post jax-rs resteasy http-status-code-302

6
推荐指数
0
解决办法
944
查看次数

标题未设置 RewriteRule [R=302,L]

目标:我正在尝试通过 htaccess 设置两个标头:

X-Robots-Tag: noindex, nofollow
Location: http://example.com/foo
Run Code Online (Sandbox Code Playgroud)

PoC:在 PHP 中可以做到这一点,效果很好:

header( "X-Robots-Tag: noindex, nofollow", true );
header( "Location: " .  $url, 302 );
Run Code Online (Sandbox Code Playgroud)

问题:在我的.htaccess文件中,我有这个:

# Do not let robots index anything from /out/
RewriteCond %{REQUEST_URI} ^/?out/?
Header set X-Robots-Tag "noindex, nofollow"

...

# Redirect /out/example/ type links
RewriteRule ^/?out/example/(.*)$ "http://example.com/$1" [R=302,L]
Run Code Online (Sandbox Code Playgroud)

我确定在某处我没有看到一个简单的错误,但是如果我检查http://localhost/out/example/fooLocation标头,标头已设置,但X-Robots-Tag不是。

HTTP/1.1 302 Found
Date: Wed, 08 Jun 2016 23:59:18 GMT
Content-Type: text/html; charset=iso-8859-1
Transfer-Encoding: chunked
Connection: …
Run Code Online (Sandbox Code Playgroud)

apache .htaccess redirect http-headers http-status-code-302

6
推荐指数
1
解决办法
3033
查看次数

为什么浏览器不在后退按钮历史记录中保留状态 302 页面?

当对 HTML 页面的请求响应 HTTP 302 Found(又名“临时重定向”)时,FireFox 会“就地”加载重定向页面,而不会将最初打开的 URL 保留U在“后退按钮历史记录”中。

一种流行的用途302(以及正确使用代码,我认为)似乎是重定向到一个/cookieAbsent页面,提醒用户他们的浏览器不“支持”(用户可能更可能禁用了)cookie。

这种浏览器行为的后果是,如果用户决定启用 cookie,重新加载当然只是重新加载(服务器无法可靠地将您发回,如果它愿意的话/cookieAbsent这是不好的,并且后退按钮返回打开(无论是通过超链接还是键入)原始U. 这对我来说是有意义的301 Moved Permanently(又名“永久重定向”),但似乎不受欢迎302,尤其是像这样使用时。

如果我正在实现一个浏览器 - 或者,也许,希望报告现有浏览器中的错误或功能请求 - 这种行为是通用规范所要求的,还是仅仅由浏览器来做它认为合适的事情?

browser http-status-code-302

6
推荐指数
1
解决办法
4140
查看次数

具有302重定向和withCredentials = true的Chrome和CORS

使用基于Chromium的浏览器和包含302重定向的CORS请求时遇到问题。更具体地说,我在Chromium版本34-42(含)之间遇到麻烦;43和更高版本有效,并且似乎33和更早版本也适用(我在33到28之前还没有测试太多)。

我的XHR请求使用withCredentials = true,因此不允许Access-Control-Allow-Origin =“ *”;服务器必须使用Access-Control-Allow-Origin标头进行回复,该标头与传入请求的Origin标头相呼应。

在收到第一个302之后,Chromium 43和更高版本发送“ Origin:null”作为重定向请求的一部分,并接受“ Access-Control-Allow-Origin:null”作为响应(Firefox也是如此)。

Chromium系列34-42都将所有请求的主机名发送为Origin,此后的几个问题表明, 在Access-Control-Allow-Origin设置为“ *” 时才支持CORS重定向,并且“原始” XHR不得将allow-credentials设置为true”,例如:

我希望这是一个误解,作为应用程序开发人员,我可以在客户端和/或服务器上执行某些操作,以强制那些版本不取消重定向,否则,将无法解决此问题。

版本33及更早版本为每个请求发送了完整的主机名,并且完整的往返操作有效。

对于一种可能解决办法我已经从事实,我其实也源于实验并不需要withCredentials =真正的跨域请求,我只需要它重定向回原始主机交换基于cookie的身份验证一个access_token,但是除非遵循原始302跨域请求发送,否则我无法找到一种方法来使客户端在向其自身发送302时发送cookie。

为了说明这一点,以下是chrome:// net-internals /#events日志中摘录的有关使用Chrome 43的成功请求的摘录:

    [img src]
    HTTP_TRANSACTION_SEND_REQUEST_HEADERS
    --> GET /media/uploads/bucket/a746a337-5c20-46a6-a1fc-701e772970fd-bWFpbi1uLW4tMC0wLTAtNDUwLTQ0NQ%3D%3D.jpg?timestamp=1437075435614 HTTP/1.1
        Host: media-qa.example.com
        Origin: https://qa-app.example.com
        User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36
        Referer: https://qa-app.example.com/media/photos/
        Cookie: [1568 bytes were stripped]
    HTTP_TRANSACTION_READ_RESPONSE_HEADERS
    --> HTTP/1.1 302 FOUND
        Access-Control-Allow-Credentials: true
        Access-Control-Allow-Headers: X-HTTP-Method-Override, Content-Type, X-Requested-With
        Access-Control-Allow-Origin: https://qa-app.example.com
        Content-Type: text/html; charset=utf-8
        Location: https://qa-app.example.com/oauth/authorize/?request_uri=https%3A//media-qa.example.com/media/uploads/bucket/a746a337-5c20-46a6-a1fc-701e772970fd-bWFpbi1uLW4tMC0wLTAtNDUwLTQ0NQ%3D%3D.jpg%3Ftimestamp%3D1437075435614

    [get cross-domain access token] …
Run Code Online (Sandbox Code Playgroud)

google-chrome xmlhttprequest cors http-status-code-302

5
推荐指数
0
解决办法
1141
查看次数

使用UrlRewriteFilter让Tomcat从http返回301重定向到https

我试图找出是否有人成功使用来自http://tuckey.org/urlrewrite/的UrlRewriteFilter可用于在Apache Tomcat中从http到https执行301永久重定向但我似乎无处可去快速.许多人都问同样的问题,AFAICS都没有被回答如果我问错地方了,那么也许有人会热情地向"重定向"我到正确的地方.如果不可能那么也许有人可以这样说.

谢谢.

    apache-tomcat-7.0.42
    jdk1.8.0_77
    CentOS Linux 7.2.1511
    urlrewritefilter-4.0.3.jar
Run Code Online (Sandbox Code Playgroud)

tomcat docs推荐的"标准"配置如下

    web.xml

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Secure URLs</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

    server.xml

    <Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="443" />

    <Connector port="443" maxThreads="150" scheme="https" secure="true"
           SSLEnabled="true" keystoreFile="/opt/keys/tomcat.keystore" 
           keystorePass="*********" clientAuth="false" keyAlias="tomcat" sslProtocol="TLS" />
Run Code Online (Sandbox Code Playgroud)

在浏览器中输入localhost会导致重定向到https,使用curl检查这一点我们可以看到这是按预期工作但我们得到302临时重定向

    root@sandbox:/tmp# curl -D /tmp/headers.txt -s  http://localhost

    HTTP/1.1 302 Found
    Server: Apache-Coyote/1.1
    Cache-Control: private
    Expires: Thu, 01 Jan 1970 01:00:00 GMT
    Location: https://localhost/
    Content-Length: 0
    Date: Fri, 29 Apr 2016 18:24:47 GMT
Run Code Online (Sandbox Code Playgroud)

然而,对于喜欢301永久性的谷歌而言,这是不可接受的

是否可以使用UrlRewriteFilter来实现这一目的

以下规则导致302,即使我正在使用type ="permanent-redirect",其他所有内容保持不变

    <rule> …
Run Code Online (Sandbox Code Playgroud)

https http-status-code-301 http-status-code-302 tuckey-urlrewrite-filter

5
推荐指数
0
解决办法
1333
查看次数