浏览网页是HTTP协议的主要应用,比如腾讯QQ、迅雷等软件都是用HTTP协议的。
那么HTTP协议是如何工作的呢?
首先,客户端发送一个请求(request)给服务器,服务器在接收到这个请求后将生成一个响应(response)返回给客户端。一次HTTP操作称为一个事务,其工作过程可分为四步:
1)、客户机与服务器需要建立连接。单击某个超链接,HTTP协议工作开始。
2)、建立连接后,客户机发送一个请求给服务器。格式为:前边是统一资源标识符(URL)、中间是协议版本号,后边是MIME信息(包括请求修饰符、客户机信息和可能的内容)。
请求 在发起请求前,需要先建立连接。 在HTTP1.1协议中,request和response头中都有可能出现一个connection的头,其决定当client和server通信时对于长链接如何处理。 HTTP1.1协议中,client和server默认对方支持长链接,如果client使用HTTP1.1协议,但不希望使用长链接,需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中需要明确connection的值为close。 不论request还是 response 的 header 中包含了值为 close 的 connection,都表明当前正在使用的 TCP 连接在请求处理完毕后会被断掉,以后client再进行新的请求时必须创建新的TCP连接。 HTTP请求由三个部分组成:请求行、消息报头、请求正文。 请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本 格式如下: Method Request-URI HTTP-Version CRLF 请求方法 一个统一资源标识符 请求的HTTP协议版本 回车和换行 ·GET:请求获取Request-URI所标识的资源。 ·POST:在Request-URI所标识的资源后附加新的数据。 ·HEAD:请求获取由Request-URI所标识的资源的响应消息报头。 ·PUT:请求服务器存储一个资源,并用Request-URI作为其标识。 ·DELETE:请求服务器删除Request-URI所标识的资源。 ·TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。 ·CONNECT:保留以备将来使用。 ·OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求 |
URI(uniform resourse identifier) URI是一个用于标识某一互联网资源名称的字符串。该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。 web上可用的每种资源HTML文档、图像、视频片段、程序等——由一个通用资源标识符进行定位。 |
3)、服务器接到请求后,给予相应的响应信息。格式为:首先是一个状态行(包括信息的协议版本号、一个成功或者错误的代码),然后是MIME信息(包括服务器信息、实体信息和可能的内容)
响应 在接受和解释请求消息后,服务器返回一个HTTP响应消息。 HTTP响应也有三个部分组成:状态行、消息报头、响应正文。 状态行格式如下: HTTP-Version Status-Code Reason-Phrase CRLF 服务器HTTP协议的版本 发回的响应状态代码 状态代码的文本代码 回车和换行 状态代码由三位数字组成,第一个数字定义了响应的类别,有五种可能取值: 1XX:提示信息 2XX:成功 3XX:重定向——要完成请求必须进行更进一步的操作 4XX:客户端错误——请求有语法错误或请求无法实现 5XX:服务器端错误——服务器未能实现合法的请求 200,OK:客户端请求成功 400 Bad Rquest:客户端请求有语法错误 401 Unauthorize:请求未经授权 403 Forbidden:服务器收到请求,但是拒绝提供服务 404 Not Found:请求资源不存在,例如输入了错误的URL 500 Interal Server Error:服务器发生不可预期的错误 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。 |
4)、客户端接收服务器返回的信息并显示在用户的显示屏上,然后客户机与服务器断开
如果以上过程中的某一步出现错误,产生错误的信息将返回到客户端,由显示屏输出。对于用户来说,这些过程是由HTTP协议自己完成的,用户只要用鼠标单击,等待信息显示就可以了。
报头
HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。每个报头域组成形式如下:
名字+:+空格+值
普通报头中有少数报头域用于素有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息(如缓存控制、连接控制等)。
请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息(如UA头、Accept等)。
响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行写一部访问的信息(如Location)。
实体报头定义了关于实体正文和请求所标识的资源的元信息,例如有无实体正文。
Host:头域指定请求资源的Internet主机和端口号,必须表示请求URL的原始服务器或网关的位置。 User-Agent:UA,内容包含发出请求的用户信息。通常包含浏览者的信息,主要是浏览器的名称版本和所用的操作系统。 Accept:告诉服务器可以接受的文件格式。WAP浏览器所能接受的格式要少一些 Cookie:分两种,一种是客户端向服务器端发送的,使用Cookie报头,用来标记一些信息;另一种是服务器发送给浏览器,报头为set-cookie,一条记录只能有一个cookie的value。 Cache-Control:指定请求和响应遵循的缓存机制。请求时 缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached 响应指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。 Referer:头域允许客户端指定请求URI的源资源地址 Content-Length:内容长度 Content-Range:响应资源的范围 Accept-Encoding:指定所能接受的编码方式 自定义报头: |