HTTP协议

69 阅读5分钟

HTTP协议

概念

http协议称为超文本传输协议,是客户端与服务器通信的一种标准。客户端和服务器都遵循http协议,就能从彼此发送的信息中提取自己想要的数据。

特点

1、http协议遵循的是请求/响应模式

2、http协议是一种无状态的协议

当请求/响应完成以后,客户端和服务器的连接会断开。所以,服务器无法知道两次请求的用户是否为同一个用户。

3、http协议占用80端口

工作流程

1、客户端和服务器建立连接

2、客户端发送http请求

3、服务器产生http响应

4、关闭连接

请求信息

http协议的请求信息分为:请求行、请求头、空行、消息体

请求行:描述请求方式,请求URL路径、http协议版本

请求头:以键值对方式描述客户端相关的信息

空行:标识请求头的结束

消息体:(POST)描述客户端请求的表单数据

请求方式

http协议请求方式有8种:

GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE,CONNECT; 其中 GET、POST是最常用的两种。

GET请求

1、浏览器输入URL路径为GET请求

2、用户点击超链接为GET请求

3、用户提交表单,默认为GET请求,method属性为GET时,也就是GET请求

POST请求

GET和POST的区别

1、流格式的区别:

GET请求:只有请求行、请求头、空行;会将表单数据附加在URL后面。

POST请求:有请求行、请求头、空行、消息体;在消息体中附加表单数据。

2、传输性能的区别

GET请求:不能传输大数据,只能传输小文本数据。

POST请求:可以传输大数据,同时可以传输文本数据,以及二进制数据;数据的传输相对安全。

3、用途的区别

GET请求:用于服务器资源查找。

POST请求:用于数据的传输。

响应信息

http协议的响应信息分为四部分:状态行、响应头、空行、消息体。

状态行:描述http协议版本、状态码、响应描述。

响应头:以键值对方式描述服务器相关的信息。

空行:标识响应头的结束。

消息体:服务器发送给客户端的具体数据。

状态码

http协议状态有5种:

100-199:表示客户端请求服务器在进行中。

200-299:表示客户端请求成功。

300-399:表示资源移走,请求新的地址。

400-499:表示客户端引发的错误。

500-599:表示服务器端引发的错误。

MIME类型

MIME类型用于服务器端发送数据给客户端时,告诉客户端浏览器以什么格式来解析响应信息体内容。

常见的MIME类型

text/html:html网页数据

Image/jpeg:JPG 图片数据

application/json:json 格式数据

text/xml:xml 格式数据

传统的 WEB服务器的缺陷:

传统的 WEB服务器在接收到客户端请求后,只能将静态的html信息发送给客户端,极大的影响了响应信息的灵活性。

解决方案:

在传统的 WEB服务器接收到客户端请求后,交由辅助应用进行处理。辅助应用可以利用数据库做为存储介质,将请求信息进行处理后,动态的产生响应信息。

java 利用 WEB容器 + Servlet 方式做为辅助应用解决方案的。

WEB容器

在java中,WEB容器完成底层操作。预留Servlet接口,交给开发者书写业务操作。WEB容器调用Servlet业务方法,动态产生响应信息。

作用

WEB容器的作用:

1、通讯支持

WEB 容器需要将请求信息和响应信息封装成请求对象和响应对象,以便更好的接收和发送数据。

2、Servlet生命周期管理

Servlet是WEB 容器预留给开发者的接口。开发者实现了Servlet接口后,可以书写相关的业务处理操作。Servlet实现类对象的产生、销毁、方法调用,全部由WEB容器管理。

3、线程支持

由于服务器需要接收多个客户端的同时访问,WEB容器采用多线程来进行多任务处理。

线程创建、启动、运行、同步等,都由WEB容器管理。

4、JSP支持

由于是WEB 容器编写 JSP 引擎,对 JSP 页面进行翻译。

5、处理安全性

tomcat

tomcat 源自于 apache 软件基金会 Jakarta 项目。tomcat 是一款免费的、开源的、性能稳定、技术成熟的 WEB 容器产品。

在 maven 工程中,导入tomcat:

org.apache.tomcat.embed tomcat-embed-core 9.0.36

Servlet 的 API 结构

在 Servlet 规范中,Servlet 是业务接口,预留 service 方法,交给开发者书写业务操作。ServletConfig 为配置接口。GenericServlet 同时实现了 Servlet、ServletConfig 两个接口,并重写了大部分方法,但是没有实现 service() 。该方法应该由 GenericServlet 的子类,根据协议的特点分别实现。HttpServlet 继承了 GenericServlet,根据 Http 协议的特点,重写了 service() ,根据不同的请求方式调用doXX() 。