1.资源(Resource)
什么是资源,首先我们看《架构风格与基于网络的软件架构设计》的作者:Roy Thomas Fielding对资源的一个说明
Roy Thomas Fielding 写道
REST对于信息的核心抽象是资源。任何能够被命名的信息都能够作为一个资源:一份文档或一张图片、一个暂时性的服务(例如,“洛杉矶今日的天气”)、一个其他资源的集合、一个非虚拟的对象(例如,人)等等。换句话说,任何可能作为一个创作者的超文本引用的目标的概念都必须符合资源的定义。一个资源是到一组实体的概念上的映射,而不是在任何特定时刻与该映射相关联的实体本身。
更精确地说,资源R是一个随时间变化的成员函数MR(t),该函数将时间t映射到等价的一个实体或值的集合,集合中的值可能是资源的表现和/或资源的标识符。一个资源可以映射到空集,这允许在一个概念的任何实现存在之前引用这个概念——这一观念对于Web之前的大多数超文本系统来说比较陌生 [61]。一些资源在它们被创建后的任何时刻来检查,它们都对应着相同的值的集合,从这个意义上说它们是静态的。其他的资源所对应的值则会随时间而频繁地变化。对于一个资源来说,唯一必须是静态的是映射的语义,因为语义才是区别资源的关键。
简而言之,资源是一个抽象的东西,而在具体资源访问时,会根据内容协商的结果表示成一个具体表述(Representations)。每个资源由统一的资源标识符(URI)来描述,类似于资源的ID,或者说资源的地址。
2.表述(Representations)
表述是资源的具体表现形式,譬如,今天深圳的天气(资源),可以使用一副天气jpg图来描述,也可以XML数据来描述,也可以使用HTML的页面来描述,一种资源可以有多种表述,也就是说,通过同一个URI地址可以获取到多种表现形式,而具体怎么表现,则取决于Web客户端与Web服务端内容协商的一个结果。
3.内容协商
客户端和服务端通过内容协商来协商请求内容和响应内容的格式,主要协商的内容包括:
请求协商:
1)字符集(Accept-Charset):客户端通过发送该协商建议服务端使用该字符集来发送响应结果,譬如
Accept-Charset=gb2312,utf-8;q=0.7,*;q=0.7,客户端建议服务端优先使用gb2312或者utf-8来发送响应结果
2)请求编码(Accept-Encoding):客户端告诉服务端客户端所支持的编码格式,譬如Accept-Encoding =gzip,deflate表明客户端支持gzip压缩或者普通响应的结果
3)语言(Accept-Language):客户端通过发送该协商告诉服务端客户端所使用的语言,譬如Accept-Language=zh-cn,zh;q=0.5表明客户端偏号的语言是中文,譬如对于”今天深圳的天气“这个资源来说,服务端可以通过该选项决定使用什么语言来表述资源
4)表述偏好(Accept):客户端通过该选项告诉服务端其表述的偏号,譬如一个请求”今天深圳的天气“的Ajax程序,可以通过设置表述偏好为Accept=application/json来告诉服务端,希望得到Json描述的结果,而一个浏览器则可以通过传输表述偏好为Accept=text/html来告诉服务端,希望得到Html描述的结果
响应协商:
1)表述/表述字符集(Content-Type):服务端通过该协商告诉客户端表述的格式和字符集的情况,譬如Content-Type=text/html; charset=utf-8表示响应内容格式为Html,字符集为utf-8
2)表述编码(Accept-Encoding):服务端通过该协商告诉客户端表述的编码,譬如Content-Encoding=gzip服务端告诉客户端内容使用gzip压缩
4.方法
方法定义了对资源的操作,主要的方法包括GET、POST、UPDATE、DELETE等等,它们分别代表了对资源的读、建、改、删的操作
5.缓存
HTTP协议支持在Web的各个节点对资源的表述进行缓存,譬如在浏览器客户端、代理服务器、反向代理服务器、目标服务器等上对表述进行缓存(注意,此处的缓存不仅仅是指在目标服务器上进行的业务级别的缓存)
1)客户端请求
如果客户端缓存了某些表述,则在进行读请求(GET)时,携带请求条件(所谓的条件GET,使用Cache-Control指令),服务端接收到客户端的请求条件,比较确认客户端的表述是否过时,如果没有,则返回304响应,否则则把最新的表述响应给客户端
2)服务端响应
服务端对一些需要缓存的表述,则响应中携带缓存指令,告诉请求客户端如何对表述进行缓存
3)方法对缓存的影响
当对一个资源进行UPDATE或DELETE时,请求途经的所有服务器(如代理服务器、反向代理服务器、目标服务器)会自动将该资源对应的所有表述
缓存失效。
6.状态码
状态码描述了资源请求的结果,主要状态码包括:
1)1XX:信息类
2)2XX:成功类
典型的成功响应包括:
200 OK,表示请求正常处理
201 Created,表示POST请求已经接受,资源已创建,对于此响应,一般响应会携带新建资源的Reference给请求客户端
202 Accepted,表示POST/UDATE请求已经接受,但不一定处理,譬如对于POST/UPDATE请求为后台新建线程处理,可以使用该响应码
3)3XX: 重定向类
典型的重定向响应包括:
300 Multiple Choice:表明请求的资源有多种表述
301 Moved Permenently:表明所请求的资源已转移到其他位置,建议到新的位置上去请求资源
304 Not Modify:主要是针对携带条件的GET请求,服务端向客户端表明所请求的资源没有发生变化,可以继续使用客户端已缓存的数据
4)4XX: 客户端错误类
典型的客户端错误响应包括:
400 Bad Request:表明客户端的请求格式服务端无法识别
403 Forbiden:客户端要访问的资源权限受限,不允许访问
404 Not found:客户端要访问的资源不存在
405 Method Not Allowed:客户端请求的方法不允许,譬如有可能一个资源不允许删除,则不允许进行DELETE请求
408 Request Timeout:请求超时
5)5XX: 服务端错误类
典型的服务端响应包括:
500 Internal Server Error:服务器内部错误,无法响应
503 Service Unavailable:服务器无法处理当前请求
504 Gateway Timeout:网关超时
分享到:
相关推荐
总结一下,"sf-rfc-validate-0.0.8.tar.gz"是一个Python库,它提供了验证代码是否符合RFC标准的功能。这个库对于那些处理网络协议、遵循特定RFC规范的开发者来说非常有用。通过解压、安装和理解其结构,开发者可以...
**总结:**这个压缩包中的RFC文档是理解互联网基础架构和协议的关键参考资料,对开发者、测试人员和网络管理员来说非常有价值。通过深入学习这些文档,可以提升对互联网工作原理的理解,有助于开发更安全、高效的...
3. **DNS**:域名系统,负责将人类可读的域名转换为IP地址,RFC 1034和RFC 1035是DNS的核心规范。 4. **SSL/TLS协议**:安全套接层/传输层安全协议,用于加密网络通信,确保数据安全,如RFC 6101定义了SSL 3.0,而...
"rfc1-1000"这个文件名表明了压缩包内包含的是从RFC1到RFC1000的所有文档,可能以文本或其他可读格式存储,便于用户下载和查阅。 **总结** 这个压缩包是一个宝贵的资源,它提供了互联网早期发展的技术规范和协议,...
在RFC2616(HTTP/1.1)和RFC8446(TLS 1.3)中,你可以了解到这些协议的工作机制和安全特性。 **DNS与DHCP** DNS(域名系统)是互联网上的名字解析服务,将人类可读的域名转换为IP地址。RFC1034和RFC1035详细描述...
本文将深入探讨如何实现RFC 868中定义的Time Protocol,这是一种用于在Internet上的设备之间同步时间的简单协议。RFC 868(Request for Comments 868)是一个互联网标准,它规定了一个机制,允许客户端从特定的time...
3. **RFC 2616 - HTTP/1.1**:描述了超文本传输协议HTTP,这是互联网上应用最广泛的一种应用层协议,用于从万维网服务器传输超文本到本地浏览器。 4. **RFC 3986 - URI统一资源标识符**:定义了URI的语法和解析规则...
总结来说,这个压缩包中的源码是一个很好的学习资源,可以帮助开发者理解如何利用简单的网络协议进行时间同步。尽管RFC868协议已经过时,但理解其工作原理对于网络编程和时间同步概念的理解仍然有价值。同时,了解其...
2. **HTTP协议**:RFC2616(已被更新为RFC7230-7235系列)规定了超文本传输协议,是网页浏览的基础。 3. **DNS**:RFC1034和RFC1035定义了域名系统,使得人类可读的域名能转换成机器可识别的IP地址。 4. **SMTP**:...
RFC3263是互联网工程任务组(IETF)发布的一个建议,全称为“动态主机配置协议(DHCP)中使用的DNS服务器的地址分配”(DNS Servers Used for DHCP Service Discovery)。这个RFC旨在定义如何在DHCP(动态主机配置...
总结来说,RFC1724提供了一个标准的框架,扩展了RIPv2的管理能力,使得网络管理者可以通过SNMP访问和控制RIPv2网络,包括监控路由状态、配置接口参数以及管理路由更新的过程。这有助于提升网络的稳定性和性能,同时...
### 知识点总结 #### 一、DNS概述与历史背景 - **DNS定义**:域名系统(Domain Name System,DNS)是一种分布式命名系统,用于将人类可读的域名转换为计算机可理解的IP地址,同时也支持其他信息的查询。 - **DNS...
应用层是 TCP/IP 模型的最高层,包含了各种应用程序,如 HTTP(超文本传输协议)用于网页浏览,FTP(文件传输协议)用于文件传输,SMTP(简单邮件传输协议)用于电子邮件等。这些协议构建在下层协议之上,为用户提供...
- **主要目标**:DNS的目标是提供一个分布式数据库,用于将人类可读的域名转换为机器可识别的IP地址。 - **信息查询**:DNS能够根据域名查询到相应的IP地址以及其他相关信息,如邮件服务器地址等。 - **查询机制**:...
### RFC2579:SNMP管理信息结构中的文本约定 #### 一、引言与背景 《RFC2579》(Request for Comments 2579)是一份重要的互联网标准文档,由凯文·麦科洛赫里(Kevin McCloghrie)、戴维·珀金斯(David Perkins...
根据给定文件的信息,我们可以深入探讨与IMAP协议相关的详细知识点,尤其是其在RFC3051中的描述。虽然原始的RFC3051已被更先进的版本所取代,但了解其核心概念对于理解现代电子邮件系统至关重要。 ### IMAP协议概览...
总结来说,TFTP RFC1350是一个简洁而实用的文件传输协议,其C++实现源代码为我们提供了深入学习网络协议、理解底层通信机制的机会。通过研究源代码,我们可以提升自己的编程能力和网络通信技术,为今后的开发工作...
标题“rfc3501.rar_imap_in”暗示了这是一个关于IMAP(Internet Message Access Protocol)的文档,其中可能详细介绍了RFC3501规范,这是定义IMAP协议的一个重要标准。IMAP是一种电子邮件访问协议,允许用户在不下载...
而上层则提供了与现有的HTTP应用服务器兼容的HTTP-like RFC2616语义。 #### 二、文档组织与定义 ##### 文档组织 本文档首先概述了SPDY的基本概念,随后深入介绍了其帧层结构、会话管理机制、帧类型及流的概念等...
- **易读性**:大多数协议数据以普通的字符串形式编码,便于理解和调试。 - **服务器参照**:能够返回其他服务器的参照,提高了性能和分布式操作能力。 - **安全性**:可以与SASL(Simple Authentication and ...