HTTP协议的定义:
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种建立在TCP(传输控制协议)之上的无状态连接协议。它是互联网的基础协议之一,用于客户端与服务器之间的通信。HTTP规定了客户端和服务器之间通信的格式,包括请求与响应的格式,使得网络上的资源(如HTML文件、图片、查询结果等)能够得以传输和展示。
HTTP的使用方法:
客户端和服务器之间的通信由requests和responses完成:
客户端(浏览器)向网络发送 HTTP 请求
网络服务器接收请求
服务器运行应用程序来处理请求
服务器向浏览器返回 HTTP 响应(输出)
客户端(浏览器)接收响应
HTTP 请求/响应循环
一个典型的HTTP请求/响应循环
浏览器请求一个 HTML 页面。 服务器返回一个 HTML 文件。
浏览器请求样式表。 服务器返回一个 CSS 文件。
浏览器请求 JPG 图片。 服务器返回一个 JPG 文件。
浏览器请求 JavaScript 代码。 服务端返回一个JS文件
浏览器请求数据。 服务器返回数据(以 XML 或 JSON 格式)。
HTTP请求方法:
请求报文和响应报文的形式:
请求报文由以下几个部分组成:
- 请求行:包含请求方法(如GET、POST)、请求资源的URL和HTTP协议版本(如HTTP/1.1)。
- 请求头:包含一系列的键值对,用于描述请求的各种属性,如客户端类型(User-Agent)、请求来源(Referer)等。
- 空行:用于分隔请求头和请求体。
- 请求体(可选):包含发送给服务器的数据,如POST请求中的表单数据。
例如,一个GET请求的报文可能如下:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
响应报文也由几个部分组成:
- 状态行:包含HTTP协议版本、状态码和状态描述。
- 响应头:包含一系列的键值对,用于描述响应的各种属性,如服务器类型(Server)、内容类型(Content-Type)等。
- 空行:用于分隔响应头和响应体。
- 响应体(可选):包含服务器返回给客户端的数据,如HTML页面、图片等。
例如,一个200 OK的响应报文可能如下:
HTTP/1.1 200 OK
Date: Mon, 21 Oct 2021 08:30:45 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Tue, 29 Dec 2020 07:26:13 GMT
ETag: "0-6166700c"
Content-Type: text/html
Content-Length: 5804
Connection: close<!doctype html>
<html>
<head>
<title>Example Web Page</title>
</head>
<body>
<h1>Hello World!</h1>
<p>This is an example web page</p>
</body>
</html>
HTTP状态码:
HTTP状态码是服务器在响应客户端请求时返回的三位数字代码,用于表示请求的处理结果和状态。状态码分为五类:
常见的状态码类型
1xx(信息性状态码):
100 Continue 继续。客户端应继续其请求
101 Switching Protocols 切换协议。
2xx(成功状态码):
200 OK 请求成功。一般用于GET与POST请求
202 Accepted 已接受。已经接受请求,但未处理完成
204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
206 Partial Content 部分内容。服务器成功处理了部分GET请求
3xx(重定向状态码):
301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303 See Other 查看其它地址。与301类似。使用GET和POST请求查看
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
4xx(客户端错误状态码):
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405 Method Not Allowed 客户端请求中的方法被禁止
5xx(服务器错误状态码):
500 Internal Server Error 服务器内部错误,无法完成请求
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中