此处将为大家介绍关于php–重定向HTTP表单帖子的详细内容,并且为您解答有关php重定向页面的相关问题,此外,我们还将为您介绍关于asp.netcore中负载均衡场景下http重定向https的问题
此处将为大家介绍关于php – 重定向HTTP表单帖子的详细内容,并且为您解答有关php重定向页面的相关问题,此外,我们还将为您介绍关于asp.net core中负载均衡场景下http重定向https的问题、asp.net-mvc – 从Ajax表单帖子中重定向、asp.net-mvc – 如何重定向HTTP到HTTPS在MVC应用程序(IIS7.5)、centos – 如何在同一个httpd上将HTTP重定向到HTTPS?的有用信息。
本文目录一览:- php – 重定向HTTP表单帖子(php重定向页面)
- asp.net core中负载均衡场景下http重定向https的问题
- asp.net-mvc – 从Ajax表单帖子中重定向
- asp.net-mvc – 如何重定向HTTP到HTTPS在MVC应用程序(IIS7.5)
- centos – 如何在同一个httpd上将HTTP重定向到HTTPS?
php – 重定向HTTP表单帖子(php重定向页面)
我在公共网站上有一个表单需要将数据发布到防火墙后面的Apache服务器上.我不想通过互联网直接访问此虚拟主机.
目前这就是我正在做的事情:我的DMZ中有一个IIS服务器,这个IIS服务器是唯一允许通过防火墙访问apache服务器的IP服务器.作为临时解决方案,我使用“应用程序请求路由”设置IIS,通过IIS将Apache框呈现给Internet.
*我想做什么:*有一些方法来捕获然后传递表单,而不必将Apache框呈现给互联网.这里的诀窍是POST将来自互联网上的任何地方,被IIS服务器抓取,然后从IIS服务器中继到apache框.我已经研究过使用PHP / cURL这样做,但我不确定是否
使用这样的东西可以做到这一点:
<?PHP $todo = ""; while (list($name,$value) = each($HTTP_POST_VARS)) { $todo.=$name."=".$value."&"; } $ch = curl_init('http://mylanserver/capture.PHP'); curl_setopt ($ch,CURLOPT_POST,1); curl_setopt ($ch,CURLOPT_POSTFIELDS,$todo); curl_exec ($ch); curl_close ($ch); ?>
有人能指出我正确的方向吗?谢谢.
$postParams = file_get_contents("PHP://input"); $ch = curl_init('http://mysite/capture.PHP'); curl_setopt ($ch,$postParams); curl_exec ($ch); curl_close ($ch);
然后我需要将客户端重定向到“谢谢”页面,我的后端程序正在发送这些数据,但我无法使cURL与它一起工作,我通过执行标头刷新并将值设置为1.像这样:
header("refresh:1;url=http://mythankyoupage");
谢谢您的帮助!
asp.net core中负载均衡场景下http重定向https的问题
上周欣喜地发现,微软官方终于针对 asp.net core 在使用负载均衡的情况下从 http 强制重定向至 https 的问题提供了解决方法。
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedProto
});var options = new RewriteOptions()
.AddRedirectToHttpsPermanent();
app.UseRewriter(options);
但实际使用之后,欣喜变成了失望 —— 微软对这个问题的认识角度和我们不一样,造成这个方法对我们不适用,不得不继续使用我们的土方法。
为什么会这样?请看下面的分解。
AddRedirectToHttpsPermanent 早就在 BasicMiddleware 的 RedirectToHttpsRule 中实现了,它的逻辑很简单 —— 判断当前请求是否是https,如果不是就进行重定向。
if (!context.HttpContext.Request.IsHttps)
{ //...}
这个直接了当的判断在使用负载均衡的场景下不仅不会发挥应有的作用,而且会产生致命的副作用 —— 让请求进入重定向死循环(ERR_TOO_MANY_REDIRECTS)。因为不管客户端的请求是 http 还是 https ,负载均衡与后端服务器之间始终是 http(当然你可以用https,但那是吃饱了撑着还浪费粮食)。如果负载均衡不额外提供这个信息,在后端服务器的眼里始终只有 http 没有 https ,http 重定向 https 根本无法实现。
从负载均衡的角度,为了解决这个问题,通常会通过一个另外的专用的请求头抓发这个信息,它的名字叫"X-Forwarded-Proto"。
从 asp.net core 的角度,要解决这个问题,需要弥补 Request.IsHttps 与 X-Forwarded-Proto 之间的鸿沟。于是微软实现了上面的 app.UseForwardedHeaders() ,实际是由 ForwardedHeadersMiddleware 完成这个任务 —— 根据 X-Forwarded-Proto 设置 Scheme(Request.IsHttps 就是基于 Scheme 进行判断的)。
if (checkProto && i < forwardedProto.Length)
{ set.Scheme = forwardedProto[forwardedProto.Length - i - 1];
}
到此为止,微软完美地解决了这个问题,RedirectToHttpsRule 不用修改1行代码。
但是在实际使用时,我们发现一个大问题,大到我们必须弃用这个看似完美的解决方法。
微软解决 http to https 问题的思路是这样:只要请求不是 https 的,就强制跳转到 https(这个没问题),其他一概不管,不管这个请求是不是来自负载均衡转发的(这个不够贴心)。
而我们要解决的问题是:只有在负载均衡转发的原始请求是 http 的情况下,才强制跳转至 https 。比如在服务器本机访问,比如来自其他docker容器的访问,如果这也跳转,那每台服务器(或者docker容器)都要部署https证书,多麻烦。
一个是只要不是 https ,就跳转;一个是只有是转发的 http ,才跳转。 就是因为这个对问题理解的差异,我们不得不放弃采用微软的官方解决方法,继续使用我们不太优雅的土方法。
RedirectToProxiedHttpsRule
public class RedirectToProxiedHttpsRule : RedirectToHttpsRule
{
public RedirectToProxiedHttpsRule()
{
base.StatusCode = StatusCodes.Status301MovedPermanently;
base.SSLPort = null;
}
public override void ApplyRule(RewriteContext context)
{
var key = "X-Forwarded-Proto";
var request = context.HttpContext.Request;
if (request.Headers.ContainsKey(key))
{
if (request.Headers[key].FirstOrDefault() == "http")
{
base.ApplyRule(context);
}
}
}
}
RewriteOptionsExtensions
public static class RewriteOptionsExtensions
{
public static RewriteOptions AddRedirectForwardedHttpToHttps(this RewriteOptions options)
{
options.Rules.Add(new RedirectToProxiedHttpsRule());
return options;
}
}
在 Startup 中使用
var options = new RewriteOptions()
.AddRedirectForwardedHttpToHttps();
app.UseRewriter(options);
原文地址:http://www.cnblogs.com/dudu/p/7044923.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
本文分享自微信公众号 - dotNET跨平台(opendotnet)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
asp.net-mvc – 从Ajax表单帖子中重定向
解决方法
此外,我似乎记得,如果你返回一个JavaScriptResult,它将执行它,无论如何调用AJAX.你可能想尝试类似的东西:
return JavaScript( "window.top.location.href ='" + Url.Action( "Action" ) + "';" );
asp.net-mvc – 如何重定向HTTP到HTTPS在MVC应用程序(IIS7.5)
<system.webServer> <rewrite> <rules> <rule name="HTTP to HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> </conditions> <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" /> </rule> </rules> </rewrite> </system.webServer>
解决方法
Global.asax.cs
protected void Application_BeginRequest(){ if (!Context.Request.IsSecureConnection) Response.Redirect(Context.Request.Url.ToString().Replace("http:","https:")); }
或者,您可以向操作过滤器添加相同的代码:
public class SSLFilter : ActionFilterattribute { public override void OnActionExecuting(ActionExecutingContext filterContext){ if (!filterContext.HttpContext.Request.IsSecureConnection){ var url = filterContext.HttpContext.Request.Url.ToString().Replace("http:","https:"); filterContext.Result = new RedirectResult(url); } } }
centos – 如何在同一个httpd上将HTTP重定向到HTTPS?
> CentOS 5.4(32位)
>安装Apache httpd(服务器版本:Apache / 2.2.11(Unix))
> mod_rewrite已经出现
问题:如何将不使用VirtualHost定义的简单http://site.com重定向到https://site.com?
PS:试图在后来的SF中找到答案,但找不到好的解决方案.
谢谢.
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
关于php – 重定向HTTP表单帖子和php重定向页面的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于asp.net core中负载均衡场景下http重定向https的问题、asp.net-mvc – 从Ajax表单帖子中重定向、asp.net-mvc – 如何重定向HTTP到HTTPS在MVC应用程序(IIS7.5)、centos – 如何在同一个httpd上将HTTP重定向到HTTPS?等相关内容,可以在本站寻找。
本文标签: