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

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

1.HTTP 特点

HTTP 的主要特点有以下 5 个:

  1. 简单快速:客户端向服务器端发送请求时,只需传递请求方法、路径和请求参数,因为协议简单,所以使得 HTTP 服务器的程序规模小,因而通信速度很快。

  2. 无连接:所谓的无连接指的是,每次连接只处理一个请求。服务器处理完客户的请求后,会立即断开连接。

  3. 无状态:HTTP 不会记录每次请求的身份信息,因此前一次请求和后一次请求相互“不认识”。

  4. 可传递任意数据类型:HTTP 允许传输任意数据类型,只需要在请求头中标识数据类型 Content-Type 即可。

  5. 一对一通讯:每次 HTTP 请求,都是一个客户端对应一个服务器端。

    2.HTTP 组成

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

  6. 请求对象 Request(客户端请求)。

  7. 响应对象 Response(服务器响应)。

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

2.1 请求对象

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

  1. 请求行
  2. 请求报头
  3. 空行
  4. 请求正文

如下图所示:

2.1.1 请求行

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

  1. 请求类型 Method,如 GET。
  2. 请求的 URL 地址,如 https://www.baidu.com
  3. 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 部分内容组成的:

  1. 状态行
  2. 响应报头
  3. 空行
  4. 响应正文

如下图所示:

2.2.1 状态行

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

  1. HTTP 版本号,如 HTTP/1.1。
  2. 状态码,如 200。
  3. 状态描述信息,如 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 响应正文

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

总结

HTTP 超文本传输协议,用于实现服务器端和客户端的数据传输。它的特点是简单快速、无连接、无状态、可传递任意数据类型和一对一通讯。HTTP 协议由两部分组成:请求对象 Request 和响应对象 Response。

是非审之于己,毁誉听之于人,得失安之于数。

公众号:Java面试真题解析

面试合集:https://gitee.com/mydb/interview

面试突击64:了解 HTTP 协议吗?的更多相关文章

  1. 《【面试突击】— Redis篇》--Redis Cluster及缓存使用和架构设计的常见问题

    能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>--Redis Cluster及缓存使用和架构设计的 ...

  2. php面试专题---10、网络协议考点

    php面试专题---10.网络协议考点 一.总结 一句话总结: 网络的考点其实就是这些:常见状态码,常见协议,osi七层模型,http和https 1.HTTP/1.1中,状态码200.301.304 ...

  3. 《【面试突击】— Redis篇》--Redis都有哪些数据类型?分别在哪些场景下使用比较合适?

    能坚持别人不能坚持的,才能拥有别人不能拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>--Redis都有哪些数据类型?分别在哪些场景下使用 ...

  4. 《【面试突击】— Redis篇》-- Redis的线程模型了解吗?为啥单线程效率还这么高?

    能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>-- Redis的线程模型了解吗?为啥单线程效率还这 ...

  5. 《【面试突击】— Redis篇》-- Redis的主从复制?哨兵机制?

    能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注左上角编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>-- Redis的主从复制?哨兵机制? 在这个 ...

  6. 《【面试突击】— Redis篇》-- Redis哨兵原理及持久化机制

    能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>-- Redis哨兵原理及持久化机制 在这个系列里, ...

  7. Java 面试知识点解析(五)——网络协议篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  8. Oracle DBA面试突击题

    一份ORACLE DBA面试题 一:SQL tuning 类 1:列举几种表连接方式 答: Oracle的多表连接算法有Nest Loop.Sort Merge和Hash Join三大类,每一类又可以 ...

  9. 【面试突击】-Redis常见面试题(一)

    介绍:Redis 是一个开源的使用 ANSI C 语言编写.遵守 BSD 协议.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的 API的非关系型数据库. 传统数据 ...

随机推荐

  1. UML 类之间的关系

    统一建模语言(Unified Modeling Language,UML) 作用:对软件系统进行说明 如果说软件系统是一本小说的话,那么 UML 就是将小说动漫化. 也许你看过这本小说,但是时间一长, ...

  2. python学习-Day18

    目录 今日内容详细 模块 循环导入问题 判断文件类型 py文件可以被分为两种类型 内置变量 __ name __ 模块的查找顺序 验证先从内存空间中查找 验证再从内置模块中查找 验证sys.path ...

  3. Python 树表查找_千树万树梨花开,忽如一夜春风来(二叉排序树、平衡二叉树)

    什么是树表查询? 借助具有特殊性质的树数据结构进行关键字查找. 本文所涉及到的特殊结构性质的树包括: 二叉排序树. 平衡二叉树. 使用上述树结构存储数据时,因其本身对结点之间的关系以及顺序有特殊要求, ...

  4. java高级用法之:JNA中的Memory和Pointer

    目录 简介 Pointer 特殊的Pointer:Opaque Memory 总结 简介 我们知道在native的代码中有很多指针,这些指针在JNA中被映射成为Pointer.除了Pointer之外, ...

  5. bean的自动装配,使用注解开发,使用java的方式配置Spring

    bean的自动装配 自动装配是Spring满足bean依赖一种方式! Spring会在上下文中自动寻找,并自动给bean装配属性! 在Spring中有三种装配的方式 在xml中显示的配置 在java中 ...

  6. Redis 为何使用近似 LRU 算法淘汰数据,而不是真实 LRU?

    在<Redis 数据缓存满了怎么办?>我们知道 Redis 缓存满了之后能通过淘汰策略删除数据腾出空间给新数据. 淘汰策略如下所示: 设置过期时间的 key volatile-ttl.vo ...

  7. c++:-7

    上一节主要学习C++中的函数模版.数据结构以及排序查找操作:c++:-6,本节学习C++的范型程序设计和STL: 范型程序设计 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通 ...

  8. VMWare中CentOS安装VM-Tools

    查看CD-ROM驱动器的设备信息 可以通过下面几个命令来查看 dmesg命令 dmesg | egrep -i --color 'cdrom|dvd|cd/rw|writer' /proc/sys/d ...

  9. Java实现数据库增删改查

    代码示例: import java.sql.*; public class Renewal { // 创建类static Connection con; // 声明Connection对象static ...

  10. RabbitMQ消息可靠性、死信交换机、消息堆积问题

    目录 消息可靠性 生产者消息确认 示例 消费者消息确认 示例 死信交换机 例子 高可用问题 消息堆积问题 惰性队列 参考 消息可靠性 确保消息至少被消费了一次(不丢失) 消息丢失的几种情况: 消息在网 ...