mirror of
https://github.com/SpaceHead1C/1c_http.git
synced 2026-03-13 03:36:10 +02:00
39 lines
2.0 KiB
Markdown
39 lines
2.0 KiB
Markdown
# Конечный детерминированный автомат разбора Set-Cookie
|
|
|
|
## Проблема
|
|
|
|
В связи с выбором 1С в качестве строки-разделителя символ `,` при соединении заголовков HTTP-ответа с одинаковым именем возникает неопределённость при разборе значения заголовка Set-Cookie.
|
|
|
|
## Решение
|
|
|
|
В качестве решения выбрал и построил ДКА.
|
|
|
|

|
|
|
|
Граф нарисован с помощью сервиса [diagrams.net](https://app.diagrams.net/). Текущая версия экспортирована в `/doc/dfa.xml`.
|
|
|
|
### Состояния
|
|
|
|
- `A` – имя Cookie
|
|
- `B` – значение Cookie
|
|
- `C` – имя атрибута
|
|
- `D` – значение атрибута
|
|
- `AB` – это либо имя очередного Cookie, либо значение текущего Cookie
|
|
- `AD` – это либо имя очередного Cookie, либо значение атрибута текущего Cookie
|
|
|
|
Каждое состояние может быть финальным.
|
|
|
|
### Переходы
|
|
|
|
- `1` – встретился токен `=`
|
|
- `2` – встретился токен `;`
|
|
- `3` – встретился токен `,`
|
|
- `4` – EOS (больше нечего читать)
|
|
|
|
## Проблема не решена полностью
|
|
|
|
Автомат не "поймёт" 2 случая:
|
|
|
|
1. Значение Cookie содержит символ `,`, и затем следует Cookie без значения и атрибутов
|
|
2. Значение последнего атрибута Cookie содержит символ `,`, и затем следует Cookie без значения и атрибутов
|