JavaEE精选-HTTP

简介: JavaEE精选-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.完整性校验

目录
相关文章
|
28天前
|
Java
【JavaEE初阶】 HTTP响应报文
【JavaEE初阶】 HTTP响应报文
|
28天前
|
存储 Web App开发 缓存
【JavaEE初阶】 HTTP 请求 (Request)详解
【JavaEE初阶】 HTTP 请求 (Request)详解
|
28天前
|
Web App开发 网络协议 前端开发
【JavaEE初阶】 HTTP协议和使用Fiddler抓包
【JavaEE初阶】 HTTP协议和使用Fiddler抓包
|
XML 前端开发 JavaScript
【JavaEE】HTTP状态码-HTTP数据报的构造
JavaEE & HTTP状态码 & HTTP数据报的构造
154 0
|
存储 缓存 JSON
【JavaEE】HTTP应用层协议
是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而 [9] 消息内容则具有一个类似MIME的格式。
83 1
|
Java Apache Android开发
eclipse JavaEE版"javax.servlet.http.HttpServlet" was not found on the Java Build Path问题的解决办法
使用eclipse JavaEE 版,新建 Dynamic Web Project 项目。在项目里添加 JSP 文件,会在文件头部出现错误提示。提示语句为:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path。
1767 0
|
缓存 网络协议 Java
|
Web App开发 新零售 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
1.尽可能地了解需求,系统层面适用开闭原则 2.模块化,低耦合,能快速响应变化,也可以避免一个子系统的问题波及整个大系统 3.
718 0