而URI使用过程中,如果需要涵盖全部信息或者准确信息,就要正确使用URI的格式:
名称 | 作用 | 是否必选 |
---|---|---|
登录信息 | 指定用户名和密码作为从服务器端获取资源时必要的登录信息 | Y |
服务器地址 | 使用绝对 URI 必须指定待访问的服务器地址 | Y |
服务器端口 | 连接服务器的端口 | N |
文件路径 | 指定服务器上的文件路径来定位特指的资源(UNLX系统) | N |
查询字符串 | 可以作为URL携带的请求参数来协助定位具体文件资源 | N |
片段标识符 | 通常可标记出已获取资源中的子资源 | N |
无状态协议
Http协议属于一种不记录状态的协议,即无状态协议,具体表现为,每次请求发起都会重新进行连接,并不会根据之前的状态或者持久化保持状态。每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性。但是Http虽然是无状态协议,但是有保存状态信息的需求,HTTP1.1开始引入了Cookie技术,使用cookie来代为管理状态信息。
HTTP协议方法
Http协议支持通过不同的请求类型–即协议方法来达成某种目的,实现功能,HTTP1.1支持的协议方法如下:
GET :获取资源
Get方法用来访问已经被URI识别的资源,指定的资源信息经由服务端解析以后返回对应的资源响应内容,也就是说如果当前访问的资源是文本等静态资源,则会返回对应的数据,如果是网关等程序,则会返回对应的结果。
POST:传输实体主体
在HTTP中推荐使用POST方法来传递我们需要传输的内容或者实体信息,虽然GET方法可以添加查询字符串来辅助传递一定的信息和参数,但是要注意的是GET方法定义仅仅是希望根据查询字符串来定位具体的资源,所以GET方法一般都希望得到快速响应,传递的数据的长度有一定的限制
PUT:传输文件
HTTP协议中,PUT方法被定义出来用来朝服务端传递文件(上传)使用的方法,要求在请求的报文中包含文件内容,然后保存文件到请求的URI所在的位置上,但是由于HTTP1.1不带有安全机制,所以一般当前方法在HTTP协议上不开放,类似的协议如:Restful会开放实现其他规范的操作
HEAD:获得报文首部
HEAD方法和GET方法一样,唯一的区别是GET方法返回完整的响应信息,而HEAD方法不需要报文主体部分,因为此方法仅用来获取头信息,用来确认URI是否有效或者触发资源的缓存更新等
DELETE:删除文件
DELETE方法和PUT方法是完全相反的定义,这里的作用是用来删除指定请求URI上位置的资源文件,而和PUT一样,在不带有安全验证机制的情况下一般也是不开放的
OPTIONS:询问支持的方法
OPTIONS方法使用场景比较特殊,一般情况下我们用来查询针对请求URI指定的资源支持的方法有哪些(和跨域操作也有一定的联系)
TRACE:追踪路径
TRACE方法是HTTP协议用来检查和追踪请求过程提供的方法,当发送请求的时候,会在Max-Forwards 首部填入数值,每次经过一个服务端就会-1,当数字减少到0的时候,就会停止传输请求,直到接受到返回的状态码响应才算结束。使用TRACE方法可以检查当前请求是否被篡改,但是由于当前方法很容易引起XST(Cross-Site Tracing,跨站追踪)攻击,所以一般都禁止使用
CONNECT:要求用隧道协议连接代理
使用CONNECT方法要求是与代理服务器建立连接隧道,实现隧道间通信TCP,常见会使用SSL或者TLS协议把内容加密后传递到隧道,CONNECT的格式如下:
CONNECT 代理服务器名:端口号 HTTP版本
我们把1.0和1.1两个版本的支持的协议方法列个表格,看下具体差异:
方法 | 作用 | 支持的协议版本 |
---|---|---|
GET | 获取资源 | 1.0、1.1 |
POST | 传输实体主体 |