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