1
0
mirror of https://github.com/SpaceHead1C/1c_http.git synced 2026-03-13 03:36:10 +02:00
Files
1c_http/doc/dfa.md

39 lines
2.0 KiB
Markdown

# Конечный детерминированный автомат разбора Set-Cookie
## Проблема
В связи с выбором 1С в качестве строки-разделителя символ `,` при соединении заголовков HTTP-ответа с одинаковым именем возникает неопределённость при разборе значения заголовка Set-Cookie.
## Решение
В качестве решения выбрал и построил ДКА.
![Граф детерминированного конечного автомата](/doc/dfa.png "Граф детерминированного конечного автомата")
Граф нарисован с помощью сервиса [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 без значения и атрибутов