最近面试总是被问到http相关的内容,这里做一个简单的总结:
前置知识:URL与URI
URL是我们平时非常常见的一种称呼,浏览器访问的网页地址就是一个url,rul学名统一资源定位符,英文为 :Uniform Resouce Locator,说白了就是个地址。
但是URI与URL (Uniform Resource Identifier)是不同的
根据 RFC2369对URI的定义:
- Uniform:
规定统一的格式可方便处理多种不同类型的资源,而不根据上下文环境来识别资源指定的访问方式。 - Resource:
资源的定义是:可以标识的任何东西。不仅仅是文档文件、图像或服务等能够区别于其他类型的,全部都可以作为资源,另外资源不仅可以是单一的,也可以是多数的集合体。 - Identifier:
表示可以标识的对象。也成为标识符
所以综上所述,URI可以描述为:某个协议方案表示的资源的定位标识符这里的协议方案可以理解为你采用了什么协议,如何是http协议,那协议方案就是http,除了http之外资源方案还可以是ftp、telnet、file等。
所以不难发现URL是URI的子集
接下来介绍一下在http/1.1中可以使用的方法
GET :获取资源
GET方法用来请求访问已经被URI识别的资源。指定的资源经过服务器端解析后返回相应的内容。如果请求的资源是文本,那么就保持原样返回。
POST : 传输实体主体
这个方法用来传输实体的主体,虽然GET方法也可以传输实体的主体,但是一般不用GET方法,因为POST的主要目的不是获取响应的主体内容。
PUT:传输文件
PUT方法用来传输文件。就像FTP协议上传文件一样,要求在请求报文的主体中包含文件内容,然后保存到请求的URI指定的位置。
注意:HTTP/1.1的PUT本身不带验证机制,任何人都可以上传文件,所以存在安全问题。所以需要配合Web应用程序的验证功能,或者架构采用REST标准
HEAD :获得报文首部
HEAD和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性以及资源更新的日期时间等
DELETE :删除文件
这个方法用来删除文件,按照请求URI删除指定的资源
注意: HTTP/1.1的PUT本身不带验证机制,同样存在安全问题。所以需要配合Web应用程序的验证功能,或者架构采用REST标准
OPTIONS:询问支持的方法
这个方法用来询问URI指定的资源支持的方法
一般相应是这个样子:
Allow : GET, POST , HEAD,OPTIONS… 诸如此类
TRACE: 追踪路径
TRACE 方法是让Web服务器端将之前的请求通信返回给客户端的方法
注意:这个方法会引起XST(跨站追踪)攻击,慎用或者不要使用
CONNTECT : 要求用隧道协议连接代理
CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。
其他:
LINK 与 UNLINK已经被HTTP/1.1废弃。