我的响应正文中的“ 1e”和“ 0”字符是什么?

时间:2018-09-18 05:22:35

标签: php http nginx tcp

我正在编写一个laravel项目,旨在提供一个通过http GET请求接收数据的端点。当我使用nginx和php-fpm服务项目时,我的请求TCP流如下:

GET /blood-sugar?data=5A25101010215H888003000000069141201120207C8_460040124507576_FFFFFFFFFFFFFFFFFFFFFFFFF HTTP/1.1
Host: bioland.txhpro.com
Connection: keep-alive
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Postman-Token: 67530707-765a-f185-f3a2-6795a6b27b2b
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8

HTTP/1.1 200 OK
Server: nginx/1.12.2
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/7.1.11
Cache-Control: no-cache, private
Date: Tue, 18 Sep 2018 05:05:53 GMT

1e
+IP2F644C030050541209120D051OK
0

我的回复正文周围还有多余的字符,例如“ 1e”和“ 0”,这违反了我伴侣的规则。

当我使用'php artisan serve --host = 0.0.0.0'并再次请求时,这些字符都消失了。

您能告诉我这些字符是什么以及如何删除它们吗?

2 个答案:

答案 0 :(得分:1)

这些是"chunked" transfer encoding的一部分。每个块均以十六进制数开头,该十六进制数包含该块中的字节数,换行符,指定的数据字节数和另一个换行符。数据的结尾由0的块大小指示。

1e为30的十六进制。下一行包含30个字节的数据。

下一行以0开头,表明它是数据的结尾。

如果您的伴侣无法处理此问题,则说明他们的代码有问题。 RFC 7230说:

  

收件人必须能够解析和解码分块传输      编码。

您可以使用

禁用NGINX中的分块编码
chunked_transfer_encoding off;
配置文件中的

指令。参见documentation

答案 1 :(得分:0)

它是chunked Transfer encoding。 1e是这里的数据长度。您的接收伙伴都需要对此进行解码(可能会有更多的块,这意味着伙伴需要一次又一次地请求)。或者,您可以在服务方禁用分块编码。