Poprawne definiowanie nazw własnych nagłówków
21 Jan 2018
W tym krótkim wpisie chciałbym omówić prawidłowy sposób definiowania nazw nowych nagłówków oraz wyjaśnić, dlaczego nie powinno się stosować nazewnictwa z prefiksem X
.
Początki konwencji X-
można znaleźć w sugestii Briana Harveya z 1975 r. w odniesieniu do parametrów protokołu FTP opisanych w RFC691 [IETF]. Konwencja ta jest kontynuowana z różnymi specyfikacjami w tym dla nagłówków protokołu HTTP.
Używanie niestandardowych nagłówków z prefiksem X
nie jest zabronione, ale odradzane. Innymi słowy, możesz nadal używać nagłówków rozpoczynających się tym prefiksem, jednak nie jest to zalecane i nie możesz ich traktować tak, jakby były ogólnym standardem.
X
przed nazwą nagłówka zwyczajowo oznaczało, że jest on eksperymentalny (niestandardowy) dla danego dostawcy lub produktu. Gdy nagłówek taki stanie się standardową częścią protokołu HTTP, powinien utracić prefiks zawarty w swojej nazwie.
Oczywiście nie zawsze tak się dzieje i w wielu przypadkach stosowane nagłówki posiadają w swojej nazwie ten prefiks, np. X-Forwarded-For lub X-Requested-With (jednak są one nadal traktowane jako niestandardowe).
Jeśli możliwe jest ujednolicenie nowego niestandardowego nagłówka, użyj nieużywanej i znaczącej nazwy nagłówka.
Dokładne wyjaśnienie znajduje się w RFC 6648 - Deprecating the “X-“ Prefix and Similar Constructs in Application Protocols [IETF]:
[...] application protocols have often distinguished between standardized and unstandardized parameters by prefixing the names of unstandardized parameters with the string "X-" or similar constructs (e.g., "x."), where the "X" is commonly understood to stand for "eXperimental" or "eXtension".
A także:
3. Recommendations for Creators of New Parameters:
SHOULD NOT prefix their parameter names with "X-" or similar constructs.
4. Recommendations for Protocol Designers:
SHOULD NOT prohibit parameters with an "X-" prefix or similar constructs from being registered. [...] MUST NOT stipulate that a parameter with an "X-" prefix or similar constructs needs to be understood as unstandardized. [...] MUST NOT stipulate that a parameter without an "X-" prefix or similar constructs needs to be understood as standardized.
Jednak czy takie zalecenia nie wprowadzają lekkiego zamieszania? Moim zdaniem nie ma tragedii w stosowaniu obu sposobów nazewnictwa. Co więcej, niekiedy nagłówki z prefiksem X
są łatwiejsze do interpretacji a ewentualne usunięcie początkowego X
z nazwy może mieć negatywny wpływ na aplikację. Więc by zachować zgodność wstecz, w takim wypadku, należy je zachować.
Jednym z zaleceń stosowania niestandardowych nagłówków jest dodanie, zamiast omawianego prefiksu, początkowej nazwy organizacji.
Przykład implementacji własnego nagłówka z poziomu serwera NGINX:
- konfiguracja niezalecana:
add_header X-Backend-Server $hostname;
- konfiguracja zalecana:
add_header Backend-Server $hostname;