0%

HTTP协议

简介

HTTP (Hypertext Transfer Protocol 超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 协议定义了客户端如何从服务器请求 Web 页面,以及服务器如何把 Web 页面返回给客户端。HTTP 是万维网数据通信的基础。

特点

简单快速

灵活

无连接

无状态

URL

HTTP 资源在网络上用 URL 被标识和定位:

1
2
3
4
5
           userinfo          host        port
┌───────┴───────┐ ┌────┴────────┐ ┌┴┐
http://john.doe:password@www.example.com:123/forum/questions/?tag=networking&order=newest#top
└─┬─┘ └───────────┬────────────────────────┘└─┬─────────────┘└────────┬──────────────────┘└┬─┘
scheme authority path query fragment

请求 Request

请求信息由以下部分组成:

  • 请求行

    1
    GET /images/logo.png HTTP/1.1
  • 请求头

    1
    Accept-Language: en
  • 空行

  • 请求体(可选)

请求方法

GET

请求一个特定的资源。

POST

请求服务器接收携带的实体,将其作为被 URI 标识的新的子项。

PUT

请求把携带的实体储存在提供的 URI 上。

DELETE

请求删除指定的资源。

TRACE

OPTTIONS

CONNECT

响应 Response

响应信息由以下部分组成:

  • 状态行

    1
    HTTP/1.1 200 OK
  • 响应头

    1
    Content-Type: text/html
  • 空行

  • 响应体(可选)

状态码

1xx:信息

2xx:成功

3xx:重定向

4xx:客户端错误

5xx:服务端错误

完整列表

示例

客户端请求

1
2
GET / HTTP/1.1
Host: www.example.com

服务端响应

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 138
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close

<html>
<head>
<title>An Example Page</title>
</head>
<body>
<p>Hello World, this is a very simple HTML document.</p>
</body>
</html>

工作原理

客户端向服务器发送一个请求报文,服务器则返回一个响应报文。

具体步骤:

客户端连接到服务器

客户端,通常是浏览器,与 Web 服务器的 HTTP 端口(默认80)建立一个 TCP 套接字连接。

客户端发送 HTTP 请求

通过 TCP 套接字,客户端向 Web 服务器发送一个文本的请求报文(HTTP 2是二进制协议而不再是文本协议)。

服务器接受请求并返回 HTTP 请求

Web 服务器解析请求,定位请求资源。服务器将资源副本写到 TCP 套接字,由客户端读取。

释放 TCP 连接

客户端服务器解析 HTML 内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

如:在浏览器地址栏键入 URL,按下回车后会经历以下流程:

  1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
  2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接;
  3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
  4. 服务器对浏览器请求作出响应,并把对应的 HTML 文本发送给浏览器;
  5. 释放 TCP 连接;
  6. 浏览器将该 HTML 文本并显示内容;

参考

Hypertext Transfer Protocol

关于HTTP协议,一篇就够了

HTTP

2020-3-15 21:12:00