public Set<HeaderName> keySet() {
        Set<HeaderName> headerNames = new LinkedHashSet<>(size());
        for (int i = 0; i < size(); i++) {
            HeaderName headerName = new HeaderName(originalName(i), name(i));
            // We actually do need to check contains before adding to the set because the original name may change.
            // In this case, the first name wins.
            if (!headerNames.contains(headerName)) {
                headerNames.add(headerName);
            }
        }
        return Collections.unmodifiableSet(headerNames);
    }
Returns a set of header names found in this headers object.  If there are duplicate header names, the first
one present takes precedence.
zuul-core/src/main/java/com/netflix/zuul/message/Headers.java