Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 在MVC3中,在https下运行每个操作是否有缺点?_Asp.net Mvc 3_Https - Fatal编程技术网

Asp.net mvc 3 在MVC3中,在https下运行每个操作是否有缺点?

Asp.net mvc 3 在MVC3中,在https下运行每个操作是否有缺点?,asp.net-mvc-3,https,Asp.net Mvc 3,Https,我有一个网站必须是安全的-在家庭控制器上有[RequireHttps]属性有缺点吗?Description 当然,如果您的证书过期,您的用户将收到警告。 但是,如果您想将Https属性添加到整个站点,有两种方法可以做到这一点 在应用程序\u BeginRequest方法中重定向 使用条件过滤器。您可以将[Https]属性添加到每个操作方法、特定控制器或任何其他条件 样品 在应用程序\u BeginRequest方法中重定向 protected void Application_BeginRequ

我有一个网站必须是安全的-在家庭控制器上有[RequireHttps]属性有缺点吗?

Description 当然,如果您的证书过期,您的用户将收到警告。 但是,如果您想将Https属性添加到整个站点,有两种方法可以做到这一点

  • 应用程序\u BeginRequest
    方法中重定向
  • 使用
    条件过滤器
    。您可以将
    [Https]
    属性添加到每个操作方法、特定控制器或任何其他条件
  • 样品
  • 应用程序\u BeginRequest
    方法中重定向

    protected void Application_BeginRequest(Object sender, EventArgs e)
    {
        if ( !Request.IsSecureConnection)
        {
             string path = string.Format("https{0}", Request.Url.AbsoluteUri.Substring(4));
             Response.Redirect(path);
        }
     }
    
  • 使用
    条件过滤器

    • 将此类添加到项目中

      public class ConditionalFilterProvider : IFilterProvider
      {
          private readonly
              IEnumerable<Func<ControllerContext, ActionDescriptor, object>> _conditions;
      
          public ConditionalFilterProvider(
              IEnumerable<Func<ControllerContext, ActionDescriptor, object>> conditions)
          {
      
              _conditions = conditions;
          }
      
          public IEnumerable<Filter> GetFilters(
              ControllerContext controllerContext,
              ActionDescriptor actionDescriptor)
          {
              return from condition in _conditions
                      select condition(controllerContext, actionDescriptor) into filter
                      where filter != null
                      select new Filter(filter, FilterScope.Global, null);
          }
      }
      
  • 更多信息
    要回答您的具体问题,如果您在HomeController上需要Https,我只能想到三个缺点

  • 每个请求的服务器CPU没有显著增加。 (如果此应用程序服务于数百万/数十亿用户,在特定时间内这可能不是无关紧要的)

  • 每个请求的网络活动没有显著增加。 (这也适用于特定时间内的请求数量)

  • 如果您的证书过期,用户将对您的主页产生负面体验


  • 是的,有一个缺点

    其中一些原因是: 页面不能缓存在共享缓存中, 必须在浏览器和服务器两侧进行加密和描述, 必须在服务器端使用受信任的证书,以避免连接不安全(证书不便宜)


    但是,为了拥有安全的站点,必须支付性能成本(这是非常低的性能成本),因此如果需要,请使用HTTPS,对于一些重要的数据交换,请删除HTTP并在您的网站上仅启用HTTPS绑定

    这与MVC有什么关系?HTTPS使您的通信更加安全,但无论您使用哪种框架为页面提供服务,通信速度都会变慢。这与MVC无关吗?有多少其他框架利用了属性[RequireHttps]?asp.net mvc3的具体运行速度要慢多少?请看您选择的答案。这就是问题的答案:“在所有主页请求上使用HTTPS通信有哪些不利方面?”。没有涉及ASP.NET MVC。@Qua:我认为您可能应该查阅websters对上下文的定义,因为这个概念绝对不在您的掌握范围之内。我不担心整个网站都被https包围,我只是好奇它是否有缺点。检查我的最新答案。谢谢你提供的详细列表Erik。这只会被少数人使用,所以我认为这些增加不会对服务器的整体性能造成很大影响。谢谢@buda,该站点已经有了证书,并且没有进行整页缓存。我主要关心的是性能,所以很高兴听到运行https不会给服务器带来太多负担。这将不是一个高流量的网站。
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        IEnumerable<Func<ControllerContext, ActionDescriptor, object>> conditions =
            new Func<ControllerContext, ActionDescriptor, object>[] { 
            (c, a) => new RequireHttpsAttribute()
        };
    
        var provider = new ConditionalFilterProvider(conditions);
        FilterProviders.Providers.Add(provider);
    
        filters.Add(new HandleErrorAttribute());
    }