有没有人知道如何在反向代理模式下告诉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捕手"功能,如果存在的话会很好,但到目前为止还没有在网上为如何做到这一点提供任何资金.任何的想法?
我必须计算图像加载时间.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会在第一次重定向时触发.所以我永远不会真正加载图像时间.
有一些解决方法吗?
谢谢
我们正在使用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) 我有一个陷入无限循环的Web应用程序,我不知道接下来要去哪里看.这是一个内部网站点,所以没有我可以分享的链接,但我已经列出了我能想到的许多细节.我将不胜感激任何想法或建议.任何人都有.
细节:
如果我打开我的网站,它指向Login.aspx并陷入302循环.如果我打开网站但指向register.aspx,Fiddler会将register.aspx显示为Login.aspx,当然会重定向到Login.aspx.
我做了什么:
我想确认一下我是否正确理解这一点.当我在Chrome地址栏中输入"google.com"时遇到严重的延迟问题,但在我在其他浏览器中执行相同操作时却没有.我还下载了Canary,并在那里遇到同样的问题.我认为其他浏览器可能会重写URL客户端,避免前两个301和302错误.似是而非?
"待定"是否意味着该请求尚未得到满足?并且"(来自缓存)"是否意味着浏览器正在我的PC上查找该文件?
为"google.com"请求返回301错误需要21秒,然后返回302秒并将最终重定向返回到完整网址.这是否意味着处理此类请求的服务器真的负担过重?
为什么这些图片需要很长时间才能获取?59秒,还在等待?

google-chrome latency http-status-code-301 http-status-code-302
我对 JAX-RS 和 RESTEasy 很陌生,有一件事我真的不明白。首先我来描述一下我们做了什么:
关于HTTP 状态代码的RFC,我理解 POST 方法不应该有自动重定向。我本以为会引发异常。相反,这个问题会被忽略,让客户端应用程序根本没有机会检测到它刚刚发出的调用没有到达它应该到达的地方。为什么会出现这种情况以及我该如何正确执行此操作?
我不相信像 RESTEasy 这样的库不允许正确处理这种情况,所以我确信我使用它是错误的。不幸的是,即使经过几个小时的谷歌搜索,我仍然没有找到我的问题的答案。我希望这里有人能启发我。
为了重现该问题并允许与其他 JAX-RS 实现进行比较,我将一个小型演示应用程序上传到了Github。它只需要 Maven 和 JDK 8 即可运行。
先感谢您,
马丁
目标:我正在尝试通过 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/foo的Location标头,标头已设置,但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) 当对 HTML 页面的请求响应 HTTP 302 Found(又名“临时重定向”)时,FireFox 会“就地”加载重定向页面,而不会将最初打开的 URL 保留U在“后退按钮历史记录”中。
一种流行的用途302(以及正确使用代码,我认为)似乎是重定向到一个/cookieAbsent页面,提醒用户他们的浏览器不“支持”(用户可能更可能禁用了)cookie。
这种浏览器行为的后果是,如果用户决定启用 cookie,重新加载当然只是重新加载(服务器无法可靠地将您发回,如果它愿意的话)/cookieAbsent这是不好的,并且后退按钮返回打开(无论是通过超链接还是键入)原始U. 这对我来说是有意义的301 Moved Permanently(又名“永久重定向”),但似乎不受欢迎302,尤其是像这样使用时。
如果我正在实现一个浏览器 - 或者,也许,希望报告现有浏览器中的错误或功能请求 - 这种行为是通用规范所要求的,还是仅仅由浏览器来做它认为合适的事情?
使用基于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) 我试图找出是否有人成功使用来自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