# 1.5.1 客户端请求
### 1.5.1 客户端请求
在HTTP连接建立以后,客户端首先发起一个请求:
```
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.43.0
(空行)
```
这个请求由3部分构成:
1. 首行是一个请求行(**Request Line**)
2. 接着是若干**Header**,一个一行
3. 一个空行表示请求结束
#### 请求行(Request Line)
请求行有特定的格式:
**Request-Line** = **Method** SP **Request-URI** SP **HTTP-Version** CRLF
以上:SP代表一个空格符,CRLF代表回车和换行符。对于
```
GET /index.html HTTP/1.1
```
来说,则有:
```
Method = GET
Request-URI = /index.html
HTTP-Version = HTTP/1.1
```
这句话告诉服务器:请把“/index.html”所代表的资源(在这里是某个HTML文件)发给我看;这次对话使用HTTP版本1.1[1](#fn_1)。
HTTP**方法(Method)**决定了服务器将如何对所请求的资源进行操作。GET方法的意思就是“请把这个资源发给我看”。除了GET,常见的方法还有POST等,在后面的[Web服务器 - 方法与资源](http_method_and_resource.html)中将会有更多介绍。参考这里了解更多:[https://en.wikipedia.org/wiki/Hypertext\_Transfer\_Protocol#Request\_methods](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods)。
**Request URI**代表着服务器上的某种资源。它可以是一个文件,也可以是其他任何东西(比如服务器的当前时间),由服务器决定如何解读。
#### 请求头(Reqeust Header)
**Request Header**向服务器提供请求的参数、以及客户端自身的一些信息等等。
这个Header
```
Host: www.example.com
```
告诉服务器:本次请求是针对名为“www.example.com”的主机的。
这个Header
```
User-Agent: curl/7.43.0
```
则是说:我的名字是“curl/7.43.0”。
HTTP定义了一系列Request Header,参考这里了解更多:[https://en.wikipedia.org/wiki/List\_of\_HTTP\_header\_fields#Request\_fields](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_fields)
> 1. 不同的HTTP版本支持的功能集合不一样,如果服务器不支持某个版本,它会回复一个错误。[↩](#reffn_1 "Jump back to footnote [1] 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 敏捷开发