stadly / http

一个处理 HTTP 头部的 PHP 库。

v1.2.0 2023-09-22 08:52 UTC

This package is auto-updated.

Last update: 2024-09-22 11:08:58 UTC


README

Latest Version on Packagist Software License Coverage Status Quality Score Total Downloads

一个用于解析和构建 HTTP 头部的 PHP 库。

安装

通过 Composer

$ composer require stadly/http

用法

解析 HTTP 头部

可以使用每个头部类的 fromValue 解析头部值

use Stadly\Http\Header\Common\ContentType;
use Stadly\Http\Header\Request\IfNoneMatch;
use Stadly\Http\Header\Response\ContentDisposition;

$contentType = ContentType::fromValue($_SERVER['HTTP_CONTENT_TYPE']);
$ifNoneMatch = IfNoneMatch::fromValue($_SERVER['HTTP_IF_NONE_MATCH']);
$contentDisposition = ContentDisposition::fromValue($_SERVER['HTTP_CONTENT_DISPOSITION']);

可以使用 HeaderFactory::fromString 解析头部字符串

use Stadly\Http\Header\Request\HeaderFactory as RequestHeaderFactory;
use Stadly\Http\Header\Response\HeaderFactory as ResponseHeaderFactory;

$requestHeaders = [
    'Content-Type: text/html; charset=UTF-8',
    'If-Match: "67ab43", "54ed21", W/"7892dd"',
    'Range: bytes=10-100, 200-300',
];
foreach ($requestHeaders as $headerString) {
    $header = RequestHeaderFactory::fromString($headerString);
}

$responseHeaders = [
    'Content-Type: multipart/form-data; boundary="abc def"',
    'Cache-Control: no-cache="foo, bar", max-age=120, must-revalidate',
    "Content-Disposition: attachment; filename=unicorn.jpg; filename*=UTF-8''%F0%9F%A6%84.jpg",
];
foreach ($responseHeaders as $headerString) {
    $header = ResponseHeaderFactory::fromString($headerString);
}

请注意,头部字符串包括头部名称,而头部值不包括。以下结果是相同的头部

use Stadly\Http\Header\Response\ContentDisposition;
use Stadly\Http\Header\Response\HeaderFactory;

$header1 = ContentDisposition::fromValue('inline; filename=image.jpg');
$header2 = HeaderFactory::fromString('Content-Disposition: inline; filename=image.jpg');

示例用法

示例解析 If-None-Match 请求头部并使用它来确定是否提供文件。为提供文件而构建响应头部 Content-DispositionETag

use Stadly\Http\Header\Request\IfNoneMatch;
use Stadly\Http\Header\Response\ContentDisposition;
use Stadly\Http\Header\Response\ETag;
use Stadly\Http\Header\Value\EntityTag\EntityTag;

$entityTag = new EntityTag(md5($filename));
$ifNoneMatch = IfNoneMatch::fromValue($_SERVER['HTTP_IF_NONE_MATCH']);

if ($ifNoneMatch->evaluate($entityTag)) {
    // Serve file.
    $contentDisposition = new ContentDisposition('attachment');
    $contentDisposition->setFilename(basename($filename));
    header((string)$contentDisposition);

    $eTag = new ETag($entityTag);
    header((string)$eTag);

    readfile($filename);
} else {
    // 304 Not modified.
    http_response_code(304);
}

头部字段概述

已实现检查的头部字段。

常见头部字段

表示元数据

有效载荷语义

请求头部字段

控制

条件

内容协商

身份验证凭证

请求上下文

响应头字段

控制数据

验证器头字段

身份验证挑战

响应上下文

其他

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

测试

$ composer test

贡献

请参阅CONTRIBUTINGCODE_OF_CONDUCT以获取详细信息。

安全性

如果您发现任何安全问题,请通过电子邮件[email protected]而不是使用问题跟踪器。

鸣谢

许可协议

MIT 许可协议 (MIT)。请参阅许可文件以获取更多信息。