我正在编写一个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"并再次请求时,这些字符消失了。
你能告诉我这些字符是什么以及如何删除它们吗?
这些是"分块"传输编码的一部分。每个块都以一个十六进制数字开头,其中包含该块中的字节数、换行符、指定的数据字节数和另一个换行符。数据的末尾由块大小0
表示。
1e
是 30 的十六进制。下一行包含 30 字节的数据。
下一行以0
开头,表示它是数据的结尾。
如果您的合作伙伴无法处理此问题,则他们的代码有问题。RFC 7230 说:
收件人必须能够解析和解码分块传输 编码。
您可以使用
chunked_transfer_encoding off;
配置文件中的指令。请参阅文档。
它是分块传输编码。 1e 是此处的数据长度。您的接收合作伙伴需要对其进行解码(后面可能会有更多块,这意味着合作伙伴需要一次又一次地请求(。或者,您可以在服务端禁用分块编码。