【问题标题】:Client-side detection of HTTP request method客户端检测HTTP请求方法
【发布时间】:2010-09-12 09:10:20
【问题描述】:

是否可以通过 JavaScript 检测页面的 HTTP 请求方法(例如 GET 或 POST)?如果有,怎么做?

【问题讨论】:

    标签: javascript http-headers


    【解决方案1】:

    一句话——没有

    【讨论】:

    • 嗯,有多种方法可以解决这个特定的情况,“NO”是不正确的。有可能,取决于你是否愿意做相关的工作,你基本上必须创建一个 DOM onload/mutation 触发器和一个 XHR 包装器 - 在两种情况下都会触发相同的处理程序.. 然后对于 CSS,你可以使用您的 onload/mutation 触发器扫描为 url() 引用加载的 CSS - 并将这些也发送到您的处理程序;看,可能。
    【解决方案2】:

    我不相信。如果您需要此信息,我建议您包含在服务器上生成的 <meta> 元素,您可以使用 JavaScript 进行检查。

    以 PHP 为例:

    <meta id="request-method" name="request-method" content="<?php echo htmlentities($_SERVER['REQUEST_METHOD']); ?>">
    <script type="text/javascript">
        alert(document.getElementById("request-method").content);
    </script>
    

    【讨论】:

    • .NET Razor 变种:&lt;meta id="request-method" name="request-method" content="@Request.HttpMethod"&gt;
    【解决方案3】:

    您可以查看页面的referrer:

    document.referrer == document.URL
    

    如果是同一个页面,用户提交表单的可能性很大。

    当然需要

    • 你没有从一个页面链接到它本身(无论如何这是可访问性所必需的)
    • 表单提交到它所在的页面
    • 用户没有禁用引荐来源网址

    【讨论】:

    • 整个问题与 xhr 无关
    【解决方案4】:

    如果您需要此功能,请让服务器检测所使用的方法,然后修改 DOM 中的某些内容,以便稍后读出。

    【讨论】:

      【解决方案5】:

      对于普通的 post/get,你不能这样做,但是如果你使用 xmlhttp 调用并使用 getResponseHeader,你可以得到这个信息

      【讨论】:

        【解决方案6】:

        没有。

        JS 是一种客户端编程语言,这意味着一切都是客户端。但是,您可以使用 PHP 或任何服务器端语言来执行此操作。

        如果您要使用 php,以下是一个示例:

        <?php 
          $foo = $_POST["fooRequest"]; # The actual response.
        
          # do something with the foo variable like:
          # echo "Response got: " + $foo;
        ?>
        

        然后添加一些 HTML:

         <form action="test.php" method="post">
         <input type="text" class="foo" name="fooRequest" placeholder="Testing requests" />
         <button type="submit" name="submitButton">Send</button>
         </form>
        

        上面的代码发送一个 POST 请求,然后在 PHP 中我们得到 'fooRequest'。但是,如果您要使用 JS,那是不可能的就像我说的它是一种客户端编程语言

        我知道已经有了答案,但我只是想再解释一下。

        【讨论】:

          【解决方案7】:

          试试这个

          function getURIQueryString(){
              var params = {};
              var qstring = window.location.toString().substring(window.location.toString().indexOf("?") + 1);
              var regex = /([^&=]+)=([^&=]+)/g;
              var m;
              while (m = regex.exec(qstring)){
                  params[decodeURIComponent(m[1])] = decodeURIComponent(m[2])       
              }
              return params
          }
          

          它通常有效。比如获取一个名为test的get参数。用这个

          getURIQueryString().test
          

          但是不可能得到post请求

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-22
            • 2020-02-25
            • 2019-07-19
            相关资源
            最近更新 更多