浏览网页是HTTP协议的主要应用,但是这并不代表HTTP协议就只能应用于网页的浏览。只要通信的双方都遵守HTTP协议,其就有用武之地。比如腾讯QQ、迅雷等软件都使用HTTP协议(当然还包括其他的协议)。
那么HTTP协议是如何工作的呢?
首先,客户端发送一个请求(Request)给服务器,服务器在接收到这个请求后将生成一个响应(Response)返回给客户端。一次HTTP操作称为一个事务,其工作过程可分为四步:
1)客户机与服务器需要建立连接。单击某个超链接,HTTP协议的工作开始。
2)建立连接后,客户机发送一个请求给服务器。格式为:前边是统一资源标识符(URL)、中间是协议版本号,后边是MIME信息(包括请求修饰符、客户机信息和可能的内容)。
3)服务器接到请求后,给予相应的响应信息。格式为:首先是一个状态行(包括信息的协议版本号、一个成功或错误的代码),然后是MIME信息(包括服务器信息、实体信息和可能的内容)。
4)客户端接收服务器返回的信息并显示在用户的显示屏上,然后客户机与服务器断开连接。
如果以上过程中的某一步出现错误,产生错误的信息将返回到客户端,由显示屏输出。对于用户来说,这些过程是由HTTP协议自己完成的,用户只要用鼠标单击,等待信息显示就可以了。
HTTP协议如何工作
1.请求
在发起请求前,需要先建立连接。
连接是一个传输层的实际环流,它建立在两个相互通信的应用程序之间。在HTTP1.1协议中,request和response头中都有可能出现一个connection的头,其决定当 Client和Server通信时对于长链接如何进行处理。
HTTP 1.1协议中,Client和Server默认对方支持长链接,如果Client使用HTTP 1.1协议,但又不希望使用长链接,需要在header中指明connection的值为close;如果Server方也不想支持长链接,则在response中需要明确说明connection的值为 close。不论request还是response的header中包含了值为close的connection,都 表明当前正在使用的TCP连接在请求处理完毕后会被断掉,以后Client再进行新的请求时必须创建新的TCP连接。
Method:请求方法。
Request UR:一个统一资源标识符。HTTPVersion:请求的HTTP协议版本。
CRLF:回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。请求方法(所有方法全为大写)有多种,各个方法的解释如下:
GET:请求获取Request URI所标识的资源。
POST:在Request URl所标识的资源后附加新的数据。
HEAD:请求获取由Request URI所标识的资源的响应消息报头。PUT:请求服务器存储一个资源,并用Request URI作为其标识。DELETE:请求服务器删除Request URI所标识的资源。
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。CONNECT:保留以备将来使用。
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求。
2.响应
在接收和解释请求消息后,服务器返回一个HTTP响应消息。HTTP响应也由三个部分组成,分别是:状态行、消息报头、响应正文。
HTTP Version:服务器HTTP协议的版本。
Status Code:服务器发回的响应状态代码。
Reason Phrase:状态代码的文本描述。
3.报头
HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。
注意消息报头域的名字是不区分英文大小写的。报头都是自解释的,具体在这里就不描述了。
1)普通报头中有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息(如缓存控制、连接控制等)。
2)请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息(如UA头、Accept等)。
3 )响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request URI所标识的资源进行下一步访问的信息(如Location )。
4)实体报头定义了关于实体正文和请求所标识的资源的元信息