我最近看到许多框架决定"伪造"PUT和DELETE请求.就像Ruby on Rails一样.他们似乎在等待浏览器赶上来.他们在等待是徒劳的吗?
这甚至可以在任何地方实施吗?
我想知道什么是明确的(?)答案是关于如何从浏览器中执行POST/GET以外的事情 - HTML表单或Ajax,因为我听到关于什么浏览器允许的混合报告(特别是在ajax端) ).
在RESTful风格中构建后端时,最好使用PUT,HEAD,OPTIONS等适当的动词......在rails中,使用一个名为method(IIRC?)的隐藏表单字段来模拟这个,并在后端使用调度到动词的适当控制器.现在(2009年底)这是必要的吗?有哪些惯例?
Rfc2616列出了除GET和POST之外的许多方法,比如DELETE,PUT等.但是,html格式的方法字段似乎只允许指定GET或POST.
是否可以在使用非GET或POST的请求方法的html页面中创建链接或表单?
我试图弄清楚为什么在启用HTML5的网站中,put/delete方法无法与Chrome一起使用.从我搜索到的内容来看,它听起来像Chrome已经有一段时间了,所以说我只是想找几个指针来缩小我的问题范围.也许我正在执行错误的表单,也许我的doctype是错误的,谁知道.任何帮助表示赞赏:)
所以,代码看起来像这样:
<!DOCTYPE html>
<html>
<head>
<title>
some_resource
</title>
</head>
<body>
<div class="content">
<form method="put" action="/some_resource">
<div>
<input id="title" name="title" placeholder="The Resource Title" type="text" value="" autofocus />
</div>
<div>
<textarea id="body" name="body" placeholder="The Resource Body" required></textarea>
</div>
<div>
<input id="submit" name="submit" type="submit" value="Submit" />
</div>
<!-- Resource Settings -->
<ul>
<li>
<input id="listed" name="listed" type="checkbox" value="y" />
</li>
<li>
<input id="template" name="template" type="text" value="resource.html" />
</li>
</ul>
</form>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
只是表单的基本测试.现在我已经在最新的Ubuntu Firefox(3.6.7),Opera(10.60内部)以及谷歌最新的Linux Chrome Beta(5.0.375.99 beta)上尝试过.当我提交表单时,他们似乎都没有向服务器发送正确的put方法.现在,我相信(不是来自任何特定的研究)Firefox尚未支持这一点,并且像许多HTML5一样,它计划用于下一版本的FF.Opera我不知道,但我经常听说它与Chrome保持同步.所以..是的,我有点困惑.
提交表单时,他们会转到网址:http://localhost:8080/some_resource?title=t&body=b&submit=Submit&template=resource.html.请注意,正如预期的那样,POST工作正常.
现在有没有人有任何指针让put方法有效?有可能Linux版的测试版还没有更新到Windows版本( …
某些HTTP方法(例如POST,需要在标题和double之后发送正文)CRLF.
其他人,例如GET,没有身体,对他们而言,双重CRLF标志着请求的结束.
但对于其他人:PUT,DELETE...怎么知道哪一个需要的身体吗?
通用HTTP客户端应如何对未知的HTTP方法做出反应?拒绝吗?默认情况下需要正文,或者默认情况下不需要正文?
可以理解指向相关规范的指针.
编辑:正如评论中所述,我将详细介绍我的问题.
我正在设计一个通用的HTTP 客户端,程序员可以使用它来向任何服务器发送任意HTTP请求.
客户端可以像这样使用(伪代码):
HttpClient.request(method, url [, data]);
Run Code Online (Sandbox Code Playgroud)
数据是可选的,可以是原始数据(字符串),也可以是键/值对的关联数组.
如果数据是数组,则库将对数据进行url编码,然后将数据附加到GET请求的URL ,或者将其发送到消息正文中以获取POST请求.
因此,考虑到开发人员选择的HTTP方法,我正在尝试确定此HttpClient是否必须/应该/必须/不应该在请求中包含消息体.
如何让表达式使用表单的删除和放置方法?
<form method="DELETE" action="">
Run Code Online (Sandbox Code Playgroud)
使用上面的内容是在最新稳定版本的chrome中发送GET请求.这应该是浏览器问题吗?
有没有更好的方法来覆盖它,而没有一个特殊的输入字段来支持这些?
由于RouterExpress 4中的对象支持:
var router = require('express').Router();
router.delete('/route', function(req, res) {
//...
};
router.put('/route', function(req, res) {
//...
};
Run Code Online (Sandbox Code Playgroud)
方法覆盖中间件有什么用?我可以安全地将它从我app.js和它中删除package.json吗?
好吧我有一个简单的node.js/express.js/mongodb应用程序在这里设置我的配置如下.
var express = require('express'),
mongoose = require('mongoose');
http = require('http');
var app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
//middleware stack
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + "/public"));
});
mongoose.connect("mongodb://localhost/hello");
Run Code Online (Sandbox Code Playgroud)
问题出在我尝试发出PUT或DELETE请求时.我的形式很简单
<form method="POST" action="/users/#{user.name}">
<input type="hidden" name="_method" value="PUT"/>
</form>
Run Code Online (Sandbox Code Playgroud)
现在我的路由器使用express .put()方法捕获路由
app.put('/users/:name', function(req, res) {
var b = req.body;
Users.update(
{ name: req.user.name },
{ name: b.name, age: b.age, email: b.email },
function(err) {
res.redirect('/users/'+b.name);
});
})
Run Code Online (Sandbox Code Playgroud)
当我发出请求时,我只是得到一个"无法PUT"或"无法删除"错误.
我试图通过chomes RESTful客户端以相同的结果发出同样的请求.
我已经阅读了一个与我有同样问题的话题,尽管在评论之后答案并没有解决我的问题.
问题我已经研究了 表达式删除和没有方法覆盖的表达式 …
的jQuery的AJAX调用具有type参数,允许指定一个异步调用方法(GET/ POST/ PUT/ DELETE); 文件说明:
要求的类型("POST"或"GET"),默认为"GET".注意:此处也可以使用其他HTTP请求方法,例如PUT和DELETE,但并非所有浏览器都支持它们.
这对现代浏览器意味着什么?我可以依靠jQuery AJAX来完成RESTful调用,它依赖于PUT和DELETE动词吗?
我有一个简单的用户注册表单,有两个字段,一个用于用户名,另一个用于密码.我有一个控制器UserController,它有这两个动作:
[HttpGet]
public ActionResult Register()
{
return View();
}
[HttpPut]
public ActionResult Register(string username, string password)
{
// Registering user
return View();
}
Run Code Online (Sandbox Code Playgroud)
我使用HTTP Put来使我的网站RESTful(插入PUT动词).但是,当我提交表单时,我收到404错误.这是我的表单的HTML:
<form action='@Url.Action("Register", "User")' method="post">
<div class='field'>
<label for='username'>
Username:
</label>
<input type='text' id='username' name='username' maxlength='100' />
</div>
<div class='field'>
<label for='password'>
Password:
</label>
<input type='password' id='password' name='password' maxlength='50' />
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
我在这里想念什么?怎么了?