首页 > 其他分享 >HTTP 协议

HTTP 协议

时间:2023-12-20 10:11:06浏览次数:23  
标签:协议 HTTP 请求 GET URL 服务器 客户端

HTTP 协议

HTTP: HyperText Transfer Protocol的缩写,译为超文本传输协议。

层级: 应用层协议

端口: 基于TCP/IP协议簇,默认使用80/tcp端口

作用: http协议定义了客户端和服务器之间数据交换的规则和格式,从而实现客户端和服务器之间的超文本数据传输


超文本: 不限于纯文本内容,还可以包含图像、视频、音频和动画等内容。超文本一种复合型的信息表达方式,它打破了传统文本的界限,提供了更为丰富和动态的用户体验。

HTTP 特点

  1. 无状态协议:HTTP协议本身不会存储过去请求的状态信息。每个HTTP请求都是独立的,服务器不会记住前后请求之间的关联。

  2. 客户端-服务器模型:客户端发送请求给服务器,服务器处理请求后返回响应信息。使得一个服务端可以为多个客户端提供响应。

  3. 请求/响应模式:客户端发送一个请求到服务器,服务器处理请求并返回一个响应。这种一问一答的交互使得通信过程清晰、有序,编译追踪调试。

  4. 支持多种数据类型:HTTP最初设计是为了传输HTML文档,即“超文本”,但它的能力远远超出了仅传输文本。

HTTP 版本演变

  1. HTTP/0.9:的确是在1991年首次出现,它非常基础,只支持GET请求,没有HTTP头部,只能传输纯文本类型的数据。

  2. HTTP/1.0:发布于1996年,开始支持多种HTTP方法(如GET、POST、HEAD),引入了HTTP头部,允许传输多种类型的内容,不仅限于文本。

  3. HTTP/1.1:首次发布于1997年,并在1999年进行了更新。它加入了持久连接功能(也称为连接复用),以及更复杂的请求和响应头部,改进了缓存机制,并支持虚拟主机。

  4. HTTP/2:发布于2015年,专注于提高性能,引入了多路复用、头部压缩、服务器推送等功能,以优化加载速度和整体用户体验。

  5. HTTP/3:正在开发中,基于QUIC协议,其目标是减少延迟并提高网络通信的整体可靠性和性能,特别是在移动网络和高丢包环境下。

持久连接:

HTTP/1.1之前:每个HTTP请求/响应对通常需要一个单独的TCP连接。每完成一个请求/响应交换,连接就会被关闭,下一个请求需要重新建立新的连接。就造成了对服务器资源使用效率变低(因为每个请求都需要进行TCP连接的三次握手)。

HTTP/1.1:有了持久连接后,允许在一个TCP连接上进行多个HTTP请求/响应交换。避免了频繁建立和关闭连接的过程,特别是在需要多个请求的场景中,从而减少了TCP连接建立和关闭的开销,提高了网络传输的效率。

HTTP 请求方式

  • HTTP提供了多种请求方法,通过不同的请求方法可以实现对服务器资源的不同操作。

  • GET请求:用于获取服务器的资源,而不应当引起服务器上的状态变化。

  • POST请求:用于提交数据给服务器,POST请求可能会导致服务器上的状态改变或数据变更。

  • PUT请求:用于上传文件或更新服务器上的资源。

  • DELETE请求:用于删除服务器的指定资源

HTTP 响应码

HTTP响应码是服务器在响应HTTP请求时返回的状态码,用于告知客户端请求的处理结果。

信息状态码(1xx)

作用:表示服务端接收到请求并继续处理。**


例如:100(Continue)表示客户端应继续发送请求的其余部分。

成功状态码(2xx)

作用:表示服务端请求已被成功接收、理解和接受。**


例如:200(OK)表示请求成功,201(Created)表示请求成功并且服务器创建了新的资源。

重定向状态码(3xx)

作用:表示服务端需要进一步操作需要以完成请求。


例如:301(Moved Permanently)表示资源已永久移动到新位置,302(Found)表示临时重定向。

客户端错误状态码(4xx)

作用:表示客户端的请求有误


例如:400(Bad Request)表示服务器无法理解请求格式,401(Unauthorized)表示请求需要用户认证,404(Not Found)表示服务器找不到请求的资源。

服务器错误状态码(5xx)

作用:表示服务端处理请求时发生了错误


例如:500(Internal Server Error)表示服务器遇到了意外情况,无法完成请求,503(Service Unavailable)表示服务器当前无法处理请求但可能稍后可以。

HTTP 报文结构

请求(Request)报文:

由起始行、请求头和请求体三部分组成。

  • 起始行:包含请求方法、请求资源的URI、http的版本信息

  • 请求头:以键值对的方式组成,里面包含了关于请求和客户端信息的多个头部字段

  • 请求体:包含要发送给服务器的数据。请求体可以没有,例如GET请求就没请求体。

响应(Response)报文:

由状态行、响应头部和响应体三部分组成。

  • 状态行:包含HTTP版本、状态码和状态消息

  • 响应头部:包含了关于服务器和响应信息的多个头部字段

  • 响应体:包含服务器返回的数据。

WWW:

WWW:是World Wide Web的缩写,译为万维网。它是一个巨大的数据集合(文本、图像、音频、视频等多种媒体形式),这些数据之间通过超链接形成一个互联的网络。

这些多媒体数据存储在世界各地的服务器上。用户发送资源请求时,实际上是在请求这些服务器上存储的数据。因为 WWW 基于客户端-服务器模型,所以客户端需要向服务器发送请求来获取数据,服务器才会处理请求并返回相应的响应

WWW、HTTP和HTML关系

蒂姆·伯纳斯-李设想了一个基于超链接的全球性信息系统,即万维网(WWW)。这个系统旨在使文档和其他资源可以通过超链接相互关联和访问。


为了使WWW成为现实,伯纳斯-李开发了HTML。HTML是一种用于创建和结构化网页的标记语言,允许文档通过超链接相互连接。HTML成为了定义和展示WWW上内容的标准方法。


为了实现客户端(如浏览器)和服务器之间的数据交互,伯纳斯-李接着开发了HTTP协议。HTTP定义了如何传输和接收网页数据,包括请求和响应的格式。


所以 WWW作为全球信息网络,HTML作为定义网页内容和结构的语言,以及HTTP作为通信协议——共同构成了现代互联网的基础。

HTML

HTML是HyperText Markup Language的缩写,译为超文本标记语言(不是一门编程语言)。蒂姆·伯纳斯-李在发明万维网(WWW)的过程中开发了HTML,通过HTML从而实现WWW中超链接的设想。

HTML中的请求方法和HTTP中的请求方法区别:

本质上HTML和HTTP中的GET和POST请求方法在本质上是相同的,但是上下文略有差别。

HTML:GET和POST定义了如何通过表单(<form>标签)提交数据

  • GET:当表单设置为GET方法时,提交的数据会附加在URL中。但是URL的长度是有限,所以显示了发送的数据量。

  • POST:当表单设置为POST方法时,提交的数据包含在请求体中,不会显示在URL里。,所以适合发送大量数据和敏感信息。


HTTP:GET和POST定义了客户端和服务器之间数据交换的方式

  • GET:HTTP中的GET请求用于请求服务器上的特定资源,请求参数包含在URL中。

  • PoST:HTTP中的POST请求用于向服务器提交数据,以进行处理(如数据库更新、表单数据提交等)。


说明:

  • HTTP的GET请求具有幂等性,即只能用来请求数据,不能修改服务端数据。

  • HTTP的POST请求一般用来修改服务端数据,但是也可以用来请求服务端的数据。


使用场景:

  • GET请求的URL长度有限,并且查询参数时附加在URL后面,如果有大量需要查询的参数,可以用PSOT实现。

  • POST请求的查询参数是放在请求体中,不是URL上,包含敏感信息或需要复杂结构可以用POST来实现。

  • GET请求会被浏览器缓存和留下历史记录,POST请求不会产生缓存和历史记录。

URL、URN和URI

URI

URI(统一资源标识符):这是一个更广泛的概念,用于唯一标识互联网上的资源。它包括两个子类别:URL和URN。

URL

URL(统一资源定位符):URL是URI的子集。它不仅标识资源,还提供了找到这个资源的具体位置的信息。


例如:http://www.example.com 是一个URL,同时也是一个URI。

URL格式:

URL的标准格式主要包含这几部分:

  1. 访问资源所使用的协议,根据约定,协议后面要加(://),用于分隔协议部分和后续的资源地址部分

  2. IP地址或者域名

  3. 端口号,使用冒号和IP地址分隔

  4. 服务器上资源的具体路径。资源路径中使用斜线(/)来分隔不同的路径组件,使得资源在服务器上的层级结构表示清晰。


例如:

http://192.168.0.92:8000/display#/realTime

URN

URN(统一资源名称):URN也是URI的一种形式,但它只标识资源而不提供位置信息。


例如:书的ISBN号是一个URN,用于唯一标识一本书,但不告诉您书在哪里可以找到。

解决HTTP无状态连接

session和cookie

因为HTTP协议的一个特性就是无状态协议,它本身不会记住之前的请求或响应,所以需要借助一些方法来使http记得之前的请求或响应。

  • Cookie:一个小型数据片段(存放Session ID),由服务器发送到用户浏览器并保存在浏览器上。下次HTTP请求时,Cookie都会被自动附加到请求头中发送给服务器。

  • Session:存放用户和服务端的交互信息,每个用户都有一个独特的session,通常通过一个session ID来标识。Session存储在服务端。

通过这种方式,即使HTTP本身是无状态的,服务器仍然能够“记住”用户的状态(如是否登录、购物车内容等),实现状态保持。

Token:

Token是用于身份验证和授权的一种机制,与session和cookie有所不同。Token常用于实现无状态的认证系统

Token特点:

  • 无状态:意思就是服务端不需要存储用户的登录记录或会话信息。Token自身就包含了所有必要的信息。

  • 自包含:Token中包含的信息通常以JSON Web Token(JWT)的形式编码和加密。

Token作用:

身份验证:用户登录后,服务器会生成一个token并发送给客户端。客户端将此token存储(通常在本地存储或cookie中),并在随后的请求中将其作为身份验证信息发送给服务器。服务器在接收到带有token的请求后,会验证token的有效性。如果验证通过,服务器会根据token中的信息提供相应的服务。

Token和session/cookie区别:

Token不需要服务器端存储用户状态,有利于减少服务器负担。适用于构建可扩展的大规模应用。

Token和JWT的关系:

  • Token:一个广泛的概念,用于表示访问资源的凭证或身份验证信息。

  • JWT(JSON Web Token):是Token的一种具体实现,一般是由头部(Header)、载荷(Payload)和签名(Signature)组成。特别适合用于Web API的身份验证和跨服务的信息交换。

标签:协议,HTTP,请求,GET,URL,服务器,客户端
From: https://www.cnblogs.com/heyongshen/p/17914168.html

相关文章

  • Rails ActionDispatch::Http::UploadedFile to File
    RailsでFileをActionDispatch::Http::UploadedFileに変換する方法require'mime/types'File.open(path)do|file|filename=File.basename(file.path),ActionDispatch::Http::UploadedFile.new(filename:filename,type:MIME::Types.type_for(filename).first......
  • apache HttpClient异常-ProtocolException: Target host is not specified
    昨夜,甘肃临夏州积石山县发生6.2级地震,影响到甘肃、青海地区。截至目前,已有100多人遇难。百度了一下当地天气,还挺冷,夜间温度低到-15℃。时间就是生命,祈祷难民尽快得到救援!  分享今天解决的一个生产问题告警。如下HTTP工具类中的httpClientPost方法使用apache的HttpClient(ma......
  • C# HttpPostedFile传值,储存
    HttpContext.Current.Request.Files附件保存接口实现///<summary>///Post请求,Params传参///</summary>///<paramname="url"></param>///<paramname="onHeading"></param>......
  • 使用网关采集modbus设备数据转换成profinet协议的方案
    1 方案描述这个方案是使用vfbox网关采集modbus设备的数据,然后转换成profinet协议发送给平台。这种转换方法只需要简单的配置网关参数,不需要进行软件编程,很方便的就把modbus数据转换成了profinet协议。在电脑上通过软件配置网关参数,告诉网关要采集的数据的寄存器地址,然后在配置一下......
  • 实现 Raft 协议
    文章地址简介Raft是一个分布式共识算法,用于保证所有机器对一件事达成一个看法。本文用于记录实现Raft选举和日志复制的代码细节。选举节点启动时首先是跟随者状态,如果到达选举超时时间就尝试选举,为了预防对称网络分区带来的任期不断增加问题,需要使用预投票机制。选举超时......
  • Java http请求json数据
    publicstaticStringsendJson(Stringurl,Stringjson){StringreturnValue="调用接口失败";CloseableHttpClienthttpClient=HttpClients.createDefault();ResponseHandler<String>responseHandler=newBasicResponseHandler();try{......
  • 异步记录第三方接口调用日志的优雅实现(HttpClient+装饰者模式+异步线程池)
    对于第三方接口调用日志这个功能,笔者在工作中曾见过以下两种方式:Restemplate+装饰者模式+MQ实现网关监控+Feign拦截器+观察者模式实现其中观察者模式的实现是我最为佩服的设计,个人认为以上两种实现都显得略过臃肿,应该简化设计,让异步记录的实现更加简洁优雅,因此产生了这样......
  • Nacos启动:[NACOS HTTP-POST] The maximum number of tolerable server reconnection e
    一、表象二、分析源码:publicHttpRestResult<String>httpPost(Stringpath,Map<String,String>headers,Map<String,String>paramValues,Stringencode,longreadTimeoutMs)throwsException{finallongendTime=System.currentTi......
  • HTTP事件流 text/event-stream
    GitHubAll-in-oneOpenAIDemo一、依赖<dependency><groupId>org.asynchttpclient</groupId><artifactId>async-http-client</artifactId><version>2.12.3</version></dependency>二、事件流处理器@Slf4jpublicclass......
  • HTTP事件流 text/event-stream
    GitHubAll-in-oneOpenAIDemo一、依赖<dependency><groupId>org.asynchttpclient</groupId><artifactId>async-http-client</artifactId><version>2.12.3</version></dependency>二、事件流处理器@Slf4jpublicclass......