【问题标题】:What is the format of an HTTP request message generated by AJAX?AJAX 生成的 HTTP 请求消息的格式是什么?
【发布时间】:2014-11-19 05:49:34
【问题描述】:

澄清一下:我对实际的 HTTP 请求消息(标头等)的样子感兴趣,而不是用于创建它的代码。换句话说,是这样的:

GET /info.txt HTTP/1.1
Host: www.example.com
SpecialHTTPHeaderIndicatingAsynchRequest: 1
SpecialHTTPHeaderDefiningCallbackFunction: MyFunc
...

我试图弄清楚当 HTTP 服务器接收到异步请求时会发生什么:服务器如何知道它是异步的,回调函数是如何传递的以及它立即给出什么响应代码

em>(如果有的话)确认请求(在响应之前)。我一直认为 HTTP 服务器必须给出某种即时(即同步)响应来确认请求;但是,现在我不太确定。 (如果它不这样做,请求系统如何知道请求已收到并正在处理,或者它不知道这一点?)

【问题讨论】:

    标签: ajax http asynchronous http-headers xmlhttprequest


    【解决方案1】:


    服务器不知道请求是从客户端以同步模式还是异步模式发送的。 现在让我们看看 HTTP 请求的内部。我用 PHP 和 HTML/JS 做了一个小例子

    client.html

    <html>
        <head>
        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
        </head>
        <script>
            $.ajax({
              url: "/StackOverFlow/sof/server.php",
             }).done(function( data ) {
                console.log(data);
              });   
        </script>
    <body>
    
    </body>
    </html>
    

    server.php

    <?php
        print json_encode(array("NAME" => "Factory", "VALUE" => "Constructor"));
    ?>
    

    当我在浏览器中启动我的 client.html 并激活 firebug(免费插件 Firefox)时,我可以看到从客户端发送的 http 请求,以及我从服务器获得的 http 响应

    现在,如果我们查看 %Apache_Home%/logs/access.log,我们会发现 Apache 处理 Ajax 请求的方式与来自浏览器请求 (POST/GET) 的方式相同

    ::1 - - [18/Nov/2014:22:35:22 +0100] "GET /StackOverFlow/sof/server.php HTTP/1.1" 200 40 "http://localhost/stackoverflow/sof/client.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
    

    希望有帮助:)

    【讨论】:

    • 感谢 Halayem - 这确实有点帮助。所以你说无论请求是同步的还是异步的,服务器都会以同样的方式响应,因为它不知道请求是如何发送的——对吗?如果有,回调函数是如何传递给服务器的?
    • 回调没有传递给服务器。客户端将等待,直到从服务器传输数据“就像来自 php 的回显或打印”或发生错误(如 404 未找到......),或者客户端决定在一段时间后关闭与服务器的连接(设置超时)而不获取任何信息。
    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2016-06-12
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    相关资源
    最近更新 更多