主要问题是我向客户端发送的 HTTP 响应会导致客户端出现异常:“(MessageId: ID: on ExchangeId: <..>) 的传递失败。catch: ca.uhn.fhir.rest。 client.exceptions.FhirClientConnectionException:HAPI-1359:对 URL 执行 POST 时无法解析服务器的响应“。还有一个 DataFormatException:“HAPI-1861:无法解析 JSON 编码的 FHIR 内容:HAPI-1857:没有找到任何要解析的内容”。因此,客户端通过每小时左右重新发送相同的消息(捆绑包)来进行无休止的重试。
我在 PHP 应用程序中编写的内容是:
$_http_status_line = "HTTP/1.1 201 Created ";
$_date_string = make_date_string_reponse($_debug_level);
$_general_header = $_date_string . "; ";
$_etag_header = "ETag: W/\"1\"; ";
$_location_header = "Location: https://<some.url>/; ";
$_response_header = $_etag_header . " " . $_location_header . " ";
$_last_modified_date_string = make_date_string_reponse($_debug_level);
$_content_type_header = "Content-Type: application/fhir+json;charset=utf-8; ";
$_last_modified_header = "Last-Modified: {$_last_modified_date_string}; ";
$_entity_header = $_content_type_header . $_last_modified_header . " ";
$_http_header = $_general_header . $_response_header . $_entity_header . "\n" ;
$_http_response = $_http_status_line . $_http_header;
header($_http_response);
这段代码生成以下 HTTP 响应:
HTTP/1.1 201 创建于 2023 年 12 月 12 日星期二 04:54:37 GMT; ETag:W/“1”;地点:https://
客户端认为现在没有标头可供解析并生成异常,因此重试消息。我所期望的是标头到达客户端并且不会进行重试。
我现在的问题是:这是否是在 PHP 中编码 HTTP 响应的正确方法?
提前致谢。亲切的问候,永远。
HTTP 标头应格式化为
key: value
对,每个以换行符 (\n
) 结尾。您当前将标头连接成单个字符串,然后使用 header()
一次将其全部发送的方法可能无法正确分隔标头,这很可能是客户抱怨的原因。