HTTP 补丁 XmlHttpRequest 支持

Posted

技术标签:

【中文标题】HTTP 补丁 XmlHttpRequest 支持【英文标题】:HTTP Patch XmlHttpRequest support 【发布时间】:2012-07-02 13:38:29 【问题描述】:

我正在开发一些待办事项应用程序,并希望使用 HTTP 方法 PATCH 来添加和删除待办事项,因为这在语义上比 PUT 更好。

在后端我使用的是 express.js (node.js) 和前端的主干.js(它使用 jQuery 进行 ajax)。

我已经尝试过它是否真的在我的本地开发套件(Archlinux、Chromium 20、node.js 0.8、express 2.X)的后端和前端工作,并且它工作:

app.js

app.patch('/todo/:id', function(req, res)
    console.log('patch successfull');

Chromium 网络控制台

$.ajax( 
    url: '/messages/4ff13720f00e2e2c4b000006',
    type: 'PATCH',
    data:  body: 'that is a patched message'  
);

提到了请求,并且在可能的情况下还提到了数据库操作,没有例外。

我现在想知道其他浏览器如何支持补丁方法。我用谷歌查了一下,但是很难找到,因为 PATCH 有多种含义...

【问题讨论】:

“多重含义”包括“浏览器补丁”、“眼罩”和“盗版补丁”。第一个是最常弹出的结果。 :P 这没有回答你的问题,但是如果你 use express.methodOverride() 中间件,你可以发送一个名为 _method 的参数和你的 POST 请求,Express 会将它路由到参数中的方法(例如_method=patch 将执行app.patch)。 嗨,我知道,这是在没有 javascript 的情况下发送 PUT 和 POST 的唯一常用方法。我刚刚在 *** 中读到 XmlHttpRequests 独立于 http 方法补丁,但我对此不确定 Are the PUT, DELETE, HEAD, etc methods available in most web browsers? 的可能重复项 【参考方案1】:

现代浏览器确实支持 PATCH(事实上,使用 $ajax 你可以做任何你喜欢的方法,只要浏览器不阻止它)。 在 IE9 下你运气不好。

对于 FF、Chrome 和 Safari,这不是什么大问题,因为它们几年前就开始自动更新,两年多前它们停止了阻止除 GET 和 POST 之外的方法。

【讨论】:

【参考方案2】:

大多数浏览器在应用于表单时将 HTTP 方法限制为 GET/POST。但是,对于 AJAX 请求,只要后端服务器能够支持它就可以工作的方法。

【讨论】:

以上是关于HTTP 补丁 XmlHttpRequest 支持的主要内容,如果未能解决你的问题,请参考以下文章

如何给不支持新特性的浏览器打补丁

XMLHttpRequest 级别 2:浏览器

Chrome 拓展开发 Service Worker 无法使用 XMLHttpRequest 发送 HTTP 请求

TensorFlow:给TensorFlow Image 打补丁增加 TuShare 支持

二、XMLHttpRequest对象

使用 XMLHttpRequest 时没有启用 CORs?