Web服务器[IIS]是否可能知道某个请求是AJAX请求还是普通请求

Web服务器[IIS]是否可能知道某个请求是AJAX请求还是普通请求,ajax,webserver,Ajax,Webserver,任何Web服务器[IIS]都可能知道某个请求是AJAX请求还是普通请求。Firebug可以向您显示从这两种类型的请求发送到服务器的内容,试试看。如果您使用的是原生XmlHttpRequests,那么此请求与通过访问页面或提交表单生成的请求之间没有区别。如果使用jQuery创建AJAX请求,那么is会添加一个请求头X-Requested-With:XMLHttpRequest。此标头可用于区分AJAX和非AJAX请求。一些(大多数?)框架可以发送自定义标头,但实际上,从服务器的角度来看,AJAX请

任何Web服务器[IIS]都可能知道某个请求是AJAX请求还是普通请求。

Firebug可以向您显示从这两种类型的请求发送到服务器的内容,试试看。

如果您使用的是原生XmlHttpRequests,那么此请求与通过访问页面或提交表单生成的请求之间没有区别。如果使用jQuery创建AJAX请求,那么is会添加一个请求头
X-Requested-With:XMLHttpRequest
。此标头可用于区分AJAX和非AJAX请求。

一些(大多数?)框架可以发送自定义标头,但实际上,从服务器的角度来看,AJAX请求与“正常”请求完全相同


如果您使用curl、wget、telnet或您自己编写的程序,那么web服务器将以相同的方式处理请求—在一天结束时,都是HTTP。

可能不是web服务器能够区分,而是服务器端代码能够区分。如果您谈论的是ASP.NET和AJAX,那么可以使用
ScriptManager.IsInAsyncPostBack
查找回发是否来自AJAX。

接收页面“知道”的最简单方法是发送查询字符串参数。但这并非100%安全。

仅用于学习目的。在我看来,任何请求[ajax/normal]都是一个请求,Web服务器是否可以接收到关于请求的任何特定信息并进行相应处理。问题是关于服务器端的。Firebug在客户端可用。是的,希望您尚未完全理解我的问题。我只需要知道IIS服务器是否知道此页面请求是普通请求还是AJAX请求。我已经在firebug中使用了net选项卡,这也会帮助其他人。。你同意大卫·坎普的回答吗。如果是,那么为什么,如果不是,那么为什么。。让这是一个很好的讨论,集中在服务器端方面。@saravanan-我100%同意David Kemp的观点。http请求将是相同的,除非向AJAX请求添加自定义头。我特别提到jQuery,因为它是一个流行的库,Microsoft通过.Net中的Request.IsAjaxRequest采用了它。我假设您处于您提到的IIS的Microsoft环境中。谢谢您的回复。我是在ASP.NETMVC2中开发的。您能否提供更多详细信息,说明服务器在识别
X-request-With:XMLHttpRequest
后执行的操作,以及它所采取的操作是否有任何差异。默认情况下,IIS不会执行任何不同的操作。如果您想以不同的方式处理请求,那么您有几个选择。要处理所有web应用程序中的所有AJAX请求,可以创建一个检查相关头并执行某些操作的httpModule,您可以在IIS中注册该模块。如果是单个应用程序中的所有请求,则可以在该应用程序中注册该模块。如果您只是想在特定的ActionMethod中处理请求,那么您可以在其中进行检查并相应地处理它。稍后我将尝试发布一些示例。谢谢您的回复。如果您有空,请发布一些示例,因为这将有助于我更好地理解。@Kemp:您能告诉我在识别X-request-With:XMLHttpRequest后服务器做什么的更多细节吗?它所采取的操作是否有任何区别。我想@smirkin已经在上面详细阐述了这一点,但是服务器只是将该头视为一个额外的头,并将其传递给处理程序(无论如何,在IIS7的情况下)。处理程序处理标题的方式完全未定义。从理论上讲,一名处理人员可能会看到X-With:XHR,并在@JonSkeets家发射一枚核弹。实际上,大多数处理程序都遵循HTTP协议(),或者实现REST样式的API()。@kemp:由于我们可以选择通过HttpModules和HttpHandlers定义自己的请求处理功能,为什么说这是
未定义的
。无论如何,服务器接受所有请求并对它们进行相同的处理是我们的协议。另外@smirkin选择了稍后发布示例。也许我们有机会得到一个活生生的例子……我的意思是行为是未定义的-也许未指定是一个更好的词(太多的RFC!)@Kemp:对!正如我所说的,功能取决于服务器端代码/框架。IIS本身无法做到这一点。