【问题标题】:How server knows whether the request is Synchronous or Asynchronous?服务器如何知道请求是同步的还是异步的?
【发布时间】:2013-06-13 06:40:33
【问题描述】:

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

但我想知道处理。服务器或服务器代码如何知道请求是正常调用还是 Ajax 调用。

我请求专家,请消除我的疑问。

提前致谢。

【问题讨论】:

  • 一个 request 不会是同步或异步的,这只是导致发出请求的代码是否会在发送请求后释放线程的问题与否。
  • 浏览器知道是什么触发了请求,因为它们是软件并且被编程为跟踪这些事情(因为如果他们不跟踪哪个请求是出于什么目的,他们将无法做任何事情,除了加载没有外部图像、脚本、样式表等的单个 HTML 文档)
  • 同意您的回复,但我的问题仍然是当我进行 ajax 调用时如何编码或浏览器知道是的,这是 Ajax 调用?
  • “服务器或服务器代码如何知道” — 您的编辑完全改变了问题的性质。

标签: asp.net jquery


【解决方案1】:

服务器或服务器代码如何知道请求是普通调用还是 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. 选择相关数据包,您现在应该会看到所选数据包的“标头”、“预览”、“响应”、“Cookies”和“时间”选项卡。
  5. 选择“标题”标签
  6. 您可能需要扩展Request Headers 部分。标题中应该是X-Requested-With: XMLHttpRequest

这是我在编辑此答案时查看包的工具的屏幕截图:

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

【讨论】:

    【解决方案2】:

    服务器或服务器代码如何知道请求是普通调用还是 Ajax 调用

    它没有。 Ajax 发送的 HTTP 请求与任何其他 HTTP 请求没有任何不同。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-23
        • 1970-01-01
        • 1970-01-01
        • 2020-05-15
        • 2020-02-21
        • 2013-02-25
        • 2012-12-30
        相关资源
        最近更新 更多