1. HTTP 协议概述
1.1 概念
HTTP 的全称是:Hyper Text Transfer Protocol,意为 超文本传输协议。
它指的是服务器和客户端之间交互必须遵循的一问一答的规则。形容这个规则:问答机制、握手机制。
它规范了请求和响应内容的类型和格式。
HTTP 协议是由 W3C 组织管理和维护的。
1.2 版本
目前HTTP协议主要是 1.0 版本和 1.1 版本。这两个版本的区别主要是两个方面。
第一:HTTP1.1 版本比 1.0 版本多了一些消息头。
第二:HTTP1.1 版本和 1.0 版本的执行过程不一样。执行过程如下:
HTTP1.0 | HTTP1.1 |
创建连接(TCP/IP) | 创建连接(TCP/IP) |
发送请求 | 发送请求1 |
得到响应 | 得到响应1 |
关闭连接 | 发送请求2 |
创建连接(TCP/IP) | 得到响应2 |
发送请求 | … |
得到响应 | … |
关闭连接 | 连接超时或手动关闭连接 |
HTTP 协议概念是客户浏览器和服务器一种一问一答的规则,那么必须要有问有答,而且要先问后答。但是我们使用
2. HTTP 协议组成
由 HTTP 协议的概念可知,它分为问和答两部分。其中问指的就是 请求部分,而答指的就是 响应部分。
2.1 请求部分
请求行: 永远位于请求的第一行
请求消息头: 从第二行开始,到第一个空行结束
请求的正文: 从第一个空行后开始,到正文的结束
2.2 响应部分
响应行: 永远位于响应的第一行
响应消息头: 从第二行开始,到第一个空行结束
响应的正文: 从第一个空行后开始,到正文的结束
2.3 消息的共性分析
消息头名称首字母大写,多个单词每个单词的首字母都大写。
多个单词用 - 分隔
名称和值之间用 冒号加空格 分隔
多个值之间用 逗号加空格 分隔
两个头之间用 回车 分隔
3. 请求部分详解
3.1 请求行详解
请求行:GET
/myapp/2.html HTTP/1.1
内容 | 说明 |
GET | 请求的方式。(还有POST) |
/myapp/2.html | 请求的资源。 |
HTTP/1.1 | 使用的协议,及协议的版本。 |
3.2 请求消息头详解
内容 | 说明 |
Accept | 告知服务器,客户浏览器所支持的MIME类型。 |
Accept-Encoding | 告知服务器,客户浏览器所支持的压缩编码格式。最常用的就是gzip压缩。 |
Accept-Language | 告知服务器,客户浏览器所支持的语言。一般都是zh_CN或en_US等。 |
Referer | 告知服务器,当前请求的来源。 只有当前请求有来源的时候,才有这个消息头。从地址栏输入的没有来源。 作用:1 投放广告 2 防盗链 |
Content-Type | 告知服务器,请求正文的MIME类型。 |
Content-Length | 告知服务器,请求正文的长度。 |
User-Agent | 浏览器相关信息 |
Connection: Keep-Alive | 连接的状态:保持连接 |
If-Modified-Since | 告知服务器,客户浏览器缓存文件的最后修改时间。 |
Cookie() | 会话管理相关,非常的重要。 |
3.3 请求正文详解
第一:只有post请求方式,才有请求的正文。get方式的正文是在地址栏中的。
第二:表单的输入域有name属性的才会被提交。不分get和post的请求方式。
第三:表单的enctype属性取值决定了请求正文的体现形式。概述的含义是:请求正文的MIME编码类型。
enctype取值 | 请求正文体现形式 | 示例 |
application/x-www-form-urlencoded | key=value&key=value | username=test&password=1234 |
multipart/form-data |
此时变成了多部分表单数据。多部分是靠分隔符分隔的。 |
-----------------------------7df23a16c0210 Content-Disposition: form-data; name=“username” test -----------------------------7df23a16c0210 Content-Disposition: form-data; name=“password” 1234 -----------------------------7df23a16c0210 Content-Disposition: form-data; name=“headfile”; filename=“C:\Users\snow\Desktop\请求部分.jpg” Content-Type: image/pjpeg -----------------------------7df23a16c0210 |
4. 响应部分详解
4.1 响应行详解
响应行:HTTP/1.1 200 OK
内容 | 说明 |
HTTP/1.1 | 使用协议的版本。 |
200 | 响应状态码 |
OK | 状态码描述 |
常用状态码介绍:
状态码 | 说明 |
200 | 一切都OK> |
302/307 | 请求重定向(客户端行为,两次请求,地址栏发生改变) |
304 | 请求资源未发生变化,使用缓存 |
404 | 请求资源未找到 |
500 | 服务器错误 |
4.2 响应消息头详解
消息头 | 说明 |
Location | 请求重定向的地址,常与302,307配合使用。 |
Server | 服务器相关信息。 |
Content-Type | 告知客户浏览器,响应正文的MIME类型。 |
Content-Length | 告知客户浏览器,响应正文的长度。 |
Content-Encoding | 告知客户浏览器,响应正文使用的压缩编码格式。常用的gzip压缩。 |
Content-Language | 告知客户浏览器,响应正文的语言。zh_CN或en_US等等。 |
Content-Disposition | 告知客户浏览器,以下载的方式打开响应正文。 |
Refresh | 定时刷新 |
Last-Modified | 服务器资源的最后修改时间。 |
Set-Cookie(*******) | 会话管理相关,非常的重要 |
Expires:-1 | 服务器资源到客户浏览器后的缓存时间 |
Catch-Control: no-catch | 不要缓存,//针对http协议1.1版本 |
Pragma:no-catch | 不要缓存,//针对http协议1.0版本 |
4.3 响应正文详解
就和我们在浏览器上右键查看源文件看到的内容是一样的。
<html> <head> <link rel="stylesheet" href="css.css" type="text/css"> <script type="text/javascript" src="demo.js"></script> </head> <body> <img src="1.jpg" /> </body> </html>