Apache 2.2.22 偶尔会将 Safari 8、9 中的 POST 请求更改为 GET

Apache 2.2.22 偶尔会将 Safari 8、9 中的 POST 请求更改为 GET

我观察到 Safari 8 和 9 多次向两个不同的 Apache 2.2.22 实例发送 POST 请求,然后这些请求作为 GET 请求传递到后端 REST API。这种情况偶尔发生,可能在一百个或更多请求中才会发生一次。

我确信的是

  1. 客户端发送 POST 请求。
  2. 在 Wire Shark 中,我能够捕获的 HTTP 请求被分成两个 TCP 段;第一个包含所有消息头(包括空白行),第二个包含完整的 JSON 主体。捕获数据如下。
  3. Apache 将请求记录为 GET。GET 请求被传递给我们的 REST API,该 API 返回错误(响应代码 500 是用户错误,应该是 405),通知用户预期的是 POST,但收到的是 GET。日志示例如下。
  4. 我从客户端捕获的大多数消息都围绕一个有问题的观察结果,同样被分成两个 TCP 段,第一个是完整报头,第二个是正文。这些 POST 请求被 Apache 记录为 POST 并得到正确处理。

弱假设

  1. 这只发生在 Safari 中。报告该问题的 QA 人员主要在 Firefox 中工作,偶尔在 Safari 9 和 Chrome 中工作;无论如何,她使用的是 El Capitan。开发人员能够重现该问题,但仅限于 Yosemite 上的 Safari 8。除了 Safari 之外,该问题从未出现在其他浏览器中。
  2. 该问题出现在 Apache 2.2.22 中,但不出现在 Apache 2.4.16 中。上述观察结果出现在两个不同的 Apache 2.2.22 实例上。在 Apache 2.4 服务器上重现该问题的尝试(包括使用上述主机和客户端)均未成功。

锡箔帽观察

  1. 该错误请求的内容长度为 123 字节。
  2. 这条坏消息是在中午时分发送的。

我对此有些担心。我很难要求所有客户从 Apache 2.2 升级到 2.4,而且我无论如何也无法告诉他们不能使用 Safari。我是否忽略了一些显而易见的东西?有人可以提供一些可能有助于我调查的提示吗?提前致谢。

详情如下

TCP 段 1

0000   78 e3 b5 c6 2f 84 a8 86 dd 8d f5 3a 08 00 45 00  x.../......:..E.
0010   02 07 ee 8c 40 00 40 06 c7 5a c0 a8 00 bd c0 a8  ....@[email protected]......
0020   00 fc eb be 00 50 af 66 92 92 1e 67 2e a0 80 18  .....P.f...g....
0030   10 00 dd 1c 00 00 01 01 08 0a 33 9f f8 f4 91 af  ..........3.....
0040   75 0d 50 4f 53 54 20 2f 70 69 7a 7a 61 2f 72 65  u.POST /pizza/re
0050   73 74 2f 61 6c 6c 6f 63 61 74 69 6f 6e 2f 75 70  st/allocation/up
0060   64 61 74 65 3f 63 6f 75 6e 74 65 72 3d 34 30 20  date?counter=40 
0070   48 54 54 50 2f 31 2e 31 0d 0a 48 6f 73 74 3a 20  HTTP/1.1..Host: 
0080   31 39 32 2e 31 36 38 2e 30 2e 32 35 32 0d 0a 43  192.168.0.252..C
0090   6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 61 70 70  ontent-Type: app
00a0   6c 69 63 61 74 69 6f 6e 2f 6a 73 6f 6e 0d 0a 4f  lication/json..O
00b0   72 69 67 69 6e 3a 20 68 74 74 70 3a 2f 2f 31 39  rigin: http://19
00c0   32 2e 31 36 38 2e 30 2e 32 35 32 0d 0a 43 6f 6e  2.168.0.252..Con
00d0   74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 31 32 33  tent-Length: 123
00e0   0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b 65  ..Connection: ke
00f0   65 70 2d 61 6c 69 76 65 0d 0a 41 63 63 65 70 74  ep-alive..Accept
0100   3a 20 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a 73  : application/js
0110   6f 6e 2c 20 74 65 78 74 2f 70 6c 61 69 6e 2c 20  on, text/plain, 
0120   2a 2f 2a 0d 0a 55 73 65 72 2d 41 67 65 6e 74 3a  */*..User-Agent:
0130   20 4d 6f 7a 69 6c 6c 61 2f 35 2e 30 20 28 4d 61   Mozilla/5.0 (Ma
0140   63 69 6e 74 6f 73 68 3b 20 49 6e 74 65 6c 20 4d  cintosh; Intel M
0150   61 63 20 4f 53 20 58 20 31 30 5f 31 30 5f 34 29  ac OS X 10_10_4)
0160   20 41 70 70 6c 65 57 65 62 4b 69 74 2f 36 30 30   AppleWebKit/600
0170   2e 37 2e 31 32 20 28 4b 48 54 4d 4c 2c 20 6c 69  .7.12 (KHTML, li
0180   6b 65 20 47 65 63 6b 6f 29 20 56 65 72 73 69 6f  ke Gecko) Versio
0190   6e 2f 38 2e 30 2e 37 20 53 61 66 61 72 69 2f 36  n/8.0.7 Safari/6
01a0   30 30 2e 37 2e 31 32 0d 0a 52 65 66 65 72 65 72  00.7.12..Referer
01b0   3a 20 68 74 74 70 3a 2f 2f 31 39 32 2e 31 36 38  : http://192.168
01c0   2e 30 2e 32 35 32 2f 70 69 7a 7a 61 2f 70 69 72  .0.252/pizza/pir
01d0   2f 70 69 72 2e 68 74 6d 6c 0d 0a 41 63 63 65 70  /pir.html..Accep
01e0   74 2d 4c 61 6e 67 75 61 67 65 3a 20 65 6e 2d 75  t-Language: en-u
01f0   73 0d 0a 41 63 63 65 70 74 2d 45 6e 63 6f 64 69  s..Accept-Encodi
0200   6e 67 3a 20 67 7a 69 70 2c 20 64 65 66 6c 61 74  ng: gzip, deflat
0210   65 0d 0a 0d 0a                                   e....

TCP 段 2

0000   78 e3 b5 c6 2f 84 a8 86 dd 8d f5 3a 08 00 45 00  x.../......:..E.
0010   00 af f1 6e 40 00 40 06 c5 d0 c0 a8 00 bd c0 a8  ...n@.@.........
0020   00 fc eb be 00 50 af 66 94 65 1e 67 2e a1 80 18  .....P.f.e.g....
0030   10 00 fc d6 00 00 01 01 08 0a 33 9f f9 46 91 af  ..........3..F..
0040   79 f0 7b 22 6f 69 64 22 3a 34 34 33 35 32 33 30  y.{"oid":4435230
0050   37 2c 22 70 72 6f 70 65 72 74 69 65 73 22 3a 7b  7,"properties":{
0060   22 72 65 74 75 72 6e 54 69 6d 65 22 3a 22 32 30  "returnTime":"20
0070   31 35 2d 31 31 2d 31 31 54 31 32 3a 30 31 3a 30  15-11-11T12:01:0
0080   30 2d 30 36 3a 30 30 22 7d 2c 22 73 65 73 73 69  0-06:00"},"sessi
0090   6f 6e 69 64 22 3a 22 33 44 44 32 45 43 30 42 2d  onid":"3DD2EC0B-
00a0   42 32 46 36 2d 34 37 46 33 2d 38 38 44 42 2d 30  B2F6-47F3-88DB-0
00b0   31 41 35 37 42 34 38 45 30 45 39 22 7d           1A57B48E0E9"}

重组 HTTP 请求

0000   50 4f 53 54 20 2f 70 69 7a 7a 61 2f 72 65 73 74  POST /pizza/rest
0010   2f 61 6c 6c 6f 63 61 74 69 6f 6e 2f 75 70 64 61  /allocation/upda
0020   74 65 3f 63 6f 75 6e 74 65 72 3d 34 30 20 48 54  te?counter=40 HT
0030   54 50 2f 31 2e 31 0d 0a 48 6f 73 74 3a 20 31 39  TP/1.1..Host: 19
0040   32 2e 31 36 38 2e 30 2e 32 35 32 0d 0a 43 6f 6e  2.168.0.252..Con
0050   74 65 6e 74 2d 54 79 70 65 3a 20 61 70 70 6c 69  tent-Type: appli
0060   63 61 74 69 6f 6e 2f 6a 73 6f 6e 0d 0a 4f 72 69  cation/json..Ori
0070   67 69 6e 3a 20 68 74 74 70 3a 2f 2f 31 39 32 2e  gin: http://192.
0080   31 36 38 2e 30 2e 32 35 32 0d 0a 43 6f 6e 74 65  168.0.252..Conte
0090   6e 74 2d 4c 65 6e 67 74 68 3a 20 31 32 33 0d 0a  nt-Length: 123..
00a0   43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b 65 65 70  Connection: keep
00b0   2d 61 6c 69 76 65 0d 0a 41 63 63 65 70 74 3a 20  -alive..Accept: 
00c0   61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a 73 6f 6e  application/json
00d0   2c 20 74 65 78 74 2f 70 6c 61 69 6e 2c 20 2a 2f  , text/plain, */
00e0   2a 0d 0a 55 73 65 72 2d 41 67 65 6e 74 3a 20 4d  *..User-Agent: M
00f0   6f 7a 69 6c 6c 61 2f 35 2e 30 20 28 4d 61 63 69  ozilla/5.0 (Maci
0100   6e 74 6f 73 68 3b 20 49 6e 74 65 6c 20 4d 61 63  ntosh; Intel Mac
0110   20 4f 53 20 58 20 31 30 5f 31 30 5f 34 29 20 41   OS X 10_10_4) A
0120   70 70 6c 65 57 65 62 4b 69 74 2f 36 30 30 2e 37  ppleWebKit/600.7
0130   2e 31 32 20 28 4b 48 54 4d 4c 2c 20 6c 69 6b 65  .12 (KHTML, like
0140   20 47 65 63 6b 6f 29 20 56 65 72 73 69 6f 6e 2f   Gecko) Version/
0150   38 2e 30 2e 37 20 53 61 66 61 72 69 2f 36 30 30  8.0.7 Safari/600
0160   2e 37 2e 31 32 0d 0a 52 65 66 65 72 65 72 3a 20  .7.12..Referer: 
0170   68 74 74 70 3a 2f 2f 31 39 32 2e 31 36 38 2e 30  http://192.168.0
0180   2e 32 35 32 2f 70 69 7a 7a 61 2f 70 69 72 2f 70  .252/pizza/pir/p
0190   69 72 2e 68 74 6d 6c 0d 0a 41 63 63 65 70 74 2d  ir.html..Accept-
01a0   4c 61 6e 67 75 61 67 65 3a 20 65 6e 2d 75 73 0d  Language: en-us.
01b0   0a 41 63 63 65 70 74 2d 45 6e 63 6f 64 69 6e 67  .Accept-Encoding
01c0   3a 20 67 7a 69 70 2c 20 64 65 66 6c 61 74 65 0d  : gzip, deflate.
01d0   0a 0d 0a 7b 22 6f 69 64 22 3a 34 34 33 35 32 33  ...{"oid":443523
01e0   30 37 2c 22 70 72 6f 70 65 72 74 69 65 73 22 3a  07,"properties":
01f0   7b 22 72 65 74 75 72 6e 54 69 6d 65 22 3a 22 32  {"returnTime":"2
0200   30 31 35 2d 31 31 2d 31 31 54 31 32 3a 30 31 3a  015-11-11T12:01:
0210   30 30 2d 30 36 3a 30 30 22 7d 2c 22 73 65 73 73  00-06:00"},"sess
0220   69 6f 6e 69 64 22 3a 22 33 44 44 32 45 43 30 42  ionid":"3DD2EC0B
0230   2d 42 32 46 36 2d 34 37 46 33 2d 38 38 44 42 2d  -B2F6-47F3-88DB-
0240   30 31 41 35 37 42 34 38 45 30 45 39 22 7d        01A57B48E0E9"}

Apache 日志条目

192.168.0.189 - - [10/Nov/2015:12:00:00 -0600] "GET /pizza/rest/allocation/update?counter=40 HTTP/1.1" 500 4346 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12"

相关内容