# 1.5 HTTP
## 1.5 HTTP
HTTP即**超文本传输协议(Hypertext Transfer Protocol)**[1](#fn_1)。它是像浏览器这样的HTTP客户端程序(正式名称叫做**User Agent**)向HTTP服务器程序(**Server**)获取资源(如网页、图片等)的协议。它采用简单的“一问一答”模式:客户端发出一个请求(**Request**),服务器给出一个应答(**Response**)。这一过程可以用curl命令展示如下(*HTTP是一个基于文本的协议*,因此我们可以查看请求和应答):
```
curl -v http://www.example.com/index.html
```
命令输出:
```
* Trying 93.184.216.34...
* Connected to www.example.com (93.184.216.34) port 80 (#0)
> GET /index.html HTTP/1.1
> Host: www.example.com
> User-Agent: curl/7.43.0
> ...
>
< HTTP/1.1 200 OK
< Content-Type: text/html
< Content-Length: 1270
< ...
<
<!doctype html>
<html>
…
</html>
```
其中,“> ”开头的行是客户端发出的请求,“< ”开头的行是服务器的应答。注意行首的“> ”和“< ”本身并不是请求或者应答的一部分,只是curl输出的一种标记。同时,为了简明扼要,我略去了一些行,用“...”表示。
“\* ”开头的行是HTTP连接建立以前curl输出的一些诊断信息。我们可以看到curl通过DNS查找到“www.example.com”对应的IP—— 93.184.216.34[2](#fn_2)。
> 1. HTTP有好几个版本,目前比较流行的有1.0、1.1和2.0,均由IETF的RFC文本定义。RFC2616 <https://www.ietf.org/rfc/rfc2616.txt> 定义了HTTP 1.1,它是目前最流行的版本。[↩](#reffn_1 "Jump back to footnote [1] in the text.")
> 2. 注意:DNS查找并不属于HTTP的一部分。HTTP发生在客户端到服务器的连接建立以后。[↩](#reffn_2 "Jump back to footnote [2] in the text.")
- 前言
- 1 Web概述
- 1.1 什么是Web
- 1.2 超文本和超链接
- 1.3 URL
- 1.4 DNS
- 1.5 HTTP
- 1.5.1 客户端请求
- 1.5.2 服务器应答
- 1.5.3 进一步了解HTTP
- 1.6 HTTPS
- 2 Web浏览器
- 2.1 HTML
- 2.1.1 文档类型声明
- 2.1.2 标签和属性
- 2.1.3 文档结构
- 2.1.4 DOM
- 2.1.5 进一步了解HTML
- 2.2 CSS
- 2.2.1 样式与样式表
- 2.2.2 样式表语法
- 2.2.3 级联样式表
- 2.2.4 进一步了解CSS
- 2.3 JavaScript
- 2.3.1 script标签
- 2.3.2 操纵DOM
- 2.3.3 jQuery
- 2.3.4 进一步了解JavaScript
- 2.4 Ajax
- 2.5 移动设备与响应式Web设计
- 3 Web服务器
- 3.1 方法与资源
- 3.2 状态代码
- 3.3 静态内容与动态内容
- 3.4 编程语言与技术
- 3.4.1 CGI
- 3.4.2 PHP
- 3.4.3 Java
- 3.4.4 Python
- 3.4.5 Ruby
- 3.4.6 Node.js
- 3.5 RESTful Web API
- 3.6 服务器架构
- 3.7 Web缓存
- 3.8 服务器推送
- 4 数据库
- 4.1 关系型数据库
- 4.2 NoSQL数据库
- 5 Web服务器的其他组件
- 5.1 Cron
- 5.2 消息队列
- 5.3 邮件服务器
- 6 开发工具与技术
- 6.1 Git
- 6.1.1 Git基础操作
- 6.1.2 Git基本原理
- 6.1.3 进一步了解Git
- 6.2 敏捷开发