1.HTTP协议简介
1.1 网络基础TCP/IP协议族
- 网络中的设备要进行通信,必须遵循一些相同的规则,这些规则我们称之为协议。网络中存在这多种协议,如:TCP、IP、HTTP、FTP等。这些协议我们统称为TCP/IP协议族,有时也简称为TCP/IP协议。网络是在TCP/IP基础上运作的。协议中存在各式各样的容。从电缆的规格到 IP 地址的选定方法、寻找异地用户的方法、双方建立通信的顺序,以及 Web 页面显示需要理的步骤,等等。
- TCP/IP 协议族里重要的一点就是分层。TCP/IP 协议族按层次分别分为以下 4 层:
- 应用层
- 应用层为用户提供常用的应用程序,并实现网络服务的各种功能。
- 传输层
- 传输层负责组装收到的数据(或者拆分要发送的数据)。
- 网络层
- 控制数据包的发送和接收。
- 数据接口层。
- 处理网络连接的硬件部分(路由器、网卡等)。
- 应用层
- 把TCP/IP层次化的好处是,如果网络中的信息的传输由一个协议统筹,如果某个地方的设计发生改变则需要修改整个协议,而采用分层结构之后,只需要将需要变动的层换掉即可。
- TCP/IP通信示意图:

1.2 HTTP协议
- HTTP(hypertext transport protocol),即超文本传输协议。这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。
- 客户端与服务端通信时传输的内容我们称之为报文。
- HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为”请求报文“,服务器发送给客户端的称为”响应报文“。
- 报文
3.1 报文格式

3.2 请求报文
3.1.1 报文格式
|
请求首行; 请求头信息; 空行; 请求体; |
3.1.2 GET请求
GET /index.html?username=admin HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
X-HttpWatch-RID: 65553-10068
Referer: http://127.0.0.1:3000/form.html
Accept-Language: zh-CN,en-US;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:3000
DNT: 1
Connection: Keep-Alive
请求报文的结构
请求首行
GET /index.html?username=admin HTTP/1.1
请求方法 请求的路径?查询字符串 协议名/协议版本
(get请求通过查询字符串将请求参数发送给服务器)
请求头
- 通过观察发送,请求头实际上是一个一个的名值对结构,有的是一个名字对应一个值,有的是一个名字对应多个值
请求头中的内容,用来告诉服务器浏览器的一些信息
Accept: text/html, application/xhtml+xml, */*
- 浏览器可以接受的数据类型:后边的值都是一个一个的MIME值
*/* 表示任意类型的文件
Referer: http://127.0.0.1:3000/form.html
- 请求的来源:1.广告计费 2.防止盗链
Accept-Language: zh-CN,en-US;q=0.5
- 客户端使用的语言:zh-CN表示中文简体
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
- 用户代理、用户的浏览器的信息
Accept-Encoding: gzip, deflate
- 允许的压缩格式:
Host: 127.0.0.1:3000
- 主机地址
Connection: Keep-Alive
- 连接时间:Keep-Alive 表示当前连接是一个长连接
空行
请求体
- get请求没有请求体,所以空行对于get请求没有意义
3.1.3 POST请求
POST /index.html HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
X-HttpWatch-RID: 65553-10094
Referer: http://127.0.0.1:3000/form.html
Accept-Language: zh-CN,en-US;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:3000
Content-Length: 14
DNT: 1
Connection: Keep-Alive
Cache-Control: no-cache
username=admin
请求首行
POST /index.html HTTP/1.1
请求头
Accept: text/html, application/xhtml+xml, */*
Referer: http://127.0.0.1:3000/form.html
Accept-Language: zh-CN,en-US;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Content-Type: application/x-www-form-urlencoded
- 请求体的类型:application/x-www-form-urlencoded 表示请求体中的内容将会被url编码
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:3000
Content-Length: 14
- 请求体的长度
Connection: Keep-Alive
Cache-Control: no-cache
- 缓存控制:no-cache不使用缓存
空行
- 空行用来分隔请求首部和请求体
请求体
username=admin
- post请求的请求参数都是通过请求体发送的
get请求 和 post请求
1.除了表单的method设置为post时发送的请求,其余的全都是get请求(没有考虑AJAX的情况)
2.get请求通过url地址发送请求参数,请求参数可以直接在地址栏查看,安全性较差
post请求通过请求体发送请求参数,请求参数不能直接看见,所以相对安全
3.url地址的长度现在255个字节,所以使用get请求发送的参数不能太多,
请求体的大小没有限制,可以发送任意多的内容,使用post请求想发什么就发什么
4.在开发中,一般情况在提交表单时都应该使用post,而不使用get
3.3 响应报文
3.2.1 报文格式
|
响应首行; 响应头信息; 空行; 响应体; |
HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Sat, 23 Sep 2017 03:42:06 GMT
ETag: W/"cc-15eacd3f837"
Content-Type: text/html; charset=UTF-8
Content-Length: 204
Date: Sat, 23 Sep 2017 06:11:16 GMT
Connection: keep-alive
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<h1>这是一个设计非常精良的网页</h1>
<img src="an.jpg" alt="">
</body>
</html>
响应首行
HTTP/1.1 200 OK
协议名/协议版本 响应状态码 响应状态码的描述
- 常见的响应状态码
200
- 200表示响应成功, 2开头的全都表示成功
302
- 302表示请求重定向,3开头的全都和重定向相关
表示服务器要求浏览器重新再发一个请求,
服务器会发送一个响应头Location,它指定了新请求的URL地址;
404
- 404表示资源未找到,4开头的全都是客户端的错误
500
- 500表示服务器内部错误,5开头的全都是服务器的错
响应头
Accept-Ranges: bytes
- 允许的单位
Cache-Control: public, max-age=0
- 缓存的控制:
Last-Modified: Sat, 23 Sep 2017 03:42:06 GMT
- 最后的修改时间
ETag: W/"cc-15eacd3f837"
- 网页的标识
Content-Type: text/html; charset=UTF-8
- 响应体的类型:
Content-Length: 204
- 响应体的大小
Date: Sat, 23 Sep 2017 06:11:16 GMT
- 响应的时间:
Connection: keep-alive
- 连接:长连接
空行
- 空行用来分割响应首部 和 响应体
响应体
- 响应体就是服务器发送给客户端的主要内容,如果是网页,响应体就是网页的代码
如果是图片,响应体就是图片的二进制编码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<h1>这是一个设计非常精良的网页</h1>
<img src="an.jpg" alt="">
</body>
</html>
2756

被折叠的 条评论
为什么被折叠?



