服务器如何知道请求是同步还是异步?

时间:2013-06-13 06:40:34

标签: asp.net jquery

当我对服务器进行ajax调用时,整页不回发,只有少量数据进入服务器并返回响应页面。

但我想知道处理问题。服务器或服务器代码如何知道正常调用或Ajax调用中的请求。

我向专家请求,请明白我的疑问。

提前致谢。

3 个答案:

答案 0 :(得分:3)

  

服务器或服务器代码如何知道正常调用或Ajax调用中的请求。

如果您的javascript代码标记了HTTP数据包,服务器就会知道这一点。例如。 in jQuery the HTTP header sent to the server has an X-Requested-With set and ASP.NET uses this to distinguish if HTTP packets are ajax calls or not

要了解有关HTTP数据包的更多信息,您可以检查在数据包嗅探器(例如Fiddler)或带有dev的浏览器中发送的数据包。监控流量的工具。在后一种情况下,您可以在例如Chrome开发工具执行以下操作:

  1. 打开Chrome开发者工具,Ctrl+Alt+I(或Mac中的Cmd+Alt+I)。
  2. 选择“网络”选项卡(您可能需要刷新页面以启用网络监控)
  3. 执行Ajax调用,发出的HTTP请求应显示在底部的列表中。
  4. 选择相关数据包,您现在应该看到所选数据包的“标题”,“预览”,“响应”,“Cookie”和“计时”标签。
  5. 选择“标题”标签
  6. 您可能需要展开{​​{1}}部分。标题中应为Request Headers
  7. 以下是我正在编辑此答案的工具截图:

    Chrome Dev Tools inspecting a request while editing this answer

    请注意,ajax调用不一定必须是异步的,因为它们可以是同步的(阻止javascript直到加载响应)。有时需要同步呼叫,例如弹出窗口阻止程序不允许您在异步ajax回调中打开浏览器窗口。

答案 1 :(得分:1)

  

服务器或服务器代码如何知道正常调用或Ajax调用中的请求

没有。 Ajax发送的HTTP请求与任何其他HTTP请求没有任何区别。

发出请求的代码可以执行某些操作以使其可识别(例如,通过添加查询字符串,将Accept标头更改为更适合上下文的内容(例如Accept: application/json)或通过添加其他HTTP标头(某些库添加X-Requested-With: XMLHttpRequest)。

这些都不是保证,因为有人总是可以手动发出HTTP请求。它们适用于确定在您自己的应用程序中返回哪个视图,但如果您尝试实现任何类型的安全性,则不行。

答案 2 :(得分:0)

AJAX调用使用XmlHttpRequest原型的实例执行。其.open()方法的第三个参数是async:bool。所以 xhr.open("GET", "http://example.com", true) 是异步和 xhr.open("GET", "http://example.com")是同步的。 jQuery get()post()ajax()默认为异步,您需要传递异步参数才能使其同步。所以回答你的问题:你告诉浏览器你想要什么样的请求。