# 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 敏捷開發