HTTP,HyperText Transfer Protocol(超文本传输协议),严谨的译名是(超文本转移协议)。
http协议通俗来讲就是我们在浏览器中浏览web网页这一过程所遵循的规范,正是有了这个规范,我们可以共享文件,我们可以看到页面上的图片、文档等信息。
一、网络模型
为了理解http,我们先来回顾一下网络通信参考模型,这里仅为简单说明,以TCP/IP四层模型为例,由上而下分为:应用层,传输层,网络层,链路层。其中每一层都要遵守特定的规则才能完成通信,这些规则都被称为协议。
1、应用层:向用户提供应用服务,FTP、DNS、HTTP都处于该层。
2、传输层:提供通信双方的数据传输,这里有两个不同的协议,TCP(面向连接 可靠)和UDP(无连接 不可靠)。
3、网络层:主要完成路由的功能,也可以进行网络互连,遵循IP协议。
4、链路层(or网络接口层):连接网络的硬件部分,设备、传输媒介等,也即网络的物理可见部分。
以http为例的网络通信如下图所示:
http通信模型发送端由上而下,接收端由下及上。
TCP协议负责把大块数据分割成报文段,并将这些数据包进行可靠的传输和管理。为了准确传送数据,使用了三次握手策略(three-way handshaking)。
IP协议一个重要的作用是路由选择,即如何在计算机、路由器等各种网络设备中选择合适的线路传输数据。
另外,传输数据我们肯定要知道接受端是谁,即它在网络中的IP地址和MAC地址,这里涉及到另外两个协议:DNS和ARP(Address Resolution Protocol)。它们分别提供域名到IP地址以及IP地址到MAC地址的映射。
这里简单提到了http通信中涉及到的网络模型和协议,有兴趣的小伙伴可以查阅计算机网络相关书籍深入了解。
二、HTTP通信
1)HTTP协议用于客户端和服务器端的通信,是一种请求/响应模型。客户端发送请求,服务器接受请求并响应,是一种简单的通信协议。接下来一起来看看http请求的过程。
HTTP请求过程2)http请求方法:
HTTP协议中共定义了八种方法或者叫“动作”get,post,put, options,head,delete,trace,connect,来表明对Request-URI指定的资源的不同操作方式,具体介绍如下:
1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送“*”的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
5、PUT
向指定资源位置上传其最新内容
6、DELETE
请求服务器删除Request-URL所标识的资源
7、TRACE
回显服务器收到的请求,主要用于测试或诊断
8、CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
注意:
1、方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。
2、HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。
下面重点来看Get请求和post请求
一般来讲get请求是用来信息获取的,它只会获取资源,并不会对资源进行更改,不会影响资源的状态。
get请求一般是以查询字符串的形式附在URL里,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。因此,存在一定的安全隐患
get提交的数据有大小限制,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。(这一点相信很多人都一直以为是2k的限制,其实并不是啊)
根据HTTP规范,POST表示可能修改变服务器上的资源的请求。
Post是将表单中的数据放在form的数据体中,表单中的参数值对是通过request body发送给服务器,Post的所有操作对用户来说都是不可见的。
理论上POST没有限制,可传较大量的数据
1. get提交,数据放在url里面,所以数据是在浏览器可见的,不安全,而post提交是放在请求头中,用户不可见,所以比较安全;
2. 请求数据的大小,get有一定限制,而post可发送的数据没有限制
3. get一般用来请求数据,不会对数据进行更改,而post用于发送数据,会对数据进行修改
3)HTTP是一种十分简单却应用广泛的网络协议。它有以下显著特点:
1、HTTP是一种无状态协议。即一次请求对应一次响应,并不能保存之前发送的请求或响应。然而却无法满足我们的持续登录状态,为此引入Cookie技术了。客户端保存Cookie信息,下一次请求会携带cookie使服务器端能够识别登录状态。
2、HTTP的持久连接。在HTTP初始版本中,每一次HTTP通信对应一次新的TCP连接,这显然不能满足现在的需求。如果一个页面中有很多图片,每接收完一个图片就要断开TCP连接,则会大大延长页面加载时间和服务器负载。于是HTTP新版本中引入了“持久连接”,只要任意一端未请求断开,则会一直保持TCP连接状态。
三、响应状态码
当浏览器向服务器端发送请求,服务器为了描述请求结果,需借助状态码标示成功或失败信息。
状态码一般由3位数字和原因短语构成。数字第一位指定响应类别,有以下5种:
状态码分类下面主要介绍我们经常遇到的几种状态码:
1、200 OK
表示请求发送至服务器端,而且被正确处理了。
2、304 Not Modified
表示客户端发送附带条件的请求时,服务器端资源未改变,可直接使用客户端未过期的缓存。
3、400 Bad Request
表示请求中存在错误,需要修改请求再次发送。
4、403 Forbidden
表示服务器拒绝了请求资源的访问,可能是访问权限出现了问题。
5、404 Not found
表示服务器上找不到请求的资源。
6、405 Method not allowed
表示该请求的方法被禁用或不支持,需要换一种方法再次请求。
7、500 Internal Server Error
表示服务器内部发生错误,无法完成请求。
8、503 Service Unavailable
目前无法使用服务器,无法处理请求(由于超载或进行停机维护)
版权印为您的作品印上版权59156334
网友评论