系统地了解HTTP请求响应模型中的HTTP协议
1.1系统地了解HTTP请求响应模型中的HTTP协议
1.1.1HTTP请求响应模型中的HTTP协议
1、HTTP协议(Hypertext Transfer Protocol,超文本传输协议)
客户端程序(Web浏览器、网络爬虫或者其它的工具程序)与Web服务器之间的“请求/响应”的交互过程中所必须要遵循的规则和数据格式;客户端程序也叫用户代理(User Agent),在用户代理和源服务器中间可能存在有多个中间层——比如代理、网关等。
2、HTTP协议是建立在TCP/IP上层的应用层协议、并且是一个基于请求/响应模式的无状态的协议
HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议,它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及内容显示的次序——文本先于图形显示等。
HTTP协议的无状态特性,使得客户端每次需要更新信息时都必须重新向服务器发起请求,客户端收到服务器返回的信息后再更新屏幕内容。而所谓的无状态也就是指协议对于事务处理没有记忆能力,因此如果后续处理需要前面的信息,则要求客户端程序必须重新传输,这将会导致每次连接传送的数据量增大,但另一方面由于服务器不需要先前信息时,服务器的应答过程就会比较迅速。
3、HTTP协议的主要特点
1)支持客户/服务器模式。
2)简单快速:客户端程序向服务器端程序发送请求服务时,只需要传送请求的方式和目
标资源的路径和文件名。而请求的方式可以为GET、HEAD、POST等形式。由于HTTP 协议简单,使得HTTP服务器的程序规模可以比较小,并且通信速度也很快。
3)灵活:HTTP允许传输任意类型的数据对象,只需要设定传输的类型——由
Content-Type标设。
4)无永久连接:无永久连接的含义是限制每次连接只处理一个请求,并且服务器处理完
客户端程序的请求、并收到客户端程序的应答信息后,即断开连接——当然,采用这种方式的目的是提高传输性能和减少传输时间。
5)无状态:HTTP协议是无状态协议——协议对于事务处理没有记忆能力,但导致后续
处理如果需要前面的信息时,则要必须重传,也就增加了每次连接时所传送的数据量会增大。另一方面,由于服务器不需要先前信息,服务器对客户的应答也就会比较迅速。
4、HTTP协议是基于请求响应模式的
(1)HTTP服务器默认的TCP连接的端口为80
每当客户端向服务器发送一个请求后,从而也就建立出一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在80端口监听客户端发送过来的请求,一旦收到客户端的请求,服务器就向客户端程序发回一个状态行——比如“HTTP/1.1 200 OK”和响应的消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。
(2)HTTP协议中的请求头信息
在请求头中包含有请求的方法、URI、协议版本、以及包含请求修饰符、客户端信息和请求的具体内容等类似MIME的消息结果。下面为一个典型的请求消息数据:
(3)HTTP协议中的响应消息
Web服务器对客户端的请求以一个状态行作(包含有响应码)为响应,相应的内容包括消息协议的版本、成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
5、基于HTTP协议的信息交换过程
基于HTTP协议的客户/服务器模式的信息交换主要分四个过程:建立连接、发送请求信息、返回响应信息、关闭连接。
(1)首先建立连接
浏览器用户点击HTML页面中的某个超级链接,客户端浏览器与Web服务器就建立TCP 连接。
(2)其次发送请求
打开一个连接后,客户端浏览器发送一个请求给服务器并完成请求提交。请求信息的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
(3)再返回响应结果
服务器在处理完客户端请求之后,给予相应的响应信息,其格式为一个状态行,包括信
息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
(4)最后关闭连接
客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接——客户端和服务器双方都可以通过关闭套接字来结束TCP/IP对话。当然,如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端浏览器中显示输出。
6、HTTP的头域包括通用头,请求头,响应头和实体头四个部分
每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
(1)通用头域
通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。
(2)Cache-Control头域指定请求和响应遵循的缓存机制
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。
(3)Date头域
Date头域表示消息发送的时间,时间的描述格式由rfc822定义。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
(4)Pragma头域
Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
(5)Host头域
Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
(6)Referer头域
Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。
1.1.2基于HTTP协议的各种请求方式
因为HTTP没有内置的错误处理机制、并且是无状态的,传输协议不记忆从一条请求消息到另一条请求消息的任何信息。但由于Web应用系统需要记忆操作者的一些“请求内容”或者“浏览的过程”,这就需要在Web页面或者URL中携带各种参数及其值(也就是请求参数)。这可以通过不同的请求方式如Get、Post和Head等来实现。
1、各种请求方式的含义
GET方法取回由Request-URI标识的信息。HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单。
2、Get请求方式
(1)Get——Get请求返回以URL形式表示的资源,当用户在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用Get方法向服务器获取资源。
(2)在Get请求中可以发送Query String(就是在URL后用?附加一个参数列表),代表URL编码字符串的实际意义。
(3)Get可传递的信息只有2KB左右,而且是明码传送信息,所有的信息均可在地址栏中看见,非常不安全。如http://./password=123456安全吗?另外如果有大量数据呢?地址栏放得下吗?
3、Post请求方式
(1)Post请求的实现方式
Post请求是通过表单实现的,使用Get和Post提交表单的主要不同之处是Get请求显示追加了查询字符串的表单参数,而Post请求是连同请求消息体一起发送表单参数。
(2)实现的过程
Post 请求先将URL发出,然后把查询字符串放在HTTP Body内发送,Post请求可以封装大量的信息,发送时的Post信息不出现在URL中,并且加密传送,更安全。
(3)主要的特性
Post能发各种对象,包括各种大数据量的附件文件。服务器能分析封装的Post消息并处理其中数据
4、实现Post请求的示例
(1)Post提交的实现形式
所有的Post提交只能通过Web Form表单的形式产生,提交方式又可分两种(注意Method 属性要设置为Post)
1)直接提交(利用submit按钮提交)
2)间接提交(利用脚本代码实现提交)
(2)直接post提交
点击提交按钮,立即发生提交(注意:提交后所对应的文件名的大小写与实际的文件名称要一致)
(3)间接post提交(document.form1.submit();)
是指点击某个“按钮”本身并不能完成提交,而只有通过脚本才能完成的提交,称为间接提交。
5、实现Get请求的示例
(1)提交的方式——get提交可以发生在Form表单和URL中
(2)在Form中产生
提交时指定Method为get的表单时浏览器所发出的请求(