澄清:我感兴趣的是实际的HTTP请求消息(标题等),而不是用于创建它的代码。换句话说,就像这样:
GET /info.txt HTTP/1.1
Host: www.example.com
SpecialHTTPHeaderIndicatingAsynchRequest: 1
SpecialHTTPHeaderDefiningCallbackFunction: MyFunc
...
我正在努力弄清楚当HTTP服务器收到异步请求时会发生什么:服务器如何知道它是不同步的,回调函数是如何通过的,以及它立即给出的响应代码 (如果有的话)确认请求(在提交响应之前)。我一直认为HTTP服务器必须提供某种即时(即同步)响应来确认请求;但是现在我不太确定。 (如果它没有这样做,请求系统如何知道请求已被接收并正在处理,或者它不知道这个?)
答案 0 :(得分: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"
希望有所帮助:)