有人询问有关何时使用POST以及何时在AJAX请求中使用GET的性质的类似问题
这里: What are the advantages of using a GET request over a POST request?
,此处: GET vs. POST ajax requests: When and how to use either?
但是,我想说清楚这不是我要问的。我获得了幂等性,敏感数据,浏览器能够在发生错误时再次尝试的能力,以及浏览器能够缓存查询字符串数据的能力。
我的真实情况是,我希望阻止我的用户只能输入我的“Compute.cshtml”文件的URL(即我的jQuery $.ajax
函数发布到的服务器上的文件)。
我在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 web-pages中使用GET或POST与AJAX环境。
答案 0 :(得分:2)
我的建议是,不要试图阻止他们。这是无害的。
那么通过直接浏览器输入可以访问该URL的危害是什么?他们也可以直接POST,如果他们足够狡猾,可以使用Fiddler“compose”。通过url访问GET对于调试非常有用。
编辑:有关详细信息,请参阅http://www.robotstxt.org/orig.html等网站,但是从您的网络服务目录中排除搜索引擎的名为/ api的robots.txt将如下所示:
User-agent: *
Disallow: /api/
答案 1 :(得分:1)
与IsPost
类似,您可以使用IsAjax
来确定请求是否是由大多数浏览器中的XmlHttpRequest对象启动的。
if(!IsAjax){
Response.Redirect("~/WhatDoYouThinkYoureDoing.cshtml");
}
它检查请求以查看它是否具有值为X-Requested-With
的{{1}}标头,或者如果Request对象中有一个项目,其中XmlHttpRequest
键具有值X-Requested-With
。
答案 2 :(得分:0)
检测直接AJAX调用的一种方法是检查是否存在 http_referer 标头。直接键入的网址不会生成引荐来源,但您仍然无法将通话与简单的锚链接区分开来。
(请记住,某些浏览器不会为XHR请求生成标头。)