HTTP协议

        HTTP是一种用于传输数据的协议(超文本传输协议)是客户端与服务器通信的一种标准。

客户端和服务器都遵循HTTP协议,就能从彼此发送的信息中提取自己想要的数据

http协议的特点

简单 使用的   请求-响应模型 客户端向服务器发送请求,才能得到服务器的响应信息
无状态 服务器不会跟踪客户端的状态信息

客户端和服务器之间,请求/响应完成以后,建立的连接会断开。

服务器会认为每次请求的用户都是新用户,无法区分两次请求的用户是否为同一个用户

短连接 占用80端口 请求/响应完成后,建立的连接会立即关闭,连接时间很短,这样就可以释放服务器资源,下一次请求需要重新建立TCP连接
长连接 http1.1后推出 在客户端和服务器之间响应结束后,并不会马上断开,而是会持续一段时间,在该时间内,如果还有链接资源需要下载,则不会重新建立连接,从而提高访问效率

http协议的处理流程

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

  2. 客户端向服务器 发送http请求

  3. 服务器 产生http响应信息

  4. 关闭连接

http协议请求信息的组成

请求行 描述请求方式、请求URL路径、http协议版本
请求头 以键值对方式描述客户端相关的信息
空行 表示请求头和消息体之间的分隔符
消息体(POST) 描述客户端请求的表单数据
GET /index.html HTTP/1.1   //请求行,指定请求方法、URL和HTTP协议版本
Host: www.example.com     //请求头,指定请求的主机名
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0  //请求头,指定浏览器的User-Agent信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  //请求头,指定客户端能够接受的内容类型及优先级
Accept-Language: en-US,en;q=0.5  //请求头,指定客户端能够接受的自然语言
Accept-Encoding: gzip, deflate   //请求头,指定客户端能够接受的内容编码方式
Connection: keep-alive   //请求头,指定客户端与服务器之间的连接方式
Upgrade-Insecure-Requests: 1  //请求头,指定客户端是否支持HTTPS协议,1表示支持
If-Modified-Since: Tue, 07 Jul 2020 10:00:00 GMT  //请求头,用于实现HTTP缓存,指定上次修改时间
If-None-Match: "etag12345"   //请求头,用于实现HTTP缓存,指定上次响应的ETag值

http协议的请求方式

GETPOST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECT

GET 用于获取资源。GET请求会向服务器请求指定的资源,并返回响应。GET请求可以在URL中传递参数,但是参数会暴露在URL中,不适合传递敏感信息
POST 用于提交数据。POST请求会向服务器提交指定的数据,并返回响应。POST请求可以在请求正文中传递参数,适合传递大量或者敏感的信息
PUT 用于更新资源。PUT请求会向服务器上传指定的资源,如果资源已经存在,会将其更新。PUT请求可以用于创建资源,但是不常用
DELETE 用于删除资源。DELETE请求服务器删除指定的资源。例如文件、数据库记录等等

使用场景

GET

  1. 用户在浏览器中,输入URL路径访问服务器资源

  2. 用户点击超链接

  3. 用户提交表单,表单的method属性为GET,或不写

POST

GET 和 POST 的区别

GET POST
流格式的区别 只有请求行、请求头、空行,表单数据附加在URL后面 有请求头、请求行、空行、消息体,在消息体中描述表单数据
传输性能的区别 只能传输小文本数据;由于URL中会附加我们的表单数据,所以在浏览器中会显示表单数据 可以传输大小文本数据,也可以传输二进制数据;由于表单数据由消息体描述,所以,在浏览器中不会显示表单数据
用途的区别 资源的查找 比如{ 请求静态页面或图形文件 } 数据的传输 比如{ 发送大数据、上传文件、发送密码或其他保密信息的时候 }

http协议的响应信息

状态行 包括HTTP版本、状态码和状态描述
响应头 键值对方式描述服务器相关信息 包括服务器信息、内容类型、内容长度、缓存控制等信息
空行 用于分隔响应头和消息体
消息体 即响应的内容,例如网页HTML代码、图片、音频、视频等
HTTP/1.1 200 OK    //响应行,指定HTTP协议版本、状态码和状态信息
Date: Tue, 07 Jul 2020 10:30:00 GMT  //响应头,指定响应的日期和时间
Content-Type: text/html   //响应头,指定响应的内容类型为text/html
Content-Length: 1234   //响应头,指定响应消息体的长度为1234字节
Server: Apache/2.4.18 (Ubuntu)   //响应头,指定响应的服务器类型和版本号
Last-Modified: Tue, 07 Jul 2020 09:00:00 GMT  //响应头,用于实现HTTP缓存,指定上次修改时间
ETag: "etag12345"   //响应头,用于实现HTTP缓存,指定本次响应的ETag值
Accept-Ranges: bytes   //响应头,指定服务器是否支持分块传输和部分请求
Connection: close   //响应头,指定服务器与客户端之间的连接方式
   //消息体,HTML页面的文档类型声明
   //消息体,HTML页面的开始标签
   //消息体,HTML页面的头部
  Example Page   //消息体,HTML页面的标题
   //消息体,HTML页面的头部结束标签
   //消息体,HTML页面的正文
  

Welcome to Example Page

//消息体,HTML页面的一级标题

This is an example page.

//消息体,HTML页面的段落内容 //消息体,HTML页面的正文结束标签 //消息体,HTML页面的结束标签

http协议的状态码

        HTTP协议的状态码是指服务器向客户端返回的响应状态码,用于表示服务器对请求的处理结果,常见的状态码有以下几种:

1xx(信息性状态码) 表示请求已被接收,需要继续处理
2xx(成功状态码) 表示请求已成功被服务器接收、理解、并接受
3xx(重定向状态码) 表示需要客户端进一步操作才能完成请求
4xx(客户端错误状态码) 表示客户端请求有语法错误或请求无法实现
5xx(服务器错误状态码) 表示服务器未能完成显然有效的请求

常见的状态码:

  • 401 nauthorized:没有进行身份验证或验证未通过。

  • 403 Forbidden:请求被服务器拒绝。

  • 404 Not Found:请求的资源不存在。

MIME类型

        MIME类型用于标识HTTP请求和响应中传输的文件类型。服务器产生响应信息时,告诉客户端发送的是什么数据类型,客户端会根据不同的MIME类型,来决定如何解析响应信息

常用的

text/html HTML文档
text/xml XML格式
image/jpeg JPEG图像文件
application/json JSON数据格式
video/mp4 MP4视频文件

Web服务器

Web服务器一般指“网站服务器,它可以向Web浏览器等客户端提供文档、网站文件和数据文件

        传统 Web服务器 的缺陷:产生响应信息时,只能产生静态的html页面。一旦内容更改,就需要修改网页内容,极大影响了响应信息的灵活性。

辅助应用

        在Web服务器之后增加辅助应用,辅助应用可以在Web服务器接收到客户端请求以后,进行一大堆的业务处理,然后,以数据库为介质动态的返回数据库中的信息。大大增加响应信息的灵活性。

        Java利用 Web容器+servlet 方式作为辅助应用的解决方案。由Web容器进行底层操作,然后预留servlet接口,交给开发者完成业务操作。

Web容器的作用

通讯支持 按照http协议,将请求信息和响应信息,封装成请求对象和响应对象,以便更好的接收和发送数据。
Servlet 声明周期管理 Servlet接口的实现类,由Web容器产生、初始化、方法调用、销毁
线程支持 线程的创建、启动、运行、同步、销毁都由Web容器执行
JSP 支持 负责编写JSP引擎,对JSP页面进行翻译
处理安全性 tomcat 源自于apache软件 基金会 Jakarta项目。免费、开源

Servlet

        Servlet是运行在Web服务器或应用服务器上的Java程序,是Web容器和开发者业务组件通信的标准。由sun规范其功能。

        开发者通过实现Servlet接口书写业务操作,Web容器通过Servlet接口调用方法,可以屏蔽开发者业务类的差异。

Servlet 的API结构

        在Servlet 规范中,定义了Servlet业务接口,提供了service()业务方法交给开发者实现。同时,定义了ServletConfig配置接口,用于读取Servlet初始化信息。

        GenericServlet同时实现了Servlet和ServletConfig两个接口,并且重写了大部分方法。但是,没有重写service()方法,该方法应该由子类根据协议的特点去重写。

HtppServlet是GenericServlet的子类,根据http协议的特点重写了service方法。在service

方法中,根据不同的请求方式,分别去调用doXXX()。

你可能感兴趣的:(JavaWeb,http,服务器)