HTTP使用介绍:RESTful与HTTP状态码、报文信息、方法介绍、get/post对比

报文信息

通用首部字段
Date :创建报文时间
Connection:连接的管理
Cache-Control:缓存的控制
Transfer-Encoding:报文主体的传输编码方式

请求首部字段
Host:请求的资源所在的服务器,可用来支持一个web server配置多个虚拟服务器站点
Accept:可处理的媒体类型
Accept-Charset:可接受的字符集
Accept-Encoding:可接受的内容编码
Accept-Language:可接受的自然语言

响应首部字段
Accept-Ranges:可接受的字节范围
Location:令客户端重新定向到的URL
Server:HTTP服务器的安装信息

实体首部字段
Allow:资源可支持的HTTP方法
Content-Type:实体主体的类型
Content-Encoding:实体主体使用的编码方式
Content-Language:实体主体的自然语言
Content-Length:实体主体的字节数
Content-Range:实体主体的位置范围,一般用于发出部分请求时使用

REST

同一份 RESTful API 可供不同的浏览器和移动设备使用
定义了使用 HTTP的限制,描述一种设计良好的 Web 应用:该应用是可靠的,运行良好,可扩展,设计优雅,而且方便修改

对比SOAP

SOAP一般指简单对象访问协议。简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。

尤其是和 SOAP 或其他消息服务做类比时,人们认为 REST 可以理解为是一种 Web 服务协议,缺少实现 SOAP 时必需的扩展定义和额外结构。
SOAP 提供了规范的约定,适合复杂的 RPC 架构,但对大多数 Web 开发来说,它引入了额外的开销,需要大量处理,而且使用烦琐的 XML 信封来表示。这使得客户端 - 服务器端的 Web 应用对该协议提不起兴趣。
SOAP在WEB上交换结构化的和固化的信息,属于复杂的、重量级的协议
在SOAP模式把HTTP作为一种通信协议,而不是应用协议。所以http中的表头,错误信息等全部无视。

REST 直接依赖底层 HTTP协议的功能,包括请求方法、URI 地址和响应代码。HTTP method中的 POST GET PUT DELETE 都是与请求方法对应的,rest真正实现了http的五层结构。REST 提交的请求中,代理服务器可以通过请求方式直接判断请求动作是要进行什么操作。

对比RPC
REST 也可以和远程过程调用(RPC)风格的 API 来对比,远程过程调用用 URL 表示行动,REST 用 URL 访问资源。这样说来,REST 是面向名词的,而 RPC 是面向动词的

REST 使用 Web 地址(URI)访问资源
即统一资源标识符。可进一步划分为统一资源名(URN,代表资源的名字)和统一资源定位符(URL,代表资源的地址)。

大部分情况下,URL 应使用小写字母,使用连字符而不是下划线,结尾使用斜杠。单个资源使用单数名词指代;一组资源使用复数名词指代。不鼓励使用文件后缀,但当 API 支持多种格式,比如 XML 和 JSON 时,可使用文件后缀。使用“Accept”和“Content-Type”头来控制格式,是一种更好的替代方案。

使用动词(HTTP 请求)操作资源
即使用 GET、POST、PUT 和 DELETE在数据库或对象关系管理(ORM)系统中传统的 CRUD (Create/Read/Update/Delete)操作对应。REST 架构规定:访问或修改 Web 上的资源,和访问或修改数据库中的记录一样,需要使用 SQL 或其他查询的语言。
在这里插入图片描述
get请求 = header请求 + body{}消息体

get与post

注意:区别于get、put、delete,post方法不满足幂等性,因为post用于创建资源,所对应的URI并非创建的资源本身,而是去执行创建动作的操作者。
比如:POST http://www.forum.com/articles的语义是在http://www.forum.com/articles下创建一篇帖子,HTTP响应中应包含帖子的创建状态以及帖子的URI。两次相同的POST请求会在服务器端创建两份资源,它们具有不同的URI。

GET把参数包含在URL中,POST通过request body传递参数。这取决于HTTP的规定和浏览器/服务器的限制。
GET产生一个TCP数据包;POST产生两个TCP数据包。取决于浏览器自己的实现
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(被接受);
而对于POST,浏览器先发送header,服务器响应100(继续), 再发送data,服务器响应200(被接受)
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。

REST 要求无状态的设计
会话数据保存在客户端。客户端的每次请求必须要包含整个客户端状态。服务器端在不通过额外查询应用状态的情况下,响应所需要的所有数据,并获得与应用状态相关的数据。因为所有的数据都包含在了请求里,使得每次交互的意图理解起来变得容易。
会话数据不在服务器端维护,容错性和可扩展性都得到提升。服务器资源不会浪费在存储上,否则就需要重新获取。

无状态:前后数据包的发送、传输、接收都是独立的,互不影响
无连接:通信双方不长久维持对方的任何信息

REST 要求给数据打标签
标明其是否可被缓存。这使得客户端应用能重用缓存的响应,而不是此后发送同等的请求。和任何系统的缓存一样,这会极大提高客户端应用性能。
同时,为避免数据过期,采用合适的缓存失效策略带来了复杂性。以 Web 来说,缓存可以存在于客户端(浏览器里)、服务器端,或者位于二者之间(网关或代理服务器)。

统一接口
规定了所有 RESTful 应用的通用资源定位方式。每一个 REST 应用都共享一种通用架构
在这里插入图片描述

HEAD

服务器响应时不会返回消息体.响应中,HTTP头中包含的元信息应该和一个GET请求的响应消息相同。
用来获取请求中隐含的元信息,而不用传输实体本身。

一个HEAD请求的响应可被缓存,可以用来更新之前缓存的实体。如果当前实体跟缓存实体的阈值不同(可通过Content-Length、Content-MD5、ETag或Last-Modified的变化来表明),那么就覆盖

只请求资源的首部;
检查超链接的有效性;
检查网页是否被修改;
多用于自动搜索机器人获取网页的标志信息,获取rss种子信息,或者传递安全认证信息等

标准 HTTP 状态码

在这里插入图片描述
错误类 4xx、5xx
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值