在 PHP 中获取请求的“内容类型”标头

2022-08-30 09:59:11

我正在PHP中实现REST服务。此服务应该能够支持多种输入和输出格式(JSON、XML)。因此,我想检查请求标头“接受”“内容类型”,以了解客户端发送和请求的内容类型。

访问“接受”标头非常简单,就像使用 一样。但是,访问“内容类型”标头似乎是一项艰巨的任务。我搜索了PHP文档和网络,但提供的唯一解决方案是使用PHP函数,该函数仅在PHP作为Apache模块安装时才受支持,这在我的情况下是不正确的。$_SERVER['HTTP_ACCEPT']apache_request_headers()

所以我现在的问题是:如何访问请求的标题“内容类型”?


答案 1

普通 (GET) 请求没有标头。对于 POST 请求,它将显示为 $_SERVER[“CONTENT_TYPE”],其值类似于 multipart/form-data 或 application/x-www-form-urlencoded。Content-Type

这是CGI/1.1规范所要求的:http://www.ietf.org/rfc/rfc3875


答案 2

您需要手动指示Apache提供标头(以及所需的任何其他标头)。Content-Type

在文件或虚拟主机中弹出类似如下的内容:.htaccess

RewriteEngine on
RewriteRule .* - [E=HTTP_CONTENT_TYPE:%{HTTP:Content-Type},L]

瞧,你只是合成了你自己的!$_SERVER['HTTP_CONTENT_TYPE']

编辑:

我假设你正在使用Apache运行PHP作为CGI,所以你可以使用GET和POST以外的动词,就像大多数休息服务一样。如果您使用的是其他Web服务器或基本上闻所未闻的PHP SAPI,则需要使用类似的技巧;PHP作为CGI根本无法访问内容之外的请求头,无论你使用什么其他机制 - ,,甚至扩展中的类都是空的。$_SERVER$_ENVapache_request_headers()php_http


推荐