什么是HTTP协议响应流
一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
第二部分:消息报头,用来说明客户端要使用的一些附加信息
第二行和第三行和第四行为消息报头,
Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是ISO-8859-1
第三部分:空行,消息报头后面的空行是必须的
第四部分:响应正文,服务器返回给客户端的文本信息。
空行后面的html部分为响应正文。
2023-08-29 广告
HTTP协议响应流包括一个响应行和若干个响应头域。响应行包括 HTTP 协议的版本、状态码和状态信息,如下所示:
HTTP/1.1 200 OK
响应头域则包括关于响应内容的元信息,如内容类型、内容长度、服务器名称等。例如:
Content-Type: text/html
Content-Length: 1234
Server: Apache/2.4.18
在响应头域之后,是一个空行,然后是响应正文,即服务器返回给客户端的内容。
例如,一个完整的 HTTP 响应流可能看起来像这样:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
Server: Apache/2.4.18
<html>
<head>
<title>Example Page</title>
</head>
<body>
<p>This is an example page.</p>
</body>
</html>
注意,上述内容是一个简化版的 HTTP 响应流,在实际应用中,还有许多其他响应头域可能会包含在响应流中。
HTTP响应消息分析
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 624
Date: Mon, 03 Nov 2014 06:37:28 GMT
响应体内容
(1)响应首行:其内容是”HTTP/1.1 200 OK”
l HTTP/1.1 :表示协议版本
l 200 :表示响应状态码,200表示响应成功。
l OK :表示响应成功,对响应状态码的解释。
(2)响应头信息:类似于请求消息中的请求头,其格式和请求头信息格式一样,即响应头:响应头值。
l Server响应头:该响应头是服务器告诉浏览器,当前响应的服务类型和版本。
l Content-Type响应头:服务器告诉浏览器响应内容是什么类型,以及采用的是什么字符编码。该响应头的值现在为:text/html;charset=utf-8。说明响应信息的类型是文本类型中的html,使用的字符编码是utf-8。
l Content-Length响应头:服务器告诉浏览器,响应内容的长度,该响应内容的长度现在是624个字节。
l Date响应头:表示是服务器是在什么时候响应回浏览器,注意这里的时间是按照美国时间来计算。
(3)空行:响应头和响应体由空行连接。
(4)响应体:该响应消息的响应体是一个html文档。浏览器可以直接识别这个html文件。而我们访问的是一个jsp文件,响应回去的是一个html文件。说明服务器将该jsp翻译成了一个html,然后再响应给浏览器。
HTTP协议响应流指的是HTTP客户端向服务器发送请求后,服务器返回给客户端的数据流,即HTTP响应。HTTP响应流通常包括以下几个部分:
状态行:包括HTTP协议版本号、响应状态码和对应的状态信息。
消息头:包含了与HTTP响应相关的各种元数据,如内容类型、编码方式、缓存策略等。
响应正文:即服务器返回给客户端的具体数据内容,可以是HTML、XML、JSON等各种格式的数据。
在HTTP协议中,客户端通过发送请求来向服务器获取资源,而服务器则通过返回响应来向客户端传递所请求的资源。其中,响应流的内容会根据不同的HTTP请求和响应方式而有所区别,例如GET请求和POST请求的响应流就可能存在差异。
需要注意的是,HTTP协议响应流是一种基于文本的协议,因此它的可读性和易用性都很强,但也存在安全性和效率等方面的问题,需要在使用时加以注意。
当使用短连接的时候Recipient可以通过服务器端对Connection的关闭来正确获得消息体的结束位置;但长连接的时候Recipient怎么正确得知相邻两次请求的响应内容的分界位置呢?主要是采用设置响应头Content-Length或者Transfer-Encoding:chunked的方法来解决这一问题。
Chunked transfer encoding是一种数据传输机制,将消息体分成若干块从Server传输到Recipient(接收者);目前采用chunked传输方式比较多,为什么要采用chunked下面会说;如果不采用chunked传输方式则必须设置Content-Length字段,以便使Recipient能够正确获知消息体的结束位置,而为什么采用chunked不用设置Content-Length字段呢?因为chunked传输方式特定的格式可以使Recipient正确获知消息体的结束。
Chunked传输即分块传输:将响应主体分成若干块,并在每一块前面加上该块数据的长度以及回车换行,这样Recipient(如浏览器)就可以根据这个长度值正确接收每一块数据,最后以一个0长度的分块作为消息体的结束标志。采用该传输方式Sender在开始传输响应内容到Recipient前不需要知道内容的长度。