【问题标题】:A typical HTTP session but Ajax style典型的 HTTP 会话,但 Ajax 风格
【发布时间】:2018-06-02 19:20:03
【问题描述】:

试图在内部理解 AJAX 模型。 根据A typical HTTP session

在客户端-服务器协议(如 HTTP)中,会话由三个 阶段:

  1. 客户端建立 TCP 连接(或适当的 如果传输层不是 TCP,则连接)。
  2. 客户端发送它的 请求,并等待答复。
  3. 服务器处理请求, 发回答案,提供状态码和适当的 数据。

这如何适合 AJAX 调用?

是否在后台与服务器保持连接(在不同的线程中),以便浏览器不会被阻塞并可以做其他事情?

那么当服务端的结果准备好时是下推浏览器 通过这个“隐藏”连接,浏览器然后更新 DOM?

我的意思是,是否存在由 AJAX 维护的打开会话,还是因为 HTTP 协议是无状态的而关闭并打开连接/会话?

【问题讨论】:

    标签: javascript ajax http session asynchronous


    【解决方案1】:

    你在说什么会议?一个 http/2 应用程序通常会实现至少 4 个会话层(但有些人仍然试图用 OSI 模型来描述它)。

    就执行线程而言,页面上的 JavaScript 作为单个线程运行。但是,如果 open 方法的第三个参数为 true,则在 xmlhttprequest 对象上调用 send 时线程不会被阻塞。如果它是假的,send() 将阻塞直到它得到响应。对于异步方法,您将分配一个操作,以便稍后在请求对象触发事件时执行。 xmlhttprequest 和底层网络堆栈之间的接口的低级处理表现得好像它是一个自治的执行线程,但可能在 select()/poll() 操作中作为单线程实现 - 这是在浏览器内部实现的代码,因此这个问题只有在您碰巧正在编写浏览器时才有意义。

    【讨论】:

    • 我的意思是,是在浏览器的后台线程中运行的 Ajax 调用,它打开并保持与服务器的 http 连接,直到服务器返回数据然后关闭连接?然后在主浏览器线程上运行回调以更新 dom
    • 当然连接是在其他事情发生时处理的,但正如我在上面试图解释的那样,不一定是通过单独的进程/lwp。响应recvd后TCP套接字不太可能立即关闭
    猜你喜欢
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    相关资源
    最近更新 更多