面试突击:了解 HTTP 协议吗?

开发 前端
响应报头和请求报头类似,也是以 "name: value" 的形式存在的,每个报头占一行。常见的报头有 Content-Type,它是用于描述响应正文的数据类型的,常见的数据类型有:json 格式的 application/json 和 HTML 格式的 text/html。

HTTP(Hyper Text Transfer Protocol)超文本传输协议,下文简称 HTTP,它的作用是用于实现服务器端和客户端的数据传输的。它可以传输任意的数据类型,如文本、HTML、图片、文件、声音等类型。

简单来说,HTTP 的作用就像一个“快递”一样,用来承载客户端(浏览器)和服务器端的数据传输,如下图所示:

图片

1.HTTP 特点

  • HTTP 的主要特点有以下 5 个:
  • 简单快速:客户端向服务器端发送请求时,只需传递请求方法、路径和请求参数,因为协议简单,所以使得 HTTP 服务器的程序规模小,因而通信速度很快。
  • 无连接:所谓的无连接指的是,每次连接只处理一个请求。服务器处理完客户的请求后,会立即断开连接。
  • 无状态:HTTP 不会记录每次请求的身份信息,因此前一次请求和后一次请求相互“不认识”。
  • 可传递任意数据类型:HTTP 允许传输任意数据类型,只需要在请求头中标识数据类型 Content-Type 即可。
  • 一对一通讯:每次 HTTP 请求,都是一个客户端对应一个服务器端。

2.HTTP 组成

HTTP 是由以下 2 部分组成的:

  • 请求对象 Request(客户端请求)。
  • 响应对象 Response(服务器响应)。

每次 HTTP 请求都是由一次请求和一次响应构成的,如下图所示:

图片

2.1 请求对象

请求对象包含 4 部分内容:

  • 请求行
  • 请求报头
  • 空行
  • 请求正文

如下图所示:

图片

2.1.1 请求行

请求行包含了以下 3 部分内容:

  • 请求类型 Method,如 GET。
  • 请求的 URL 地址,如 https://www.baidu.com。
  • HTTP 版本号,如 HTTP/1.1。

其中,所有的请求类型如下:

图片

2.1.2 请求报头

请求报头是在发送请求时,描述更多的请求信息的,它以 "name: value" 的形式存在的,每个请求报头占一行。常见的请求报头有以下几个:

  • Host:表示服务器端的地址和端口号。
  • Content-Type:用于描述请求正文中的数据类型,常见的类型有:json 格式的 application/json、表单格式的 application/x-www-form-urlencoded、文件格式的 multipart/form-data 等。
  • Content-Length:用于描述请求正文中的数据长度,需要注意的是,这里的数据长度统计单位为字节而非字符。
  • User-Agent:用户代理信息,比如访问用户的系统信息,浏览器类型和版本信息等。

2.1.3 空行

一个没有任何内容的空行,用于分隔请求报头和请求正文的特殊组成部分。

2.1.4 请求正文

业务系统中要传递参数。

2.2 响应对象

响应对象也是由 4 部分内容组成的:

  • 状态行
  • 响应报头
  • 空行
  • 响应正文

如下图所示:

图片

2.2.1 状态行

状态行用于描述服务器的返回状态,它由 3 部分组成:

  • HTTP 版本号,如 HTTP/1.1。
  • 状态码,如 200。
  • 状态描述信息,如 OK。

常见的状态码有以下几个:

  • 200:返回成功。
  • 301:永久重定向。
  • 302:临时重定向。
  • 404:未找到页面。
  • 500:服务器程序出错。

2.2.2 响应报头

响应报头和请求报头类似,也是以 "name: value" 的形式存在的,每个报头占一行。常见的报头有 Content-Type,它是用于描述响应正文的数据类型的,常见的数据类型有:json 格式的 application/json 和 HTML 格式的 text/html。

2.2.3 空行

一个没有任何内容的空行,用于分隔状态行和响应正文的特殊组成部分。

2.2.4 响应正文

返回给客户端的所有数据。

责任编辑:武晓燕 来源: Java面试真题解析
相关推荐

2021-03-28 09:26:30

HttpHttp协议网络协议

2022-07-20 07:29:55

TCPIP协议

2022-04-20 07:47:00

notify唤醒线程JVM

2022-07-27 07:36:01

TCP可靠性

2022-06-01 12:00:54

HTTP状态码服务端

2018-04-17 16:29:24

Java面试HTTP

2014-07-01 09:46:30

HTTP

2019-07-23 09:30:17

HTTP 2.0HTTP协议传输

2014-10-22 09:36:41

TCPIP

2022-06-22 07:34:05

自增列MySQL

2018-03-12 11:22:48

HTTP面试状态码

2022-07-06 07:35:19

group byMySQL

2022-08-02 06:31:32

Java并发工具类

2022-07-26 08:40:42

Java并发工具类

2017-05-26 10:35:13

前端HTTP

2023-06-08 11:57:15

Matter协议家庭智能

2021-05-18 08:31:46

缓存HTTP服务器

2022-06-30 08:14:05

Java阻塞队列

2021-08-29 18:01:57

HTTP协议版本

2022-02-28 07:01:22

线程中断interrupt
点赞
收藏

51CTO技术栈公众号