3

关于在 AJAX 请求中何时使用 POST 和何时使用 GET 的性质,也有人问过类似的问题

这里: 使用 GET 请求优于 POST 请求有什么优势?

在这里: GET 与 POST ajax 请求:何时以及如何使用?

但是,我想明确表示这并不是我要问的。我得到了幂等性、敏感数据、浏览器能够在发生错误时重试的能力,以及浏览器能够缓存查询字符串数据的能力。

我的真实情况是,我想阻止我的用户简单地输入我的“Compute.cshtml”文件(即我的 jQuery$.ajax函数发布到的服务器上的文件)的 URL。

我在 WebMatrix C#.net 网页环境中,我试图在文件名前加上下划线 ( _),但显然 AJAX 请求属于与此下划线旨在防止显示它的相同标准,当然,打破了请求。

所以如果我使用 POST 我可以简单地使用这个逻辑:

if (!IsPost)  //if this is not a post...
{
    Response.Redirect("~/") //...redirect back to home page.
}

如果我使用 GET,我想我可以发送附加数据,例如包含该值的字符串,"AccessGranted"并在另一侧检查它是否等于该值,如果不等于则重定向,但这可以通过在地址栏中输入轻松复制(并不是说数据在另一边是敏感的,而是……)。

无论如何,我想我在问是否可以始终使用 POST 来处理这个逻辑,或者在 WebMatrix C#.net 网页环境中使用 GET 或 POST 和 AJAX 处理我的情况的适当方法是什么。

4

3 回答 3

2

我的建议是,不要试图阻止他们。它是无害的。

  • 你不会有直接链接到它,所以它不会真正出现。(为了 Google 的缘故,您可能希望您的 robots.txt 排除整个 /api 目录)。
  • 这是他们无论如何都可以访问的数据(否则您需要服务器端修剪),因此您不能暴露任何危险或敏感的内容。
  • 正如您所链接的(缓存、语义等),将 GET 用于类似 GET 的请求的优势有很多

那么通过直接浏览器输入访问该 url 有什么害处呢?如果他们足够狡猾,他们也可以直接 POST,例如使用 Fiddler “compose”。让 GET 可以通过 url 访问对于调试很有用。

编辑:有关详细信息,请参阅http://www.robotstxt.org/orig.html之类的网站,但是从名为 /api 的 Web 服务目录中排除搜索引擎的 robots.txt 如下所示:

User-agent: *
Disallow: /api/
于 2013-05-10T14:33:07.223 回答
1

与 类似IsPost,您可以IsAjax在大多数浏览器中使用来确定请求是否由 XmlHttpRequest 对象发起。

if(!IsAjax){
   Response.Redirect("~/WhatDoYouThinkYoureDoing.cshtml");
} 

它检查请求以查看它是否具有X-Requested-With值为 的标头XmlHttpRequest,或者请求对象中是否存在X-Requested-With具有值为的键的项XmlHttpRequest

于 2013-05-10T15:27:02.660 回答
0

检测直接 AJAX 调用的一种方法是检查http_referer标头是否存在。直接键入的 URL 不会生成引荐来源网址,但您仍然无法将调用与简单的锚链接区分开来。

(请记住,某些浏览器不会为 XHR 请求生成标头。)

于 2013-05-10T14:56:11.320 回答