【问题标题】:Programmatic way to see if client browser supports PUT / DELETE methods以编程方式查看客户端浏览器是否支持 PUT / DELETE 方法
【发布时间】:2011-10-01 11:06:38
【问题描述】:

有没有办法查看客户端浏览器是否支持用于 JQuery 和 AJAX 请求的 PUT 或 SEARCH 方法?

我有以下代码,在 Chromium 和 Chrome 中,PUT 没有出现在我的服务器端...我想知道,如果浏览器不支持 PUT,如何更改它到一个 POST 请求...为了向后兼容

function do_data(url, action, query) {
try {
    if ($.browser.msie) {
        var xdr = new XDomainRequest();
        if (query !== null) {
            console.log(query);
            xdr.open(action, url + '?' + $.param(query));
        } else {
            xdr.open(action, url);
        }
        xdr.onload = function() {
            var data = $.parseJSON(this.responseText);
            show_data(data);
        };
        xdr.send();
    } else {
        if (query !== null) {
            $.ajax({
                url: url,
                data: query,
                type: action,
                success: function(data) {
                    console.log(data);
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    console.log(textStatus);
                }
            });
        } else {
            console.log(query);
            $.ajax({
                url: url,
                type: action,
                success: function(msg) {
                    console.log(data);
                }
            });
        }
    }
} catch (e) {}
}

使用上面的代码,如果我在 Chromium / Chrome 上使用“PUT”,error: function(jqXHR, textStatus, errorThrown) 将简单地打印出error

在服务器端,我看到 REQUEST_METHOD: OPTIONS 而不是 PUT。

只是为了确认一下,对于遇到这种情况的任何人......没有编程方式

【问题讨论】:

  • 您总是可以设置一个简单的“HTTP echo”服务,它会以 200 OK 响应每个请求,并在正文中返回完整的请求(标​​头和所有)。

标签: jquery ajax rest


【解决方案1】:

在大多数浏览器中处理缺少 PUT 和 DELETE 支持的常用方法是使用 HTTP POST 隧道。基本上,您使用 POST 并将真正的 VERB 添加到 X-HTTP-Method-Override HTTP 标头。在您检查后者的服务上,如果没有找到,请使用正常的 HTTP 方法。

请参阅here 了解更多信息。

【讨论】:

  • 但这不允许我以编程方式查看客户端浏览器是否支持 PUT 或不..
  • 使用这种技术你不必。 Afaik 无法检查对 PUT 和 DELETE 的支持,即使可以,您仍然需要以这种方式进行配置。
  • 谢谢...这让我明白了这一点:stackoverflow.com/questions/1813156/…
  • 问题的另一面是服务器位。并非所有人都能识别 X-HTTP-Method-Override 标头,并且有些(例如 WCF 数据服务)使用不同的标头,例如 X-HTTP-Method
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多