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. 前后端分离,简单JWT登录详解

    前后端分离,简单JWT登录详解 目录 前后端分离,简单JWT登录详解 JWT登录流程 1. 用户认证处理 2. 前端登录 3. 前端请求处理 4. 后端请求处理 5. 前端页面跳转处理 6. 退出登录 ...

  2. Golang(go语言)开发环境配置

    VSCode开发环境配置 目录 VSCode开发环境配置 先到VSCode官网去下载适合自己系统的VSCode安装软件 演示在WIndows下 安装使用 演示在Linux(Ubuntu/centos) ...

  3. .NET混合开发解决方案9 WebView2控件的导航事件

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...

  4. 爬虫--Scrapy框架的初步使用

    1.scrapy在windows环境下安装 - 环境的安装: a. pip3 install wheel b. 下载twisted: http://www.lfd.uci.edu/~gohlke/py ...

  5. Dns2tcp隧道

    0x01 dns2tcp绕过的原理 dns2tcp是一款基于c/s架构的软件,它可以将通信报文夹藏在udp协议的TXT解析记录中,进而形成dns隧道.dns隧道通过dns2tcpc对本地端口的监听,实 ...

  6. Spring Ioc源码分析系列--Ioc容器注册BeanPostProcessor后置处理器以及事件消息处理

    Spring Ioc源码分析系列--Ioc容器注册BeanPostProcessor后置处理器以及事件消息处理 前言 上一篇分析了BeanFactoryPostProcessor的作用,那么这一篇继续 ...

  7. 02-C高级编程

    Day01 笔记 1 typedef使用 1.1 起别名 - 简化struct关键字 1.2 区分数据类型 1.3 提高代码移植性 2 void使用 2.1 不可以利用void创建变量 无法给无类型变 ...

  8. 定制ASP.NET 6.0的应用配置

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 本文的主题是应用程序配置.要介绍的是如何使用配置.如何自定义配置,以采用不同的方式 ...

  9. frp 用于内网穿透的基本配置和使用

    frp 用于内网穿透的基本配置和使用 今天是端午节,先祝端午安康! frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便 ...

  10. rabbitMq急速安装教程

    背景 我们在工作中很多时候其实也用过mq.但是仅仅只是会用,所以老猫在此想完整地归纳一下mq相关的知识点,在此分享给大家.首先给大家带来的是mq的单机急速安装.操作系统时centos7.(本来想记录到 ...