问题标签 [http-method]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
396 浏览

spring - 是否可以在只有一个表单的单个页面上触发不同的 HTTP 方法?

到目前为止,我已经使用 jQuery AJAX(或 XMLHttp)处理了 HTTP 方法,PUT包括Spring (目前我正在使用 Spring 3.2.0)。我有一个关于使用这些方法的一般性问题。DELETEHiddenHttpMethodFilterGETPOST

基本上,我想使用单个表单在同一页面 (JSP) 上执行基本的数据库操作,例如 、INSERT和。在这种情况下,是否可以在适当的操作中触发这些方法?EDITUPDATEUPDATE

例如,当用户按下删除按钮时,DELETE应该引发该方法,当他按下更新按钮时,PUT应该触发该方法,在按下插入按钮时,POST应该调用该方法,在检索数据时,该GET方法应该是使用,因此应该调用在控制器中映射的适当方法(再次在具有单个表单的同一页面上<form:form>...</form:form>)。

当然,通过 AJAX 是可能的,但在任何地方都使用 AJAX 是不合适的。

也许我错过了 RESTFul API 的一些重要方面。显然,这是不可能的(在不知不觉中)。实际答案是什么?


编辑:

假设,我想处理该PUT方法,那么 Spring 表单将如下所示。

其生成的 HTML 如下所示。

隐藏<input type="hidden" name="_method" value="put"/>字段被自动添加到处理PUT方法HiddenHttpMethodFilter


如果我现在需要提出该DELETE方法,则应分别修改表单及其生成的 HTML,如下所示。

生成的 HTML

在运行时动态执行此操作的可能性有多大?

0 投票
1 回答
8508 浏览

javascript - AngularJS $http.put PUT 方法不发送数据

我正在从运行良好的 jquery $.ajax 切换到使用 AngularJS $http.put 来访问 restful API。

我可以进行 API 调用,但未发送 PUT 数据 - 所以我的 API 看到一个带有空数据对象的 PUT 请求,它应该包含一个 JSON 字符串 ->data.values = 'a json structure'

我以前没有使用过 AngularJS 的 $http,但是当我在我的 PHP api 中转储数据时,它只是空的。这就是我从 PHP 中的请求中提取它的方式:

在我的 API 中,如果从请求发送的 apihash 与基于 PUT 值构建的 sha256 哈希不匹配,则会失败。

这在 JQuery 中工作,现在我已经切换到 $http 失败了。我不确定为什么 PUT 数据似乎是空的。

0 投票
2 回答
128 浏览

http - REST 存储的正确返回代码

我正在尝试找出 REST 商店的正确响应。我很清楚相关的 RFC 2616;相关部分是9 方法定义

现在...

简短的问题:

如果我使用 POST 或 PUT 创建资源,并且不想返回当前资源数据,我应该使用什么代码?204可以吗?( 我对此表示怀疑)

我在这里概述了如何在JsonRestStore中实现这些方法:https ://github.com/mercmobily/JsonRestStores/blob/master/jsonrest.md

好的,这是更长的版本。

起点:

  • PUT CREATES 或 OVERWRITES 资源(取决于资源是否已经存在)
  • POST CREATES 或 MODIFIES 资源(取决于传递的 ID [到“附加到它”,即“POST 传递特定 ID”],或未传递 [到创建])
  • 商店可能会返回服务器上的资源,或者不返回任何内容

这就是商店经常使用的方式。是的,您可以将资源 ID 传递给 POST——这听起来可能很奇怪,但这样做已经完成了。

问题一:PUTting a NEW 资源而不返回内容的情况

RFC 说:

如果创建了新资源,源服务器必须通过 201 (Created) 响应通知用户代理。如果修改了现有资源,则应发送 200(OK)或 204(No Content)响应代码以指示请求成功完成。

  • 案例 1:PUT 正在修改现有资源:
    • 200(OK)如果你想返回当前资源
    • 204(无内容)如果您想说“OK”而不返回任何内容。
  • 案例 2:正在创建新资源
    • 201(已创建)如果要返回当前资源
    • ???如果您不想退货

那么,如果您创建了一个新资源,但不想将其当前状态返回给服务器呢?可以返回带有 EMPTY 内容的 201 吗?这不是204的东西吗?但是我不能这样做,因为(根据 RFC)我必须返回 201。

问题2:POST一个NEW资源,不返回内容的情况

关于 POST,RFC 不得不说:

POST 方法执行的操作可能不会产生可由 URI 标识的资源。在这种情况下,200(正常)或 204(无内容)是适当的响应状态,具体取决于响应是否包含描述结果的实体。

如果在源服务器上创建了资源,则响应应该是 201(已创建)并包含描述请求状态并引用新资源的实体和 Location 标头(参见第 14.30 节)。

如果我接受第二部分实际上并不适用于 REST 存储,因为 POST 总是会导致以某种方式可以访问的资源,我最终会得到:

  • 案例 1:现有资源被“附加到”,又名“带有 ID 的 POST”(未创建资源)

    • ???如果要返回当前资源
    • ???如果您不想返回当前资源
  • 案例 2:正在创建新资源(通常通过不传递 ID)

    • 201(已创建)如果要返回当前资源
    • ???如果您不想返回当前资源

但是,如果我决定将 RFC“POST 方法执行的操作可能不会导致 (...)”解释为“如果您执行 Post append”,这是一个 huuuuge 延伸,那么我最终会得到:

  • 案例 1:现有资源被“附加到”,又名“带有 ID 的 POST”(未创建资源)

    • 200(OK)如果你想返回当前资源
    • 204(无内容)如果您不想返回当前资源
  • 案例 2:正在创建新资源(通常通过不传递 ID)

    • 201(已创建)如果要返回当前资源
    • ???如果您不想返回当前资源

因此,即使尽可能广泛地解释 RFC ,我仍然会遇到一个问题:如果我创建了资源,并且不想返回当前的资源数据,我应该使用什么代码?204可以吗?( 我对此表示怀疑)

再见,

默克。

0 投票
1 回答
785 浏览

node.js - 为什么put和delete方法需要methodoverride?

我的意思是,为什么让putand 和anddelete一样getpost

它们都是http方法,当我想使用putand时delete

我必须做一些特殊的技巧,比如使用methodoverride

让同样的东西有一些技术问题吗?

0 投票
1 回答
1263 浏览

grails - 为什么只在 Grails 中定义为 POST 的控制器中生成的 allowedMethods?

在控制器中为域类生成的代码只允许 POST 方法用于“保存”、“更新”和“删除”。这仅仅是因为 GET 方法会显示 URL 中的参数还是出于其他考虑?就像 GET 的语义是用于获取,而 POST 是用于创建或更新?

我正在使用 Grails 2.1.1。

0 投票
1 回答
149 浏览

php - 将文本从 label.text 更新到服务器并将其保存在文本文件中

我正在尝试在服务器上的文本文件中将 label.text 上传到服务器上,这是我的代码。它没有显示任何错误,但在服务器上创建了文件,但其中没有文本。请帮忙。

0 投票
0 回答
216 浏览

tomcat - Tomcat方法限制问题

我知道这应该是一个简单的,但我们不能让它工作。我们正在尝试将所有 Trace、Put 和 Delete 方法限制在 Tomcat 中,以便我们可以清理我们的漏洞扫描。

我们已经尝试在 /tomcat/conf/web.xml 文件以及所有 /tomcat/webapps/*/WEB-INF/web.xml 文件中添加以下内容,但我们没有看到行为发生变化。关于下一步看哪里的任何想法?

0 投票
2 回答
2696 浏览

azure - Azure 网站 PHP API - PUT 和 DELETE 上不允许使用 405 方法

我正在使用 Azure 网站构建一个简单的 PHP Web 服务,但无法让它支持 PUT 和 DELETE http 方法。假设它必须进入 web.config 文件 - 我已经尝试了一些来自互联网的选项,但它们似乎都不能正常工作。有任何想法吗?

这是当前的 web.config 文件:

0 投票
1 回答
57 浏览

http - 突变应该总是使用 POST 吗?

从哲学上讲,我习惯于总是对不改变状态的 HTTP 请求使用 GET,而对改变状态的请求使用 POST。然而,最近我在这方面遇到了一些困难,这导致我做出了例外。我很好奇使用错误的 HTTP 动词是否有任何非哲学上的缺点,例如跨站点攻击等安全问题。

例外 #1

我想触发下载动态打包到存档中的请求文件列表。但是,文件列表可能会变得如此之大,以至于当在 URL 中编码为查询字符串参数时,它们超出了 Internet Explorer 中的 url 长度限制。为了解决这个问题,我最终通过 POST 触发了下载。

例外 #2

有一个按钮始终显示,无论您是否登录,但它只能在您登录时改变状态。如果您在未登录时按下它,您将被带到登录页面一个查询字符串参数,指示您接下来打算去的地方。当您登录时,它会将您重定向到那里以完成您的操作。但是,重定向只能生成 GET,不能生成 POST。所以我们允许 GET 在这种情况下改变状态。

这些异常是否有任何漏洞或缺点?这些是否允许通过检查引用标头无法防止的任何跨站点请求伪造场景?

0 投票
2 回答
9822 浏览

php - PHP / CodeIgniter 中的 GET 和 POST 函数

我喜欢 MVC(非常喜欢),我正在尝试用当今所有主要的 Web 语言自学一个 MVC 架构框架。

我目前正在使用 CodeIgniter 和 PHP。我在网上搜索了一种方法,使相同的函数对 POST 和 GET 表现不同,但找不到任何东西。CodeIgniter 有这个功能吗?

如果您使用过 Ruby On Rails 或 ASP.NET MVC,您就会知道我在说什么,在它们的框架中我们可以这样做:

我已经习惯了这一点,以至于我发现很难在没有这种有用能力的情况下获得同样流畅的功能。

我错过了什么吗?如何在 CodeIgniter 中实现相同的目标?

谢谢