HTTP
EE概述及HTTP协议
SE:Standard Edition。标准版、个人版。个人开发者来使用的
EE:Enterprise Edition。企业版。面向企业的,要解决企业开发的难题。
客户端向服务器发送请求,服务器通过jdbc向数据库获取数据并返回给客户端
客户端和服务器之间需要进行传递信息来进行通讯。信息的格式其实就是要符合HTTP协议的要求。
协议?规范、定义、规定。
**双方在发送信息时,应当具有的格式。**双方在通讯的过程中传递的信息比较多,不是像之前一样,一句话就可以解决了。具有某种特定的格式,否则双方无法正确解析拿到里面的数据。
甲乙双方,需要通过网络来传输学生的信息,乙方根据学生的性别安排宿舍。
甲方:
姓名 年龄 性别 籍贯
张三 25 男 湖北省武汉市
李四 26 男 上海市
王五 22 女 北京市
…
乙方:
拿到完整的字符信息,利用换行符分割出的是每个学生信息,接下来每个学生信息再利用空格进行分割,第三部分就是性别
乙方能够这么去做的前提是什么?
甲方发送时按照规定的格式来进行发送
拓展:
如果今后还想去获取学生的籍贯,做一个统计,需要再次解析一遍吗?
如何能够一次解析,后面每次都方便使用?
封装数据到对象中。-----ServletRequest
HTTP协议:
HTTP:Hyper Text Transfer Protocol
超文本传输协议
超文本:不仅可以传输文本、还可以传输其他二进制等类型
传输:通讯的双方
协议:规范、规定的格式。
通讯双方在传递文本、二进制文件数据时,应当具有的格式。
HTTP和HTML
科研工作者:做实验、写论文
论文应当具有一些特定的格式,HTML
一个实验室有很多科研工作者,相互之间要进行分享
如何把我电脑里面的html和别人进行分享呢?HTTP
网络模型
网络有两种模型–>对网络进行一个逻辑的分层
OSI模型、TCP/IP模型
HTTP的传输需要借助网络模型来传输
模型是逻辑模型,物理上并不存在;分离的目的是为了解耦
HTTP执行流程
1.域名解析:域名是为了方便人的记忆,计算机只能通过ip地址来访问,计算机只认识ip地址,映射关系,DNS解析
- 浏览器先查找自身的DNS缓存,找不到进入下一环节
- 查找操作系统DNS缓存,找不到进入下一环节
- 查找hosts文件,找不到进入下一环节
- 向本地配置的DNS域名解析服务器发送请求,找不到则失败
2.TCP三次握手:建立可靠的TCP连接
如果只有两次握手,会产生重复连接的问题
3.发送HTTP请求:客户端发送的请求信息需要符合HTTP格式
4.服务器作出HTTP响应:服务器接收到HTTP请求信息之后,了解客户端的意图,然后作出响应
5.客户端对服务器返回的响应解析、渲染:服务器一般响应给客户端的是一个html页面,客户端渲染、解析返回给用户
HTTP解析报文
将HTTP请求信息解析
分为四个部分:请求行、请求头、空行、请求体四个部分组成,其中请求头和请求体都是可选的
每个部分结尾都有一个换行符
请求行
由三个部分组成,用空格来分割
依次是请求方法、请求资源、请求版本协议
请求方法
常用的有get和post方法
区别:浏览器默认会在get请求的时候将请求参数放在地址栏后面,在post请求时默认将参数请求放在请求体中
get是用来查询数据
post是用来提交数据
如何发送请求
get:借助于form表单;直接在浏览器输入地址
post:借助form表单
GET http://www.cskaoyan.com/forum.php?username=lisi&password=adassdad HTTP/1.1 Host: www.cskaoyan.com Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Referer: http://localhost:63342/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: cZBD_2132_saltkey=ypIDWw9a; cZBD_2132_lastvisit=1638583888; Hm_lvt_5f3c4e32676aacc710ede84276010d9b=1638587488,1638589228; Hm_lpvt_5f3c4e32676aacc710ede84276010d9b=1638589228; cZBD_2132_sid=zpQ9mM; cZBD_2132_lastact=1638589229%09home.php%09misc; cZBD_2132_sendmail=1
POST http://www.cskaoyan.com/forum.php HTTP/1.1 Host: www.cskaoyan.com Connection: keep-alive Content-Length: 32 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://localhost:63342 Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Referer: http://localhost:63342/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: cZBD_2132_sendmail=1; cZBD_2132_sid=SD7p5G; cZBD_2132_lastact=1638589294%09home.php%09misc; Hm_lvt_5f3c4e32676aacc710ede84276010d9b=1638587488,1638589228,1638589294; Hm_lpvt_5f3c4e32676aacc710ede84276010d9b=1638589294 username=lisi&password=asdasdaww
请求资源
请求资源即访问的网址,服务器在接收到了HTTP报文之后,其实主要就是通过请求资源来区分客户端究竟想访问哪个页面
版本协议
目前使用的版本是1.1版本
1.1与1.0最大的区别就是1.1支持长连接,在一个TCP连接中,可以发送多个HTTP请求响应
1.0建立一个tcp连接,发送HTTP请求,服务器响应,tcp断开
1.0的效率会比较慢
请求头
Accept:浏览器可接受的MIME类型 / (大类型)/(小类型)
MIME:是指将互联网上的资源进行分类,文本、图片、音频、视频类,大类型/小类型的方式将互联网上面的所有资源进行分类的划分。
Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
Accept-Language: 浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到,可以在浏览器中进行设置。
Host:初始URL中的主机和端口
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面 (防盗链)
Content-Type:内容类型
If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT 服务器利用这个头与服务器的文件进行比对,如果一致,则告诉浏览器从缓存中直接读取文件。
User-Agent:浏览器类型.
Content-Length:表示**请求消息正文(请求体)**的长度
Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
Cookie:这是最重要的请求头信息之一
Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT
响应报文
响应行
版本协议、状态码、原因描述
状态码
200 OK 表示整个请求的过程完全正常
301、302、307 重定向。
304 没有修改
404 没有找到(404表示的是有效的响应,只是这个资源在服务器上面不存在,如果请求失败,它不是404,而是failed)
500 服务器错误(代码写的有问题,出bug了)
完整的访问http://www.bing.com的过程
1.地址栏输入域名,浏览器先进行域名的解析,拿到对应的ip地址
浏览器缓存->操作系统缓存->hosts文件->DNS服务器
2.进行TCP的三次握手建立连接
3.浏览器生成请求报文,经过TCP层拆包,打上标签
4.经过IP层,加上发送方和当前方的ip地址,ip头部标签,经过链路层传输出去
5.到达目标机器后,经过ip层,脱去ip标签,经过tcp层,脱去标签,重新组装
6.服务器拿到了HTTP请求报文,进行解析处理,返回302的状态代码,表示需要重定向,同时标注下一次访问应该访问http://cn.bing.com,向客户端发送一个响应报文
7.HTTP响应报文通过网络传输,经过tcp,ip层然后通过链路层出去,到达客户端
8.响应文到达客户端后,再依次经过ip,tcp层,到达应用层,拿到HTTP响应报文发现需要重定向,那么重复上述的步骤重新访问一遍
响应头
Location: http://www.cskaoyan.com/指示新的资源的位置。 需要和重定向状态码搭配一起使用。
Server: apache tomcat 指示服务器的类型
Content-Encoding: gzip 服务器发送的数据采用的编码类型
Content-Length: 80 告诉浏览器正文的长度
Content-Language: zh-cn服务发送的文本的语言
Content-Type: text/html; 服务器发送的内容的MIME类型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改时间
Refresh: 1;url=http://www.cskaoyan.com指示客户端刷新频率。单位是秒
Content-Disposition: attachment; filename=aaa.zip指示客户端保存文件
Set-Cookie: SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie
Expires: 0
Cache-Control: no-cache (1.1)
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
响应体
里面传输的是需要显示在浏览器主窗口的内容。
浏览器主窗口里面显示的内容都是来自于响应体。
HTTPS
http的安全存在以下的问题:
1.通讯过程全程明文传输
2.不验证另一方的身份
3.报文没有进行完整性的校验
https的解决方式:
1.对报文进行加密
采用的方法是混合加密,先进行非对称加密,再进行对称加密;建立连接是非对称,后面传输数据利用非对称加密中的私钥进行对称加密传输数据
2.验证通讯另一方的身份
3.完整性校验