在了解HTTP协议前先来看看什么是URL,使用浏览器访问网站时要在浏览器的地址栏里输入网站的地址,这个地址就叫URL(Uniform Resource Locator,同意资源定位符)当在浏览器中输入一个URL或是一个超连接时,URL就确定了要浏览的地址。浏览器通过HTTP协议或者HTTPS协议(加密的HTTP协议),将Web服务器上的网页代码提取出来,再在浏览器上呈现给大家。
例如:http://www.xxxxxx.com/china/index.htm 它的含义可以理解为:
http:// 代表超文本传输协议(HTTP协议),通常是默认的可以不用输入,注意如果是HTTPS就需要手动输入了。
www:代表一个web服务器(即网站)。
xxxxxx.com/:代表服务器的域名或站点服务器的名称。
China/:为该服务器上的子目录,类似于文件夹。
HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是用于冲Web服务器传输超文本文件到本地浏览器的传输协议,现在使用的是HTTP/1.1版本(1997年开始)。HTTP协议不仅保证了计算机正确快速的传输超文本文件,还确定了传送的文件中哪一部分,以及哪部分内容首先显示。
HTTP协议是基于请求/响应的模式(相当于C/S模式)。一个服务器和客户机建立连接后,由客户机发送请求给服务器,请求格式为:URL,协议版本号等,然后服务器接收到请求后返回响应信息,包括了信息的协议版本号,成功或错误的代码,实体信息内容等。
由于HTTP协议通常是发生在TCP/IP连接上,所以缺省的端口号是TCP 80(其他端口也可以使用)HTTP的连接交换信息过程共分四个分别是:建立连接,发送请求信息,发送响应信息,关闭连接。
建立连接:连接的建立是通过申请套接字(Socket)实现的。客户打开一个套接字并把它约束在一个端口上,如果成功,就相当于建立了一个虚拟文件。以后就可以在该虚拟文件上写数据并通过网络向外传送。
发送请求:打开一个连接后,客户机把请求消息送到服务器的停留端口上,完成提出请求动作。
请求消息的格式如下:
请求消息=请求行(通用信息|请求头|实体头) CRLF[实体内容]
请求行=方法 请求URL HTTP版本号 CRLF
方法=GET|HEAD|POST|扩展方法
URL=协议名称 宿主名 目录与文件名
请求行中的方法描述指定资源中应该执行的动作,常用的方法有GET、HEAD和POST。不同的请求对象对应GET的结果是不同的,对应关系如下:
对象 GET的结果
文件 文件的内容
程序 该程序的执行结果
数据库查询 查询结果
HEAD——要求服务器查找某对象的元信息,而不是对象本身。 (页面首部)
POST——从客户机向服务器传送数据,在要求服务器和CGI做进一步处理时会用到POST方法。POST主要用于发送HTML文本中FORM的内容,让CGI程序处理。
头信息又称为元信息,即信息的信息,利用元信息可以实现有条件的请求或应答 。
请求头——告诉服务器怎样解释本次请求,主要包括用户可以接受的数据类型、压缩方法和语言等。
实体头——实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。
实体——请求或应答对象本身。
发送响应:服务器在处理完客户的请求之后,要向客户机发送响应消息。
响应消息=状态行(通用信息头|响应头|实体头)CRLF[实体内容]
状态行=HTTP版本号 状态码 原因叙述
状态码表示响应类型如下:
1×× 保留
2×× 表示请求成功地接收
3×× 为完成请求客户需进一步细化请求
4×× 客户错误
5×× 服务器错误
响应头的信息包括:服务程序名,通知客户请求的URL需要认证,请求的资源何时能使用。
最后关闭连接:客户和服务器双方都可以通过关闭套接字来结束TCP/IP对话。
根据访问服务器访问资源的不同,HTTP请求的方式是不同的,除了常用的三种外还有很多种,下面对应列举说明。
GET: 请求指定的页面信息,并返回实体主体。
HEAD: 只请求页面的首部。
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE: 请求服务器删除指定的页面。
OPTIONS: 允许客户端查看服务器的性能。
TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
MOVE: 请求服务器将指定的页面移至另一个网络地址。
COPY: 请求服务器将指定的页面拷贝至另一个网络地址。
LINK: 请求服务器建立链接关系。
UNLINK: 断开链接关系。
WRAPPED: 允许客户端发送经过封装的请求。
这里主要来解释一下GET,POST和HEAD的含义
GET请求最为常见,它后面跟随一个网页的位置,服务器接收请求并返回请求页面。除了页面位置作参数之外,请求还可以跟随协议的版本如HTTP/1.1等作为参数,以发送给服务器更多的信息。
POST请求要求服务器接收大量的信息,除了POST后面跟随的参数外,浏览器还会在后面持续发送数据,让服务器进行处理。
HEAD请求在客户程序和服务器之间进行交流,它不会返回具体的文挡。只请求页面首部。当使用GET和POST时,服务器最后都将结果文挡返回给客户程序,浏览器将刷新显示。而HEAD请求不同,它仅仅交流一些内部数据,这些数据不会影响浏览的过程。因此HEAD方法通常不单独使用,是和其他方式一起使用,起到辅助的作用。
下面已抓包图例说明一下简单的HTTP应用包的主要内容:
红色部分就是请求,蓝色是响应部分。
请求方式是GET,HTTP版本是1.1 ,Accept-language使用的语言,user-agent初始化请求的可客户机(浏览器或其他编辑工具),Host主机(请求的对象)等信息。
响应信息返回的协议版本为HTTP/1.1,请求的HTTP版本可以和返回的HTTP不一致。返回的状态码为200 OK。服务器类型,当前日期时间等。Content-type连接的媒体类型等。
,