一、HTTP协议(应用层协议)
1、HTTP 协议简介
http :超文本传输协议,是万维网的数据传输的基础,广泛应用的版本 : HTTP 1.1
HT = HyperText
T= Transfer
P= Protocol
2、HTTP 协议概述
HTTP 是一个 客户端终端 和服务器端 请求和应答的标准(TCP)
通常,客户端发起一个 HTTP 请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。
HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息
3、HTTP 工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
HTTP 请求/响应的步骤:
(1): 客户端连接到Web服务器(客户端和服务端建立连接)
一个HTTP客户端(浏览器)与Web服务器的HTTP端口(默认8000)建立一个TCP套接字连接
(2):发送HTTP请求(客户端向服务端发送请求)
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由 请求首行、请求头、空行(\r\n :区分请求头和请求体)、请求体 4部分组成
(3):服务器接受请求并返回HTTP响应(服务器接受并响应)
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,有客户端读取。一个响应由状态行,响应头部,空行、响应数据4部分组成
(4):释放TCP连接
两种 connection 模式:
a: close() 服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接
b: keep-alive() 连接会保持3秒,该段时间可以继续接收请求
(5):客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。
然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
4、URL :统一资源定位符,用来确定互联网中的唯一资源。
超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:
以http://www.baidu.com:80/news/index.html?id=250&page=1 为例, 其中:
(1)http/https 传送协议。
(2)层级URL标记符号(为[//],固定不变)
(3)访问资源需要的凭证信息(可省略)
(4)www.baidu.com 服务器。(通常为域名,有时为IP地址)
(5)80 端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
(6)/news/index.html 路径。(以“/”字符区别路径中的每一个目录名称)
(7)?id=250&page=1 参数查询。(GET模式的请求参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
5、HTTP请求格式
a:请求首行: 请求方法(get、post) URL(请求路径 例如 /aa/bb/a.txt) 协议版本(HTTP/1.1) \r\n
b:请求头分析:
1、Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
表示客户端可以接受的内容类型, 多个值使用;分号隔开 q=0.9 表示权重优先级,*/*表示可以接受任意类型内容;
2、Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
表示客户端可以接受的语言
3、User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64;
浏览器信息,例如使用的是网井的内核, windows64位系统;
4、Accept-Encoding: gzip, deflate 支持的压缩格式
5、Host: localhost:8888 访问地址
6、Connection: keep-alive 保持连接 和HTTP1.1版本有关,默认保持3s
7、Content-Type: application/x-www-form-urlencoded 表单提交时才有可能出现,表示表单的数据类型,使用url编码,url编码 % 16位数
8、Content-Length: 7 post请求 请求体长度
9、Upgrade-Insecure-Requests: 1 告诉服务器,浏览器可以处理https协议、
c:请求空行分析: \r\n
就是一个分隔符,用来区分请求头和请求体的;
d:请求体分析:
只有POST请求才有请求体, 因此 POST请求 请求体中存放的是表单提交的键值对。
name=’zs’&age=10
6、HTTP相应格式
a:响应首行(状态行)分析:
HTTP/1.1 200 OK 包含 协议-->>HTTP/1.1, 响应码(状态码)--->>200 , 状态码描述--->>OK
状态码:
200: 服务器很好的处理了客户端的请求,一切 OK
302: 重定向 客户端需要进行2次请求
304:通常表示资源文件在服务器没有更改,而浏览器端又有缓存,这时候回送 304 状体码通知浏览器拿本地的缓存显示
404:表示客户端访问的资源路径有问题或者资源问题不存在
500:表示服务器出现了 异常.
b:响应头部分析:
1、server: Apache-Coyote/1.1--->> 服务器版本号
Set-Cookie: JSESSIONID=ECA8005D1235BBB6B9CFCC338A8206FD;
Path=/03test; HttpOnly学cookie时在讲
2、Content-Type: text/html;charset=ISO-8859-1响应字符集,告诉浏览器以什么样的字符集解码;
3、Content-Length: 265 响应体长度
4、Date: Fri, 23 Jun 2017 13:45:01 GMT 发送日期 少8个小时;(我们是东八区,世界时间快8个小时)
5、Expires: -1、Cache-control:no-cache、Pragma:no-cache 三个响应头一起使用, 表示禁止浏览器缓存当前页面. 每个浏览器厂商对认识的禁止头不同因此三 个一起使用。