HTTP介绍
HTTP协议介绍
简介
HTTP是一个面向文本(text-oriented)的应用层协议,默认所使用的服务端口就是TCP 80端口,通信双方就是在这个端口上进行的。HTTP关闭的方式有两种:非持续连接和持续连接,持续连接模式的Web服务访问基本流程如下图所示
HTTP特性
C/S模式: c/s模式是所有网络应用服务采用的通用模式;Web客户只需要使用支持HTTP的客户端程序就可以访问由不同Web服务器
无连接:指在进行Web应用前无需建立专门的HTTP应用层会话连接,仅需要直接利用传输层已为它已建立好的TCP传输连接即可。(区别与telnet,ssh等面向连接协议)
高可靠性:在进行HTTP传输之前,已建立了可靠的TCP连接
无状态:不记录原来的访问状态, 第二次访问同一web服务器的同一页面,其与第一次的响应是一样的
简单快速:客户通过HTTP访问Web服务器时,只需传送请求方法和路径
HTTP报文
由上图可以得出,hhp报文分为请求报文和响应报文,分别为web客户端发起的HTTP应用请求和web服务器对客户端所做的HTTP应用响应
HTTP请求报文格式
一个HTTP请求报文包括:请求行(Request Line)、请求头部(Request Header)行、空行和实体主体(Entity Body)行四个部分组成,如下图所示。HTTP报文(HTTP请求报文和HTTP响应报文)中各字段是没有固定长度的
上述图片中的组成为:
请求行: 由“请求方法”、“URL”和“协议版本”这三个字段组成,但它们之间均以空格进行分隔。这部分是必不可少的。在请求行的最后有一个回车控制符和一个换行控制符(一起以“CRLF”表示),使下面的请求头信息在下一行显示。
HTTP请求头部行
HTTP请求头部包括一系列的“请求头”和它们所对应的值,指出允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
HTTP请求报文的“请求头部”是由一系列的行组成,每行包括“头部字段名”和“值”这两个字段,它们之间用英文冒号“:”分隔,但也可以没有“请求头部”这部分。每一行的最后都有一个回车控制符和一个换行控制符(一起以“CRLF”表示),使下一个请求头在下一行显示。
-
HTTP请求报文的其他部分
- 空行:在HTTP请求报文的最后一个请求头之后是一个空行,发送回车符和换行符(一起以“CRLF”表示),通知服务器以下不再有请求头。
- 实体行: 在请求报文中“实体行”部分通常是不用的,而且不能在GET方法中使用,仅在POST方法中用于向服务器提供一些用户凭据信息(如用户账号密码等)
-
一个HTTP请求报文实例:
GET /HttpSer HTTP/1.1 —GET方法请求行
Host: localhost:8080
Connection: keep-alive
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.85 Chrome/45.0.2454.85 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
HTTP响应报文格式
在Web服务器收到客户端发来的HTTP请求报文后,通过服务器处理后会返回一个HTTP响应报文给请求的客户端,以告知客户端Web服务器对客户端请求所做出的处理。HTTP响应报文也是由四部分组成,分别是:状态行、响应报头行、空行和实体主体行,如下图所示
- 状态行:其主要为“协议版本”、“状态码”和“描述短语”,它们之间用空格分隔。最后是各一个回车控制答和一个换行控制符(一起用CRLF表示)。
- “状态码”字段是用一个三位数表示不同的状态,如请求是否被满足,如果没有满足的话原则是什么,共有5组取值,如下表所示。
- “状态码”字段是用一个三位数表示不同的状态,如请求是否被满足,如果没有满足的话原则是什么,共有5组取值,如下表所示。
头部行:HTTP响应报文中的“响应头”部分是允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对URI所标识的资源进行下一步访问的信息。
HTTP响应报文的“响应头部”行是由一系列的行组成,每行也包括“头部字段名”和“值”这两个字段,它们之间用英文冒号“:”分隔。每一行的最后都有一个回车控制符和一个换行控制符(CRLF),使下一个响应头在下一行显示。典型的HTTP响应头如下表所示。-
一个HTTP响应报文实例
HTTP/1.1 302 Found —响应行
Server: Apache-Coyote/1.1 —响应头, 有多个key-value组成
Location: http://localhost:8080/HttpSer/
Transfer-Encoding: chunked
Date: Fri, 09 Oct 2015 08:55:42 GMT
HTTP版本
HTTP/0.9
已过时。只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。HTTP/1.0
第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用,特别是在代理服务器中。
只能发送一次请求,一次请求之后连接关闭HTTP/1.1
持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。
可以在一次连接中发送多次请求-
HTTP/2
当前版本,于2015年5月作为互联网标准正式发布。