一、HTTP简介
- 概念
HTTP:Hyper Text Transfer Protocol(超文本传输协议)。
用途:基于TCP/IP通信协议,从万维网(World Wide Web)服务器传输超文本到本地服务器。 - 工作原理
HTTP是客户端与Web服务器(C/S)之间的通信协议,客户端通过URL向服务器发送请求,服务器接收到请求后向客户端发送响应信息。
HTTP默认端口号为80,可修改。 - 注意:
① HTTP是无连接的,即限制每次廉洁只处理一个请求,服务器发出响应并收到客户端应答后就断开连接,也就是不同请求之间相互独立。好处是节省传输时间。
② HTTP是媒体独立的,即任何客户端和服务器知道如何处理的数据内容都可以通过HTTP传输。
③ HTTP是无状态的,即不会记忆之前的信息,需要之前的信息必须重传。好处一是每次连接传送的数据量增大,二是在服务器不需要先前信息时反应较快。 - HTTP协议通信流程:
二、消息结构
- 请求
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。
示例:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
- 响应
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文,下图给出了请求报文的一般格式。
HTTP/1.1 200 OK
Date: Mon, 9 Aug 2021 19:13:05 GMT
Context-Type: text/html; charset=ISO-8859-1
Content-Length: 122
<html>
<head>
<title>My Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
三、请求方法
HTTP1.0定义了三种请求方法:GET、POST、HEAD;
HTTP1.1新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT。
序号 | 方法 | 描述 |
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头。 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
9 | PATCH | 是对PUT方法的补充,用来对已知资源进行局部更新。 |
四、响应头信息
序号 | 响应头 | 说明 |
1 | Allow | 服务器支持哪些请求方法(如GET、POST等)。 |
2 | Content-Encoding | 文档的编码(Encode)方法。 |
3 | Content-Length | 表示内容长度。 |
4 | Content-Type | 表示后面的文档属于什么MIME类型。 |
5 | Date | 当前的GMT时间。 |
6 | Expires | 文档过期的时间 |
7 | Last-Modified | 文档的最后改动时间。 |
8 | Location | 表示客户应当到哪里去提取文档。 |
9 | Refresh | 表示浏览器应该在多少时间之后刷新文档,以秒计。 |
10 | Server | 服务器名字。 |
11 | Set-Cookie | 设置和页面关联的Cookie。Servlet不应使用response.setHeader("Set-Cookie", ...),而是应使用HttpServletResponse提供的专用方法addCookie。 |
12 | WWW-Authenticate | 客户应该在Authorization头中提供的授权信息 |
五、状态码
HTTP响应的状态行中包含一个状态码(HTTP Status Code),用以表示服务器响应状态。
常见的状态码:
- 200 - 请求成功
- 301 - 资源(网页等)被永久转移到其它URL
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误
状态码由三个十进制数字组成,第一个数字定义了状态码的类型,后两位表示具体状态。状态码可分为5类:
状态码 | 描述 |
1** | 信息,服务器收到请求,需要请求者继续执行操作。 |
2** | 成功,操作被成功接收并处理。 |
3** | 重定向,需要进一步的操作以完成请求。 |
4** | 客户端错误,请求包含语法错误或无法完成请求。 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误。 |
六、Content-Type
Content-Type:用于告诉客户端实际返回的内容是什么类型的,决定浏览器将以什么形式、什么编码读取这个文件。
语法格式:Content-Type: text/html; charset=utf-8
常见的媒体格式类型如下:
序号 | Content-Type | 格式 |
1 | text/html | HTML格式 |
2 | text/plain | 纯文本格式 |
3 | text/xml | XML格式 |
4 | image/gif | gif图片格式 |
5 | image/jpeg | jpg图片格式 |
6 | image/png | png图片格式 |
7 | application/xhtml+xml | XHTML格式 |
8 | application/xml | XML数据格式 |
9 | application/atom+xml | Atom XML聚合格式 |
10 | application/json | JSON数据格式 |
11 | application/pdf | pdf格式 |
12 | application/msword | Word文档格式 |
13 | application/octet-stream | 二进制流数据(如常见的文件下载) |
14 | application/x-www-form-urlencoded | 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式) |
15 | multipart/form-data | 需要在表单中进行文件上传时,就需要使用该格式 |