1、http简介
HTTP 超文本传输协议(HTTP-Hyper Text transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过十几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则 ,通过因特网传送万维网文档的数据传送协议。客户端与服务端通信时传输的内容我们称之为 报文 。 HTTP协议规定了报文的格式。 HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为“请求报文”,服务器发送给客户端的称为“响应报文”。
2、http发展
由于http先后发布的版本有HTTP/0.9 、HTTP/1.0 、HTTP/1.1 、HTTP/2 、HTTP/3等,由于后面的内容基本都是基于HTTP/1.1版本的,所以本章节主要详细说明该版本。
2.1 HTTP/1.1 基本概念
(1)HTTP 的第一个标准化版本 HTTP/1.1(RFC 2068)于 1997 年初发布,支持七种请求方法OPTIONS, GET, HEAD, POST, PUT, DELETE, 和TRACE 。
(2)HTTP/1.1 是 HTTP 1.0 的增强:
- 虚拟主机允许从单个IP 地址提供多个域;
- 持久连接和流水线连接允许 web 浏览器通过单个持久连接发送多个请求;
- 缓存支持节省了带宽并使响应速度更快。
(3)HTTP/1.1 在接下来的 15 年左右将非常稳定。
(4)在此期间,出现了 HTTPS(安全超文本传输协议)。它是使用 SSL/TLS 进行安全加密通信的 HTTP的安全版本。
2.2 HTTP协议的会话方式
浏览器与服务器之间的通信过程要经历四个步骤。
- 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
- 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。
3、http长连接和短连接
3.1 前提条件
(1)http协议也称为 http/tcp/ip 协议,所以它是面向连接的协议:
- http是应用层协议,它规定了数据有什么、数据格式是什么,但是怎么发它不管。
- tcp是传输层协议,http默认使用tcp协议来传输数据。
- ip是网络层协议,http通过ip地址来确定传输的对象。
(2)由于它是面向连接的协议,所以它连接的时候会出现三次握手,断开连接的时候会出现四次挥手。
3.2 长连接和短连接
上面仅仅是连接,那么长连接和短连接是什么呢?
首先看框框的代码
(1)短连接
(2)长连接
3.3 缓存
4、请求和响应报文
4.1 报文的格式
主体上分为报文首部和报文主体,中间空行隔开:
4.2 请求报文
(1)客户端发给服务端的报文:
(2)请求报文格式
- 请求首行(请求行)。GET/POST 资源路径?参数 HTTP/1.1;
- 请求头信息(请求头);
- 空行;
- 请求体;
(3)请求行:请求方式、资源路径、协议及版本。
(4)请求头
-主机虚拟地址
Host:localhost:8888
-长连接
Connection:keep-alive
-请求协议的自动升级[http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的]Upgrade-Insecure-Requests:1
-用户系统信息
User-Agent: Mozilla/5.8 (Windows NT 6.1; WOW64)AppleWebKit/537.36 (KHTML, like Gecko)Chrome/68.0.3440.75 Safari/537.36
-浏览器支持的文件类型
Accept:text/html,application/xhtml+xml,application/xml;q=0.9, image/webp, image/apng, */*;q=8.8
-当前页面的上一个页面的路径[当前页面通过哪个页面跳转过来的]:可以通过此路径跳转回上一个页面,告计费,防止盗链
Referer:http://localhost:8080/05_web_tomcat/login.html
-浏览器支持的压缩格式
Accept-Encoding:gzip, deflate, br
-浏览器支持的语言
Accept-Language:zh-CN,zh;q=0.9,en-uS;q=0.8,en;g=0.7
(5)请求体:使用form表单发送POST请求,请求体中才有数据。
4.3 响应报文
(1)服务端发给客户端的报文。
(2)响应报文格式:
- 响应首行(响应行):协议/版本 状态码 状态码描述;
- 响应头信息(响应头);
- 空行;
- 响应体。
(3)响应行:协议及版本、响应状态码、状态描述。
(4)响应头:
Server:Apache-Coyote/1.1 服务器的版本信息
Accept-Ranges:bytes
ETag: W/"157-1534126125811"
Last-Modified:Mon,13 Aug 2018 02:88:45 GMT
Content-Type:text/html 响应体数据的类型[浏览器根据类型解析响应体数据]
Content-Length:157 响应体内容的字节数
Date: Mon,13 Aug 2018 02:47:57 GMT 响应的时间,这可能会有8小时的时区差
(5)响应体,响应某个页面或者某张图片
(6)响应状态码:响应码对浏览器来说很重要,它告诉浏览器响应的结果。比较有代表性的响应码如下:
- 200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
- 302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location指定新请求的URL地址;
- 304:使用了本地缓存;
- 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
- 405:请求的方式不允许:。
5、GET 与 POST 区别
请求 | GET | POST |
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 |
书签 | 可收藏为书签 | 不可收藏为书签 |
浏览器缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded or multipart/form-data。为二进制数据使用多重编码。 |
历史 | 参数保留在浏览器历史中。 | 参数不会保存在浏览器历史中。 |
对数据长度的限制 | 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 | 无限制。 |
对数据类型的限制 | 只允许 ASCII 字符。 | 没有限制。也允许二进制数据。 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。 | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |
本文为学习笔记,所参考文章均已附上链接,若有疑问请私信!
创作不易,如果对你有点帮助的话麻烦点个赞支持一下!
新手小白,欢迎留言指正!