了解 HTTP 请求

了解 HTTP 请求

我想更好地理解什么是请求以及如何描述它们。例如,当我访问 Django 项目的主页时,我收到以下五个请求:

[21/May/2012 12:16:31] "GET / HTTP/1.1" 200 1958
[21/May/2012 12:16:31] "GET /static/css/all.css HTTP/1.1" 304 0
[21/May/2012 12:16:31] "GET /static/js/all.js HTTP/1.1" 304 0
[21/May/2012 12:16:31] "GET /static/images/logo.png HTTP/1.1" 304 0
[21/May/2012 12:16:31] "GET /static/images/login-button.gif HTTP/1.1" 304 0

这算是 5 个并发请求吗?如果不是,那么如何定义并发请求?

另外,为什么这里的图像长度总是 0?当我查看tail -fApache 日志时,我看到了不同的内容长度 -

[21/May/2012:12:09:45 -0700] "GET / HTTP/1.1" 200 1359 
[21/May/2012:12:09:45 -0700] "GET /static/css/all.css HTTP/1.1" 304 209 
[21/May/2012:12:09:45 -0700] "GET /static/js/all.js HTTP/1.1" 304 210
[21/May/2012:12:09:45 -0700] "GET /static/images/logo.png HTTP/1.1" 304 187 

长度差异的原因是什么?最后,哪里有一个很好的参考资料可以了解更多关于请求/响应的信息,并了解它们的工作原理?(我不是在寻找类似的东西http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html,而是亲自看看它们的工作原理并了解它们)。

答案1

您提到您不是在寻找类似 RFC2616 的东西,但这正是您应该寻找的东西。RFC 准确地描述了它的工作原理。

如果你真的想看看它是如何工作的,用你选择的编程语言编写一个简单的客户端和服务器。正如你提到的 Django,也许 Python 适合你

答案2

您无法从日志中真正判断请求是并发的还是序列化的。您必须观察网络跟踪才能做出这一判断,并且它可能因客户端而异。

图片请求的长度为零,因为网络服务器实际上没有发送任何数据。304响应代码表示“未修改”,这是客户端检查其缓存的图片版本是否为最新版本的结果。

您可以查看有关 HTTP 响应代码的更多信息这里。我认为 Kyle 指向的维基百科是理解基本协议的一个好起点。

答案3

那么最好的起点就是维基百科: http://en.wikipedia.org/wiki/HTTP_protocol

长度差异可能取决于发送的标头。您看到图像为 0 的原因是因为您的服务器发送了状态 304(内容未修改)。在此处了解更多信息: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

相关内容