PSR-5 和 PSR-6 投票未通过所以直接跳到PSR-7了

本文档描述了在RFC 7230RFC 7231中被描述来代表HTTP消息通用接口,以及在RFC 3986中规定的URIs语法。

HTTP消息是Web开发的基础。Web浏览器和HTTP客户端之间,例如使用cURL创建一个发送到Web服务器的HTTP请求,Web服务器会返回一个HTTP响应。服务器端代码收到一个HTTP请求消息,并返回一个HTTP响应消息。

HTTP消息通常对与最终的消费者用户来说是抽象的,但作为开发者,我们通常需要知道它们是如何构建以及如何访问和操纵它们,以执行我们的任务,是否可能被创建为到HTTP API的请求或处理传入请求。

每一个HTTP请求消息有一个具体形式:

POST /path HTTP/1.1
Host: example.com foo=bar&baz=bat

一个POST请求的第一行是“请求行”,按照顺序包含了HTTP请求方法,请求的目标地址(通常是一个绝对URI或者服务器上的路径)以及HTTP协议的版本。接着是一个或多个HTTP头,一个空行,以及消息主体。

HTTP响应信息具有类似的结构:

HTTP/1.1 200 OK
Content-Type: text/plain This is the response body

第一行是“状态行”,按照顺序,依次包含了HTTP协议的版本,HTTP状态码,以及一个“原因分析”,也就是一个对人类友好可读的状态码的描述。像请求消息一样,随后一个或多个HTTP头,一个空行,以及消息主体。

本文档中描述的接口都是围绕HTTP消息的抽象和构成它们的元素。

关键词 “必须”("MUST")、“一定不可/一定不能”("MUST NOT")、“需要”("REQUIRED")、

“将会”("SHALL")、“不会”("SHALL NOT")、“应该”("SHOULD")、“不该”("SHOULD NOT")、

“推荐”("RECOMMENDED")、“可以”("MAY")和”可选“("OPTIONAL")的详细描述可参见 RFC 2119

参考

  1. 规范

1.1. 消息

HTTP消息是从客户机到服务器的请求或从服务器到客户端的响应。本规范分别为其定义了对于HTTP消息的接口 Psr\Http\Message\RequestInterfacePsr\Http\Message\ResponseInterface

Psr\Http\Message\RequestInterfacePsr\Http\Message\ResponseInterface 都继承自 Psr\Http\Message\MessageInterface 。而 Psr\Http\Message\MessageInterface 可以 被直接实现,实现者 应该 实现 Psr\Http\Message\RequestInterfacePsr\Http\Message\ResponseInterface

从这里开始,之后的描述中命名空间 Psr\Http\Message 在提到这个接口的时候将会被省略。

1.2. HTTP头

不区分大小写的头字段名

HTTP消息包括大小写不敏感的头字段名。头是从实现了 MessageInterface 接口的类中以不区分大小写的方式获取的。例如,获取 foo 头与获取 FoO 头的返回结果是相同的。同样,设置 Foo 头将覆写之前的设置的 foo 头的值。

$message = $message->withHeader('foo', 'bar');

echo $message->getHeaderLine('foo');
// Outputs: bar echo $message->getHeaderLine('FOO');
// Outputs: bar $message = $message->withHeader('fOO', 'baz');
echo $message->getHeaderLine('foo');
// Outputs: baz

尽管头能被不区分大小写地获取,但原有的大小写规范 必须 被保留,尤其是使用 getHeaders() 函数来获取头的时候。

不符合要求的HTTP应用程序可能依赖于一定的大小写规范,所以对于一个用户能够在创建一个请求或响应时控制HTTP报头的大小写的情况下是非常有用的。

带有多个值的报头

为了能够容纳具有多个值且依然能够方便地以字符串形式传输的报头, MessageInterface 接口的实例能够以数组或字符串的形式来获取报头。使用 getHeaderLine() 方法来获取特定名称的报头的值,其形式为不区分大小写并用逗号连接的字符串,包含了所有的报头值。使用 getHeader() 来获取特定名称的所有报头值,其以数组形式返回结果,且不区分大小写。

本文转自: PHP-FIG/PSR-7-http-message-interfaces.md

【PSR规范专题(6)】PSR-7 HTTP消息接口【转】的更多相关文章

  1. 【PSR规范专题(3)】PSR-2 代码风格规范

    [PSR规范专题(3)]PSR-2 代码风格规范 标签(空格分隔): PHP 转载自:https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-2-cod ...

  2. 【PSR规范专题(5)】PSR-4 改进后的自动加载规范

    本文转自: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md 关键词 "必须"(&quo ...

  3. 【PSR规范专题(4)】PSR-3 日志接口规范

    本文转自:https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-3-logger-interface-cn.md 本文制定了日志类库的通用接口规范. ...

  4. 【PSR规范专题(2)】PSR-1 基本代码规范

    转载自: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-1-basic-coding-standard-cn.md 基本代码规范 本篇规范制定 ...

  5. 【PSR规范专题(1)】PSR-0+namespace+spl_autoload_register实现框架模型

    了解命名空间 namespace是PHP5.3版本加入的新特性,用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题: 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/ ...

  6. PSR规范0-4整理

    PSR规范 psr规范 引言: PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准.这些规范的目的是 ...

  7. PSR规范

    背景 Framework Interoperability Group(框架可互用性小组),简称 FIG,成立于 2009 年.FIG 最初由几位知名 PHP 框架开发者发起,在吸纳了许多优秀的大脑和 ...

  8. 「PSR 规范」PSR-2 编码风格规范

    所有 PSR 规范请见:https://learnku.com/docs/psr  https://learnku.com/laravel/t/2079/psr-specification-psr-2 ...

  9. 微信服务号模板消息接口新增"设置行业"和"添加模板"及细节优化

    微信服务号模板消息可以向用户发送重要的服务通知,如信用卡刷卡通知,商品购买成功通知等.昨日,微信团队发布公告称模板消息新增“设置行业”和“添加模板”接口及细节优化,详细变动如下 模板消息[业务通知]自 ...

随机推荐

  1. mysql 开发进阶篇系列 55 权限与安全(安全事项 )

    一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ...

  2. Android切换横竖屏不销毁前台Activity,也不影响后台Activity

    在切换屏幕方向的时候,Activity默认会走销毁->重建的生命周期,而有时候我们不希望如此,就需要做些额外的设置了: 1.在AndroidMainifest.xml中对应的Activity标签 ...

  3. 大数据入门基础系列之Hadoop1.X、Hadoop2.X和Hadoop3.X的多维度区别详解(博主推荐)

    不多说,直接上干货! 在前面的博文里,我已经介绍了 大数据入门基础系列之Linux操作系统简介与选择 大数据入门基础系列之虚拟机的下载.安装详解 大数据入门基础系列之Linux的安装详解 大数据入门基 ...

  4. LINUX服务器搭建和常用配置介绍

    服务器搭建 : 搭建私有CA服务器 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_011_ca.html搭建samba服务器 : h ...

  5. Python多进程操作同一个文件,文件锁问题

    最近工作当中做了一个项目,这个项目主要是操作文件的. 在操作耗时操作的时候,我们一般采用多线程或者多进程.在开发中,如果多个线程需要对文件进行读写操作,就需要用到线程锁或者是文件锁. 使用fcntl ...

  6. openssl dhparam(密钥交换)

    openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html openssl dhparam用于生成和管理dh文件.dh(Diffie-H ...

  7. 巨杉数据库完成C轮数千万美元融资

    业界领先的金融级分布式数据库公司,巨杉数据库近日宣布完成由嘉实投资领投的C轮融资.本轮的领投方为嘉实投资,启明创投与DCM作为早期投资方跟投. SequoiaDB巨杉数据库成立6年来一直坚持技术驱动产 ...

  8. 全面认识golang string

    string我们每天都在使用,可是对于string的细节问题你真的了解吗? 今天我们先以一个问题开篇. 你能猜到下面代码的输出吗? package main import ( "fmt&qu ...

  9. golang的字符串拼接

    常用拼接方法 字符串拼接在日常开发中是很常见的需求,目前有两种普遍做法: 一种是直接用 += 来拼接 s1 := "Hello" s2 := "World" s ...

  10. iOS main.m解析

    在iOS开发中,有一个文件main.m,可能并不是很引起开发的注意.不过,可能在面试过程中,面试官还是有些会问到主函数里面到底做了哪些工作和任务.下面我们主要看一下main.m内部的逻辑. #impo ...