Http技术研讨

m0_38124089 2019-04-27 09:36:57
1 概述
1.1 定义
HTTP协议是HyperText Transfer Protocol(超文本传输协议)的缩写,是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议,用于分发、协作超文本信息系统。
1.2 版本
目前主要有Http1.0、Http1.1、Http2.0版本,Http3.0版本处于草稿状态。
1.3 标准性
由World Wide Web Consortium (W3C)和 Internet Engineering Task Force (IETF)联合发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1。
1.4 其它

2 协议规范
2.1 协议内容
2.1.1 HTTP 版本(HTTP Version)
HTTP 采用主从(<major>.<minor>)数字形式来表示版本。例如 1.0,1.1,20。
2.1.2 统一资源标识

2.1.3 Connection
一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间。
在http1.1,request和reponse头中都有可能出现一个connection的头,此header的含义是当client和server通信时对于长链接如何进行处理。
在http1.1中,client和server都是默认对方支持长链接的, 如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close。不论request还是response的header中包含了值为close的connection,都表明当前正在使用的tcp链接在当天请求处理完毕后会被断掉。以后client再进行新的请求时就必须创建新的tcp链接了。
2.1.4 消息:Message
HTTP通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。
2.1.5 请求:Request
一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号。
2.1.6 响应:Response
一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如“成功”或“没找到”)和文档的MIME类型。
2.1.7 资源:Resource
由URI标识的网络数据对象或服务。
2.1.8 实体:Entity
数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。
2.1.9 客户机:Client
一个为发送请求目的而建立连接的应用程序。
2.1.10 用户代理:UserAgent
初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。
2.1.11 服务器:Server
一个接受连接并对请求返回信息的应用程序。
2.1.12 源服务器:Originserver
是一个给定资源可以在其上驻留或被创建的服务器。
2.1.13 代理:Proxy
一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前,必须解释并且如果可能重写它。
代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。

2.1.14 网关:Gateway
一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。
网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。
2.1.15 通道:Tunnel
是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于HTTP通讯,尽管通道可能是被一个HTTP请求初始化的。当被中继的连接两端关闭时,通道便消失。当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。
2.1.16 缓存:Cache
反应信息的局域存储。
2.2 HTTP状态码
返回结果的状态码
1XX 表示服务器已经接收了客户端请求,客户端可继续发送请求
2XX 请求正常处理完毕

3XX 需要进行附加操作以完成请求
4XX 表示客户端的请求有非法内容
5XX 服务器处理请求出错

2.3 HTTP请求方法
方法 说明 支持版本
GET 获取资源 1.0、1.1、2.0、3.0
POST 传输实体主体 1.0、1.1、2.0、3.0
PUT 传输文件 1.0、1.1、2.0、3.0
HEAD 获得报文首部 1.0、1.1、2.0、3.0
DELETE 删除文件 1.0、1.1、2.0、3.0
OPTIONS 询问支持的方法 1.0、1.1、2.0、3.0
TRACE 追踪路径 1.1、2.0、3.0
CONNECT 要求用隧道协议连接代理 1.1、2.0、3.0
LINK 建立与资源之间的联系 1.0
UNLINK 断开连接关系 1.0


3 协议实现
3.1 版本选择
3.2 实现机理
3.2.1 请求响应模型
HTTP协议是客户端发起请求,服务器回送响应。见下图:

这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。
HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。
3.2.2 工作流程
一次HTTP操作称为一个事务,其工作过程可分为四步:
1)首先客户机与服务器需要建立连接。
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端。
3.3 HTTP/2.0改进
多路复用
HTTP/2.0 使用多路复用技术,同一个 TCP 连接可以处理多个请求。
首部压缩
HTTP/1.1 的首部带有大量信息,而且每次都要重复发送。HTTP/2.0 要求通讯双方各自缓存一份首部字段表,从而避免了重复传输。
服务端推送
HTTP/2.0 在客户端请求一个资源时,会把相关的资源一起发送给客户端,客户端就不需要再次发起请求了。例如客户端请求 index.html 页面,服务端就把 index.js 一起发给客户端。
二进制格式
HTTP/1.1 的解析是基于文本的,而 HTTP/2.0 采用二进制格式。
3.4 HTTP/3.0版本的改进
减少 TCP 三次握手及 TLS 握手时间
改进的拥塞控制
避免队头阻塞的多路复用
连接迁移
前向纠错
3.5 Apache Http Client 和 Apache Http Core 版本5
Apache Http Client版本5将支持 http2.0协议
...全文
114 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
SSM项目高校学术研讨信息管理系统.zip是一个使用Java语言开发的Web应用,它采用了SSM(Spring Spring MVC MyBatis)框架,并结合了前端技术。该项目利用MySQL作为后端数据库,旨在为高校学术研究团队提供一个便捷的信息管理平台,使得用户能够在网络环境中轻松地发布、管理和参与学术研讨活动。 项目的主要功能可能包括: 1. **研讨会信息发布**:管理员或研讨组织者可以发布即将进行的学术研讨会信息,包括主题、时间、地点、主讲人等。 2. **参与者注册**:教师和学生可以查看即将举行的研讨会,并进行在线注册参加。 3. **议程管理**:组织者可以编辑研讨会的议程,包括演讲安排、讨论环节和相关资料的准备。 4. **互动讨论区**:为每个研讨会设立讨论区,参与者可以发表自己的观点、提问和分享资料。 5. **问卷调查与反馈**:研讨会结束后,参与者可以填写问卷,对活动进行评价和提供反馈。 6. **通知提醒**:通过邮件或者系统内消息,向参与者发送研讨会相关的通知和提醒。 7. **数据统计**:后台可以统计研讨会的参与率、活跃度等数据,用于改进未来的活动组织。 8. **资源共享**:允许上传和下载研讨会相关的学术资源,如论文、演示文稿等。 整个项目采用MVC设计模式,Spring负责整体业务逻辑的处理和依赖注入,Spring MVC用于处理HTTP请求和页面跳转,而MyBatis负责与MySQL数据库的交互操作。数据库设计优化了存储结构和查询效率,以适应高校学术研讨信息管理系统的需求。 这个项目适合计算机科学或软件工程专业的学生作为课程设计、毕业设计或实践项目。对于希望学习SSM框架、前端开发以及学术活动管理系统设计的开发者来说,这是一个实用的案例。通过参与这个项目,开发者不仅能提升Java Web开发技能,还能了解如何将现代Web技术应用于高等教育领域,提高学术交流的效率和质量。

547

社区成员

发帖
与我相关
我的任务
社区描述
Cloud Foundry是业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。
社区管理员
  • Cloud Foundry社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧