【问题标题】:Can I pass custom data in the HTTP header?我可以在 HTTP 标头中传递自定义数据吗?
【发布时间】:2010-10-08 11:04:46
【问题描述】:

我有一大堆网络服务,每个服务都有几个网络方法。这些服务的消费者多种多样。我想用一个额外的可选参数(Int64 或 Int32)来扩充这些 Web 方法中的每一个,但是使用这个额外的(可选参数)添加新方法需要做很多工作,并且让客户端使用新方法将更加耗时.

所以我想知道我是否可以允许想要利用此参数提供的新功能的客户端可以通过 HTTP 标头或其他方式传递此 Int。

所以第一个问题是我可以在 HTTP 标头中传递一个 int 吗?如果是这样,如何在 C#/ASP.NET 中做到这一点?

否则,您对解决这个问题有什么其他建议?

【问题讨论】:

    标签: http-headers


    【解决方案1】:

    你可以,但你必须定义一个 Header,然后设置它的值。就像在HttpWebRequest 中一样,您可以添加任何标题,只要它不是保留的标题之一。

    【讨论】:

      【解决方案2】:

      它有点不正统,我相信一些纯粹主义者会对此想法感到不安(标头应仅用于消息的传输,并且不应包含消息的语义)。

      实际上它是可行的,但您要确保您的所有客户都可以添加这些标头。如果您的客户使用工具来调用 Web 方法,而不是自己生成 HTTP 请求(我希望是这种情况),那么这很有可能是一个问题。

      为什么添加这些额外的方法重载如此困难?

      【讨论】:

      • 是的,它对 WS-* 来说是非正统的,但我认为 RESTful 类型的人(RESTafarians?)会很酷;)
      • 我相当确定 RESTful 类型会期望输入参数位于请求路径或请求正文中。
      • 由于移动网络,我一直被这个问题困扰。在一项工作中,我们对自定义标头进行了一些 hmac'ing 以验证另一端的数据。在一些英国网络上,他们的代理进行了某种标题剥离/重建,在此期间从我们的标题中删除了额外的空间。不是解决那个问题的好时机。
      【解决方案3】:

      请注意,虽然可以在 ASP.NET 中使用自定义标头,但并不总是可以在 ASP.NET 中生成自定义标头。只有在运行 ASP.NET 集成模式(即 IIS 7.0)时才能执行此操作。

      【讨论】:

        【解决方案4】:

        您可以,但这首先违背了使用 Web 服务的全部目的。就像科普书中每个公式减少一半受众的说法一样,每一个增加界面复杂度的快速破解都意味着未来会遇到很多麻烦。

        【讨论】:

          【解决方案5】:

          是的,它是允许的 - 但请注意,它可能会切断使用代理的能力,有时还会切断支持 http 的防火墙(它们倾向于检查和重写标头)。

          【讨论】:

          • 虽然代理不是转发实际的标头吗?
          【解决方案6】:
          Request.Headers.Add("headername", "headervalue");
          Response.Headers.Add("headername", "headervalue");
          

          【讨论】:

            【解决方案7】:

            我曾经使用过这个概念来处理 Intranet Web 应用程序中 ajax 调用的注销重定向(与 Web 服务无关)。

            这是我手头最好的解决方案,但正如其他人所说,这取决于您是否可以将约束推送给客户端,以便为您的目的处理这些标头。

            默认情况下绝对不是你想做的事情。

            【讨论】:

              【解决方案8】:

              来自 RFC!

              确实可以,现在新的RFC Standards支持了,

              当您想从您的 API 获取但仍想要 GET 纯天然(GET 中没有正文)时,这确实很有帮助

              如需简化阅读,请查看Mozilla Explanation

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2014-11-21
                • 2018-10-22
                • 1970-01-01
                • 2012-11-17
                • 1970-01-01
                • 2012-01-09
                • 2016-08-14
                相关资源
                最近更新 更多