asp.net 无法获取客户端请求的真实协议https

问题:

a) 客户端请求的是https,但服务端Request.Url获取的却是http;

b) 负载均衡连接协议服务端与客户端协议不一致。

有时候我们需要获取或拼接连接,但是可能会出现客户端使用https请求但我们获取的确是http的情况,这个时就无法访问拼接出来的http连接。

这通常是由于服务器使用负载均衡造成客户请求使用的协议与服务端接收的协议不一致。

解决办法:

通过判断Request.ServerVariable["SERVER_PROTOCOL"] 是否等于HTTP/1.0来确定客户端真实请求的协议。

string appUrl = Page.Request.Url.AbsoluteUri;
if (Page.Request.ServerVariables["SERVER_PROTOCOL"] == "HTTP/1.0" && appUrl.StartsWith("http:", StringComparison.OrdinalIgnoreCase))
   appUrl = "https:" + appUrl.Substring(5);
时间: 2024-10-09 07:00:23

asp.net 无法获取客户端请求的真实协议https的相关文章

再论 ASP.NET 中获取客户端IP地址

说到IP获取无非是我们常见的以下几种方式,但是具体获取的值具体区别在哪?网上不乏相关文章,说的也是很详细,但是真正使用起来,还有很多不太对的地方.IP在不同系统中,应用相当广泛,常见的日志记录.广告分区域投放等. 1: HttpContext.Current.Request.ServerVariables["HTTP_VIA"]; 2: HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"

controller获取客户端请求数据

在学习SpringMVC之前,客户端的请求数据一般是靠request的getParameter方法获取,获取到的数据类型为String类型,需要强制转换为需要的数据类型. 在controller中也可以用这种方式获取客户端数据. //浏览器访问路径为http://127.0.0.1:8001/web02/request?name=name @RequestMapping(path = "/request", method = RequestMethod.GET) public Mode

阿里云X-Forwarded-For 发现tomcat记录的日志全部来自于SLB转发的IP地址,不能获取到请求的真实IP。

1.背景:阿里云的SLB的负载均衡,在tomcat中获取不到真实IP,而是阿里的内网IP,SLB中俩台或者3台本身是局域网,这里是SLB原理,可以看看,没怎么看懂,呵呵,要细细读下. 2.需要开启tomcat的X-Forwarded-For,在tomcat/conf/server.xml中有一个如下的AccessLogValve 日志纪录功能,当配置中的pattern=common时,对应的日志是如下,无论正常请求和非法请求都会记录. <Valve className="org.apach

获取http请求的真实IP地址

/** * 获取http请求的真实IP地址 * @param request * @return */ // cjianquan 2016/8/2 public static String getIPAddr(HttpServletRequest request){ if (request == null) return null; String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.length

java获取客户端请求ip地址

public static String getIpAddr(HttpServletRequest request) { if (null == request) { return null; } String proxs[] = { "X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWAR

获取HttpServletRequest请求信息,HTTP协议信息

获取HttpServletRequest请求信息,HTTP协议信息 经常用到,简单记录下- /** * HttpServletRequest请求参数获取测试 * @author Niu on 2017年7月17日 下午2:45:01 */ @WebServlet("/dispense") public class DispenseServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest

ASP.NET Core获取客户端IP地址

1.在ConfigureServices注入IHttpContextAccessor // ASP.NET Core 2.1的注入方式 //services.AddHttpContextAccessor(); //services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>(); // 注入 services.AddSingleton<IHttpContextAccessor, HttpContextAcc

阿里云X-Forwarded-For 发现tomcat记录的日志所有来自于SLB转发的IP地址,不能获取到请求的真实IP。

1.背景:阿里云的SLB的负载均衡,在tomcat中获取不到真实IP,而是阿里的内网IP,SLB中俩台或者3台本身是局域网,这里是SLB原理,能够看看.没怎么看懂.呵呵,要细细读下. 2.须要开启tomcat的X-Forwarded-For,在tomcat/conf/server.xml中有一个例如以下的AccessLogValve 日志纪录功能.当配置中的pattern=common时.相应的日志是例如以下,不管正常请求和非法请求都会记录. <Valve className="org.a

获取本地请求的真实IP地址

1 /** 2 * 自定义访问对象工具类 3 * 4 * 获取对象的IP地址等信息 5 * 6 */ 7 public class CusAccessObjectUtil { 8 9 /** 10 * 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址, 11 * 参考文章: http://developer.51cto.com/art/201111/305181.htm 12 * 13 * 可是,如果通过了多级反向代