HTTP协议简述

  • 格式:pdf
  • 大小:224.23 KB
  • 文档页数:4

HTTP协议简述

前⾔

HTTP协议是整个Web的基础,是客户端和服务器端协同⼯作的基⽯,要想了解Web的⼯作原理、优化Web应⽤,就要完全理解HTTP协

议。

HTTP的操作过程

1 ,浏览器分析指向页⾯的URL

2 ,浏览器向DNS系统请求解析域名所对应的服务器IP地址

3 ,DNS系统解析出服务器的IP,并返回给主机

4 ,浏览器与该服务器的进程建⽴TCP链接(三次握⼿,端⼝默认为80)

5 ,浏览器发出HTTP请求:如GET /article/index.html

6 ,服务器收到请求并作出相应处理,把⽂件index.html发送给浏览器

7 ,释放TCP链接(四次握⼿)

8 ,浏览器解析index.html⽂件,将web页显⽰出来。

HTTP协议的特点

HTTP协议是⽆状态的,即多次访问⼀个服务器上的页⾯,服务器并不知道你曾经访问过,每次访问的响应都当做第⼀次访问⼀样。所以,

在实际应⽤中,通常使⽤CooKie加数据库的⽅式记录和跟踪⽤户的活动。 HTTP有⾮持久连接和持久连接:

采⽤⾮持久连接时,⽹页的每个元素对象(如.png,jpeg图等)的传输都需单独建⽴⼀个TCP连接(第三次握⼿可

携带请求信息) 采⽤持久连接时,仅需建⽴⼀次TCP连接,服务器发送响应后仍保持连接,客户和服务器可以继续在这条连接上发

送请求和响应报⽂。

Cookie以及其作⽤

CooKie是由服务器⽣成,但存储在⽤户主机上的⽂本⽂件,它保存了服务器和客户之间传递的状态信息,作为识别⽤户的⼿段。通过

Cookie服务器就能从数据库中查询该⽤户的活动记录,进⽽可以执⾏⼀些个性化操作

get和post⽅法的区别:

⼀般我们在浏览器输⼊⼀个⽹址访问⽹站都是GET请求;在FORM表单中,可以通过设置Method指定提交⽅式为GET或POST,默认时为GET提交⽅式。

get请求⼀般不会修改服务器的信息,仅⽤于请求页⾯;post请求可能会修改服务器中的资

源信息,如提交评论、博客等都是通过post请求实现。

get请求的信息附加在URL后⾯,这些被显⽰的暴露在外⾯。post请求的数据放在包体

中,不容易暴露,因此⼀般⽤户登录等保密性⾼的不宜采⽤get请求,⽽⽤post请求。

HTTP协议与SPDY协议

HTTP(HyperText Transfer Protocol,超⽂本传输协议)是万维⽹协会(World Wide Web Consortium)和Internet⼯作⼩组(Internet

Engineering Task Force, IETF)合作的结果,最终发布了⼀系列的RFC(Request For Comments)。RFC1945定义了HTTP1.0版本,最著名

的是RFC2616,其中定义了今天普遍使⽤的版本——HTTP 1.1。

HTTP是⼀个应⽤层协议,由请求和相应构成,是⼀个标准的客户端服务器模型。HTTP通常承载于TCP协议之上,有时也承载于TLS或SSL

协议层之上,这个时候,就成了常说的HTTPS。默认HTTP的端⼝号为80,HTTPS的端⼝号为443。

HTTP协议在OSI模型中的位置如图所⽰:

HTTP协议的模型就是客户端发起请求,服务器回送响应,如图4-2所⽰。HTTP协议是⼀个⽆状态的协议,同⼀个客户端的这次请求和上次请求没有对应关系。

这种设计属于典型”问答式”交互,客户端和服务器端⼀问⼀答,使HTTP协议模型异常简单。这种设计也存在问题,⽐如服务器不会主动向

客户端PUSH,⼀问⼀答的轮询也会使TCP连接频繁建⽴和断开,导致其交互效率不⾼。基于以上缺点,SPDY协议应运⽽⽣。

SPDY协议是Google推出的协议,优化了浏览器和服务器之间的通信,⽀持流复⽤,具备优先级的请求、主动发起请求、强制SSL安全传输

等先进的特性。⽬前,Chrome和Firefox浏览器均⽀持SPDY协议,⼀些服务器也纷纷开始⽀持SPDY协议。可以预见,在未来⼏年,SPDY

协议将得到⼤⼤推⼴。

注:SPDY并不⽤于取代HTTP,它只是修改了HTTP的请求与应答在⽹络上传输的⽅式;这意味着只需增加⼀个SPDY传输层,现有的所有

服务端应⽤均不⽤做任何修改。SPDY协议类似于HTTP,但旨在缩短⽹页的加载时间和提⾼安全性。SPDY协议通过压缩、多路复⽤和优

先级来缩短加载时间。SPDY协议的应⽤需要客户端和服务器端同时⽀持。

HTTP协议如何⼯作

浏览器⽹页是HTTP协议的主要应⽤,但并不代表HTTP协议只能应⽤于⽹页的浏览,只要通信的双⽅都遵守HTTP协议,其就有⽤武之地。

⽐如腾讯QQ、迅雷等软件都使⽤HTTP协议(当然还包括其他的协议)。

那么,HTTP协议是如何⼯作的呢?

⾸先,客户端发送⼀个请求给服务器,服务器在接收到这个请求后将⽣成⼀个响应返回客户端。⼀次HTTP协议称为⼀个事务,其⼯作过程

可分为四步:

1)客户端与服务器需要建⽴连接。单击某个超链接,HTTP协议的⼯作开始。

2)建⽴连接后,客户端发送⼀个请求给服务器。格式为:前边是统⼀ 资源标识符(URL)、中间是协议版本号,后边是MIME信息(包括

请求修饰符、客户机信息和可能的内容)。

3)服务器接到请求后,给予相应的响应信息。格式为:⾸先是⼀个状态运⾏(包括信息的协议版本号、⼀个成功或错误的代码),然后是

MIME信息(包括服务器信息、实体信息和可能的内容)。

4)客户端接收服务器返回的信息并显⽰在⽤户的显⽰屏上,然后客户端机与服务器断开连接

如果这四步的某⼀步出错产⽣错误的信息将返回到客户端,由显⽰屏输出。这些过程是由HTTP协议⾃⼰完成的,⽤户只需要单击⿏标,等

待信息显⽰就可以了。

主要概念1、请求

在发起请求前,需要先建⽴链接。

连接是⼀个传输层的实际环流,它建⽴在两个相互通信的应⽤程序之间。在HTTP1.1协议中,request和response头中都有可能出现⼀个connection的头,其决定当Client和Server通信时对于长链接如何处理。

HTTP1.1协议中,Client和Server默认对⽅⽀持长链接,如果Client使⽤HTTP1.1协议,但⼜不希望使⽤长链接,需要在header指明

connection的值为close;同理,Server端也⼀样。不论request还是responese的header中包含了值为close的connection,都表明当前正在

使⽤的TCP连接在请求处理完毕后会被断掉,以后Client再进⾏新的请求时必须创建新的TCP连接。

HTTP请求由三部分组成:请求⾏、消息报头、请求正⽂。

请求⾏以⼀个⽅法符号开头,以空格分开,后⾯跟着请求的URI和协议的版本,格式如下:

Method Request-URI HTTP-Version CRLF

上述格式中各参数说明如下:

Method:请求⽅法。

Request-URI:⼀个统⼀资源标识衔。

HTTP-Version:请求的HTTP协议版本。

CRLF:回车和换⾏(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

请求⽅法(所有⽅法全为⼤写)有多种,各个⽅法的解释如下: GET:请求获取Request-URI所标识的资源。

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

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

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

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

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

CONNECT:保留以备将来使⽤。

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

2.响应

在接收和解释请求消息后,服务器返回⼀个HTTP响应消息。HTTP响应也由三个部分组成,分别是:状态⾏、消息报头、响应正⽂。

状态⾏格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

上述格式中各参数说明如下:

HTTP-Version:服务器HTTP协议的版本。

Status-Code:服务器发回的响应状态代码。

Reasion-Phrase:状态代码的⽂本描述。

状态代码由三位数字组成,第⼀个数字定义了响应的级别,有五种可能取值:

1xx:指⽰信息—请求已接收,继续处理。

2xx:成功—请求已被成功接收、理解、接受。

3xx:重定向—要完成请求必须进⾏更进⼀步的操作。

4xx:客户端错误–请求有语法错误或请求⽆法实现。

5xx:服务器端错误—服务器未能实现合法的请求。

常见的状态代码、状态描述和说明如下:

200 OK:客户端请求成功。

400 Bad Request:客户端请求有语法错误,不能被服务器所理解

401 Uauthorize:请求未经授权,这个状态码必须和WWW-Authenticate报头域⼀起使⽤

403 Forbidden:服务器端收到请求,但是拒绝提供服务器。

404 Not Found:请求资源不存在,例如输出了错误的URL。

500 Internal Server Error:服务器发⽣不可预期的错误。

503 Server Unavailable:服务器当前不能处理客户端的请求,⼀段时间后可能恢复正常。

例如,响应信息“HTTP/1.1 200 OK(CRLF)”,表⽰响应请求到达服务器后被成功识别成功标记。响应正⽂就是服务器返回的资源的内容。

3.报头

HTTP消息报包括普通报头、请求报头、响应报头、实体报头。每个报头域的组成如下:名字+:+空格+值

1)普通报头中有少数报头域⽤于所有的请求和响应信息,但并不⽤于被传输的实体,只⽤于传输的消息(如缓存控制、连接控制)。

2)请求报头允许客户端向服务器端传递请求的附加信息以及客户端⾃⾝的信息(如UA头、Accept等)。

3)响应报头允许客户端向服务器端传递不能放在状态⾏中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进⾏下

⼀步访问的信息(如Location)。

4)实体报头定义了关于实体正⽂和请求所标识的资源的元信息,例如有⽆实体正⽂。

⽐较重要的⼏个报头如下。

Host:头域指定请求资源的Internet主机和端⼝号,必须表⽰请求URL的原始服务器或⽹关的位置。HTTP1.1请求必须包含主机头域,否则

系统会以400状态码返回。

Use-Agent:简称UA,内容包含发出请求的⽤户信息。通常UA包含浏览者的信息,主要是浏览器的名称版本和所⽤的操作系统。这个UA头

不仅仅是否使⽤浏览器才存在,只要使⽤使⽤了基于HTTP协议的客户端软件都会发送这个请求,⽆论是⼿机端还是PDA等。这个UA头是辨

别客户端所⽤设备的重要依据。

Accept:告诉服务器可以接受的⽂件格式通常这个值在各种浏览器中都差不多。不过WAP浏览器所能接受的格式要少⼀些,这也是⽤来区

分WAP和计算机浏览器的主要依据之⼀。随着WAP浏览器的升级,其已经和计算机浏览器越来越接近,因此这个判断所起的作⽤也变得越

来越弱。

Cookie:Cookie分两种,⼀种是客户端向服务器端发送的,使⽤Cookie报头,⽤来标记⼀些信息;别⼀种是服务器发送给浏览器的,报头