HTTP(二)HTTP消息结构


HTTP是基于 客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。

一个HTTP客户端”是一个应用程序(Web浏览器或其他客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。

一个HTTP服务器”同样也是一个应用程序(通常是Web服务,如TomCat服务器),通过接受客户端的请求并向客户端发送HTTP响应数据。
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接(TCP)。

HTTP 协议基本特性:

  • HTTP 是无连接的: HTTP客户端,即浏览器发出请求后,客户端等待响应。服务器处理该请求并发送回响应,然后客户端断开连接。客户端和服务器仅在当次请求中互相了解,至于上一次是否有连接或者连接的信息是无从得知的。
  • HTTP是独立于媒体的: 这意味着,只要客户端和服务器都知道如何处理数据内容,任何类型的数据都可以通过HTTP发送。客户端和服务器都需要使用适当的 MIME 类型 指定内容类型。
  • HTTP是无状态的: 如上所述,HTTP 是无连接的,这是 HTTP 是无状态协议的直接结果。服务器和客户端仅在当前请求期间彼此知道,之后他们俩彼此忘记。由于协议的这种性质,客户端和浏览器都无法在整个网页的不同请求之间保留信息。

1. 客户端请求消息(HTTP请求报文)

img

HTTP 会话由 HTTP 客户端(即用户的浏览器)通过用户代理打开,并且连接请求消息被发送到 HTTP 服务器(即Web服务器)。

请求消息也称为“客户端请求”,由以下几行组成:

  • 请求行(Request Line):由请求方法URL(包含参数)和协议版本组成
  • 请求头(Request Header):由多个key-value组成
  • 空行:请求报文使用空行将请求头部和请求数据分离
  • 请求数据(Request Data):Get()方法没有携带数据,Post()方法会携带一个body

img

img

传递响应后,Web 服务器将关闭连接。这种连接称为无状态连接,因为它仅在数据交换期间存在。

1.1 请求行

请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:

Method`     `Request-URI`   `HTTP-Version`     `CRLF
  • Method :表示请求方法;
  • Request-URI: 是一个统一资源标识符;
  • HTTP-Version:表示请求的 HTTP 协议版本;
  • CRLF:表示回车和换行(除了作为结尾的 CRLF 外,不允许出现单独的CRLF 字符)。

请求方法(所有方法全为大写)有多种,各个方法的解释如下:

GET : 请求获取Request-URI所标识的资源

POST :在Request-URI所标识的资源后附加新的数据

HEAD :请求获取由Request-URI所标识的资源的响应消息报头

PUT : 请求服务器存储一个资源,并用Request-URI作为其标识

DELETE :请求服务器删除Request-URI所标识的资源

TRACE :请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT:保留将来使用

OPTIONS :请求查询服务器的性能,或者查询与资源相关的选项和需求

1.2 请求头

HTTP 消息报头包括:普通报头请求报头响应报头实体报头,每一个报头域都是由名字 + : + 空格 + 值组成,消息报头域的名字是大小写无关的。

1.2.1 普通报头

在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。

字段名说明
Cache-Control控制缓存行为
Connection连接的管理
Date普通报头域表示消息产生的日期和时间
PragmaHTTP 1.0 中的保温指令控制
1.2.2 请求报头

请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。常见的请求报头包括:

字段名说明
Accept客户端可处理的媒体类型:Accept:image/gif
Accept-Charset客户端可处理的字符集
Accept-Encoding客户端的编码方式
Accept-Langulage客户端指定的语言类型
Authrizationweb认证信息
Expect期待服务器的特定行为
Host请求报头域主要用于指定被请求资源的 Internet 主机和端口号
User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性
Referer请求中的 url 上一跳地址
1.2.3 响应报头

响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。常见的响应报头包括:

字段名说明
Age资源的创建时间
Location客户端重定向至指定的URL
Retry-After再次发送请求的时机
www-Authenticate服务器对客户端的认证
1.2.4 实体报头

请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文和请求所标识的资源的元信息。

字段名说明
Allow资源所支持的HTTP请求类型
Content-Encoding数据编码方式
Content-Language数据的语言类型
Content-Length实体的内容大小
Content-Location替代对应资源的URI
Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型
Expires数据过期时间
Last-Modified资源的最后修改时间

2. 服务器响应消息(HTTP响应报文)

HTTP响应也由四个部分组成,分别是:

  • 状态行
  • 消息报头
  • 空行
  • 响应正文

img

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值