JavaWeb-HTTP协议

1. 什么是HTTP协议

HTTP超文本传输协(Hyper Text transfer protocol),是一种用于用于分布式、协作式和超媒体信息系统的应用层协议。它于1990年提出,经过十几年的使用与发展,得到不断地完善和扩展。HTTP 是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。客户端与服务器通信时传输的内容称为报文,HTTP协议就是规定了报文的格式。客户端发送给服务器的称为请求报文,服务器发送给客户端的称为响应报文。

1.1 发展历程

  • HTTP/0.9
    • 蒂姆伯纳斯李是一位英国计算机科学家,也是万维网的发明者。他在 1989 年创建了单行 HTTP 协议。它只是返回一个网页。这个协议在 1991 年被命名为 HTTP/0.9。
  • HTTP/1.0
    • 1996年,HTTP/1.0发布,支持三种请求方式:GET,POST和HEAD。
    • HTTP/1.0相对于HTTP/0.9的改进:
      • 每个请求都附加了HTTP版本信息。
      • 在响应开头附加状态码。
      • 请求和响应都包含HTTP报文头。
      • 能够传输HTML文件以外的文档。
    • 不是官方标准。
  • HTTP/1.1
    • HTTP第一个标准化版本HTTP/1.1于1997年初发布,支持7种请求方式:GET,POST,HEAD,PUT,DELETE,TRACE和OPTIONS。
    • HTTP/1.1是HTTP/1.0的增强:
      • 一个IP地址可以有多个虚拟主机,通过Host头域可以访问一个IP地址下的不同网站。
      • 持久连接和流水线连接允许web浏览器通过单个长连接发送多个请求。
      • 缓存支持节省了宽带并使响应速度更快。如果请求的资源已经缓存了,那么就会直接从本地加载该资源,不需要再从服务器获取 。
    • 出现了HTTPS,是使用SSL/TLS进行安全加密通信的HTTP的安全版本。
  • HTTP/2
    • 由IETF在2015年发布。HTTP/2旨在提高Web性能,减少延迟,增加安全性,使Web应用更加快速、高效和可靠。
    • 多路复用:允许同时发送多个请求和响应。这样可以减少延迟,提高效率和网络吞吐量。
    • 二进制传输:使用二进制协议,可以更快地解析,更有效地传输数据,减少了传输过程中的开销和延迟。
    • 使用HPACK算法对HTTP头部进行压缩,减少了头部传输的数据量,从而减少了网络延迟。
    • 服务器推送:支持服务器推送,允许服务器在客户端请求之前推送资源以提高性能。
    • 安全性:默认使用TLS加密传输数据,提高了安全性。
    • 兼容HTTP/1.1:可以与HTTP/1.1共存,服务器可以同时支持HTTP/1.1和HTTP/2。如果客户端不支持HTTP/2,服务器可以使用HTTP/1.1。
  • HTTP/3
    • 于 2021 年 5 月 27 日发布 , HTTP/3 是一种新的、快速、可靠且安全的协议,适用于所有形式的设备。 HTTP/3 没有使用 TCP,而是使用谷歌在 2012 年开发的新协议 QUIC。
    • HTTP/3 是继 HTTP/1.1 和 HTTP/2之后的第三次重大修订。
    • HTTP/3 带来了革命性的变化,以提高 Web 性能和安全性。设置 HTTP/3 网站需要服务器和浏览器支持。
    • 目前,谷歌云、Cloudflare和Fastly支持 HTTP/3。Chrome、Firefox、Edge、Opera 和一些移动浏览器支持 HTTP/3。

1.2 HTTP协议的会话方式

在这里插入图片描述

1.3 在浏览器中通过开发者工具抓取请求响应报文

在这里插入图片描述

2. 请求报文和响应报文

在这里插入图片描述

2.1 请求报文

  • 请求报文格式
    • 请求行
      • 请求方式
      • 资源路径
      • 协议版本
    • 请求头
    • 请求空行
    • 请求体:浏览器提交给服务器的数据。

2.1.1 GET方法

  • 请求参数在url中携带,所以没有请求体,也没有请求空行。
  • 请求参数拼接在url后,使用?与url连接,参数之间通过&连接。
  • 由于参数在url中携带,所以有大小限制(地址栏数据一般限制为4kb),并且只能携带纯文本。
  • 没有请求体,所以封装和解析速度快,效率高。浏览器的默认提交都是GET请求,比如:地址栏按回车,超链接,表单的默认提交方式。
    在这里插入图片描述

2.1.2 POST方法

  • POST方法有请求体。
  • 请求数据在请求体中携带,没有大小和内容限制。
  • 只能使用POST请求上传文件。
  • 相对GET方法比较安全,因为提交的数据不在url中明文显示。
  • 效率比GET方法低。

在这里插入图片描述
请求体:
在这里插入图片描述

2.2 响应报文

  • 响应报文格式
    • 响应行
      • 协议版本
      • 状态码
      • 状态码描述
    • 响应头
    • 响应空行
    • 响应体

在这里插入图片描述
在这里插入图片描述

2.2.1 响应状态码

状态码状态码英文描述中文含义
1**
100Continue继续。客户端应继续其请求。
101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议。
2**
200OK请求成功。一般用于GET与POST请求。
201Created已创建。成功请求并创建了新的资源。
202Accepted已接受。已经接受请求,但未处理完成。
203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本。
204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档。
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域。
206Partial Content部分内容。服务器成功处理了部分GET请求。
3**
300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。
301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替。
302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI。
303See Other查看其它地址。与301类似。使用GET和POST请求查看。
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源。
305Use Proxy使用代理。所请求的资源必须通过代理访问。
306Unused已经被废弃的HTTP状态码。
307Temporary Redirect临时重定向。与302类似。使用GET请求重定向。
4**
400Bad Request客户端请求的语法错误,服务器无法理解。
401Unauthorized请求要求用户的身份认证。
402Payment Required保留,将来使用。
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求。
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面。
405Method Not Allowed客户端请求中的方法被禁止。
406Not Acceptable服务器无法根据客户端请求的内容特性完成请求。
407Proxy Authentication Required请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权。
408Request Time-out服务器等待客户端发送的请求时间过长,超时。
409Conflict服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突。
410Gone客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置。
411Length Required服务器无法处理客户端发送的不带Content-Length的请求信息。
412Precondition Failed客户端请求信息的先决条件错误。
413Request Entity Too Large由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息。
414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理。
415Unsupported Media Type服务器无法处理请求附带的媒体格式。
416Requested range not satisfiable客户端请求的范围无效。
417Expectation Failed服务器无法满足Expect的请求头信息。
5**
500Internal Server Error服务器内部错误,无法完成请求。
501Not Implemented服务器不支持请求的功能,无法完成请求。
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应。
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中。
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求。
505HTTP Version not supported服务器不支持请求的HTTP协议的版本,无法完成处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/206634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI自动生成代码工具

AI自动生成代码工具是一种利用人工智能技术来辅助或自动化软件开发过程中的编码任务的工具。这些工具使用机器学习和自然语言处理等技术,根据开发者的需求生成相应的源代码。以下是一些常见的AI自动生成代码工具,希望对大家有所帮助。北京木奇移动技术有…

HCIP —— BGP 基础 (上)

BGP --- 边界网关协议 (路径矢量协议) IGP --- 内部网关协议 --- OSPF RIP ISIS EGP --- 外部网关协议 --- EGP BGP AS --- 自治系统 由单一的组织或者机构独立维护的网络设备以及网络资源的集合。 因 网络范围太大 需 自治 。 为区分不同的AS&#…

vim常见操作

vim常见操作 文章目录 vim常见操作1. 回退/前进2. 搜索3. 删除4. 定位到50行5. 显示行号6. 复制粘贴7. 剪贴8. 替换9. vim打开文件的时候出现 1. 回退/前进 1.esc进入命令模式 2.ctrlr 前进 u 回退2. 搜索 1) esc进入命令模式 2) /text  查找text&am…

【STM32】TIM定时器输入捕获

1 输入捕获 1.1 输入捕获简介 IC(Input Capture)输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时(上升沿/下降沿),当前CNT的值将被锁存到CCR中(把CNT的值读出来,写入到…

类风湿性关节炎口腔黏膜破裂引发抗瓜氨酸细菌和人蛋白抗体反应

今天给同学们分享一篇实验文章“Oral mucosal breaks trigger anti-citrullinated bacterial and human protein antibody responses in rheumatoid arthritis”,这篇文章发表在Sci Transl Med期刊上,影响因子为17.1。 结果解读: 口腔黏膜破…

Redis主从复制的配置和实现原理

Redis的持久化功能在一定程度上保证了数据的安全性,即便是服务器宕机的情况下,也可以保证数据的丢失非常少。通常,为了避免服务的单点故障,会把数据复制到多个副本放在不同的服务器上,且这些拥有数据副本的服务器可以用…

如何快速构建知识服务平台,打造个人或企业私域流量

随着互联网的快速发展,传统的知识付费平台已经不能满足用户的需求。而SaaS知识付费小程序平台则是一种新型的知识付费方式,具有灵活、便捷、高效等特点,为用户提供了更加优质的付费知识服务。本文将介绍如何搭建自己的SaaS知识付费小程序平台…

如何掌握构建 LMS 网站的艺术

目录 什么是学习管理系统 (LMS) 在线课程和 LMS 网站的好处 为什么 WordPress 对于 LMS 网站很重要 统一学习中心 多功能性和可扩展性 提高教育参与度 简化管理和监控 节省时间和费用 技能评估和绩效监督 持续学习和技能提升 使用 WordPress 插件构建成功的 LMS 课程 专注于您的…

sparkc程序idea调试提示内存不足

报错如下: Exception in thread "main" java.lang.IllegalArgumentException: System memory 259522560 must be at least 471859200. Please increase heap size using the --driver-memory option or spark.driver.memory in Spark configuration. 测…

自动驾驶:传感器初始标定

手眼标定 机器人手眼标定AxxB(eye to hand和eye in hand)及平面九点法标定 Ax xB问题求解,旋转和平移分步求解法 手眼标定AXXB求解方法(文献总结) 基于靶的方法 相机标定 (1) ApriTag (2) 棋盘格:cv::f…

富时中国A50指数暴跌

近年来,中国股市的波动一直备受关注,而富时中国A50指数更是其中一项备受瞩目的指标之一。然而,近期却出现了一场引人瞩目的暴跌,引发了广泛的关注和讨论。 富时中国A50指数简介 富时中国A50指数,作为富时罗素指数系列…

全新UI彩虹外链网盘系统源码V5.5/支持批量封禁+优化加载速度+用户系统与分块上传

源码简介: 全新UI彩虹外链网盘系统源码V5.5,它可以支持批量封禁优化加载速度。新增用户系统与分块上传。 彩虹外链网盘,作为一款PHP网盘与外链分享程序,具备广泛的文件格式支持能力。它不仅能够实现各种格式文件的上传&#xff…

CLASS60 DM蓝牙5.2双模热插拔PCB

键盘使用说明索引(均为出厂默认值) 软件支持(驱动的详细使用帮助)一些常见问题解答(FAQ)首次使用步骤蓝牙配对规则(重要)蓝牙和USB切换键盘默认层默认触发层0的FN键配置的功能默认功…

使用word中的VBA 批量设置Word中所有图片大小

在VBA编辑器中,你可以创建、编辑和运行VBA宏代码,以实现自动化任务和自定义Word 功能。如果你是VBA编程初学者,可以在VBA编辑器中查看Word VBA宏代码示例,以便更好地了解如何使用VBA编写代码。 要打开VBA编辑器,你可以…

【Vue】修改组件样式并动态添加样式

文章目录 目标修改样式动态添加/删除样式样式不生效 注意:类似效果el-step也可以实现,可以不用手动实现。这里只是练习。 目标 使用组件库中的组件,修改它的样式并动态添加/删除样式。 修改样式 组件中的一些类可能添加样式无法生效。如Ele…

[java学习日记]反射、动态代理

目录 一.反射的简单解释与获取字节码文件对象 二.获取构造方法对象Constructor 三.反射获取字节码文件中的成员变量Field 四.反射获取字节码文件中的成员方法:Method 五.反射练习:保存信息 六.反射练习:利用配置文件(存储类名…

第21章:网络通信

21.1 网络程序设计基础 21.1.1 局域网与互联网 为了实现两台计算机的通信,必须用一个网络线路连接两台计算机。如下图所示 21.1.2 网络协议 1.IP协议 IP是Internet Protocol的简称,是一种网络协议。Internet 网络采用的协议是TCP/IP协议&#xff0…

Google Bard vs. ChatGPT 4.0:文献检索、文献推荐功能对比

在这篇博客中,我们将探讨和比较四个不同的人工智能模型——ChatGPT 3.5、ChatGPT 4.0、ChatGPT 4.0插件和Google Bard。我们将通过三个问题的测试结果来评估它们在处理特定任务时的效能和响应速度。 导航 问题 1: 统计自Vehicle Routing Problem (VRP)第一篇文章发…

netty源码:(4)ServerBootstrap

ServerBootstrap的group方法用来给成员变量赋值,如下图 AbstractBootstrap为ServerBootstrap的父类。 ServerBootstrap的channel方法用来设置channelFactory成员变量(在父类AbstractBootstrap里) ServerBootstrap的childHandler方法用来给本类的成员…

软件开发的代码审查工具

在进行软件开发时,代码审查(Code Review)是一种非常重要的实践,它有助于发现潜在的问题、提高代码质量,并促使团队成员之间的知识共享。有许多工具可用于简化和优化代码审查过程。以下是一些常见的代码审查工具&#x…