【Java之HTTP】

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.完整性校验

你可能感兴趣的:(#,JAVA精选毕设,java,http,开发语言)