Заголовки запроса REST шифруются SSL?

У вас здесь пара вариантов. Список немного отличается от массива, когда дело доходит до перетасовки.

Как вы можете видеть ниже, массив быстрее, чем список, а примитивный массив быстрее, чем массив объектов.

Длительность выборки

List<Integer> Shuffle: 43133ns
    Integer[] Shuffle: 31884ns
        int[] Shuffle: 25377ns

Ниже приведены три различные реализации тасования. Вы должны использовать только Collections.shuffle, если вы имеете дело с коллекцией. Нет необходимости обертывать массив в коллекцию, чтобы отсортировать его.

ShuffleUtil Class

import java.lang.reflect.Array;
import java.util.*;

public class ShuffleUtil<T> {
    private static final int[] EMPTY_INT_ARRAY = new int[0];
    private static final int SHUFFLE_THRESHOLD = 5;

    private static Random rand;

Основной метод

    public static void main(String[] args) {
        List<Integer> list = null;
        Integer[] arr = null;
        int[] iarr = null;

        long start = 0;
        int cycles = 1000;
        int n = 1000;

        // Shuffle List<Integer>
        start = System.nanoTime();
        list = range(n);
        for (int i = 0; i < cycles; i++) {
            ShuffleUtil.shuffle(list);
        }
        System.out.printf("%22s: %dns%n", "List<Integer> Shuffle", (System.nanoTime() - start) / cycles);

        // Shuffle Integer[]
        start = System.nanoTime();
        arr = toArray(list);
        for (int i = 0; i < cycles; i++) {
            ShuffleUtil.shuffle(arr);
        }
        System.out.printf("%22s: %dns%n", "Integer[] Shuffle", (System.nanoTime() - start) / cycles);

        // Shuffle int[]
        start = System.nanoTime();
        iarr = toPrimitive(arr);
        for (int i = 0; i < cycles; i++) {
            ShuffleUtil.shuffle(iarr);
        }
        System.out.printf("%22s: %dns%n", "int[] Shuffle", (System.nanoTime() - start) / cycles);
    }

Перетасовка общего списка

    // ================================================================
    // Shuffle List<T> (java.lang.Collections)
    // ================================================================
    @SuppressWarnings("unchecked")
    public static <T> void shuffle(List<T> list) {
        if (rand == null) {
            rand = new Random();
        }
        int size = list.size();
        if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
            for (int i = size; i > 1; i--) {
                swap(list, i - 1, rand.nextInt(i));
            }
        } else {
            Object arr[] = list.toArray();

            for (int i = size; i > 1; i--) {
                swap(arr, i - 1, rand.nextInt(i));
            }

            ListIterator<T> it = list.listIterator();
            int i = 0;

            while (it.hasNext()) {
                it.next();
                it.set((T) arr[i++]);
            }
        }
    }

    public static <T> void swap(List<T> list, int i, int j) {
        final List<T> l = list;
        l.set(i, l.set(j, l.get(i)));
    }

    public static <T> List<T> shuffled(List<T> list) {
        List<T> copy = copyList(list);
        shuffle(copy);
        return copy;
    }

Перетасовка общего массива

    // ================================================================
    // Shuffle T[]
    // ================================================================
    public static <T> void shuffle(T[] arr) {
        if (rand == null) {
            rand = new Random();
        }

        for (int i = arr.length - 1; i > 0; i--) {
            swap(arr, i, rand.nextInt(i + 1));
        }
    }

    public static <T> void swap(T[] arr, int i, int j) {
        T tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

    public static <T> T[] shuffled(T[] arr) {
        T[] copy = Arrays.copyOf(arr, arr.length);
        shuffle(copy);
        return copy;
    }

Перемешивание примитивного массива

    // ================================================================
    // Shuffle int[]
    // ================================================================
    public static <T> void shuffle(int[] arr) {
        if (rand == null) {
            rand = new Random();
        }

        for (int i = arr.length - 1; i > 0; i--) {
            swap(arr, i, rand.nextInt(i + 1));
        }
    }

    public static <T> void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

    public static int[] shuffled(int[] arr) {
        int[] copy = Arrays.copyOf(arr, arr.length);
        shuffle(copy);
        return copy;
    }

Утилиты

Простые методы утилиты для копирования и преобразования массивов в списки и наоборот.

    // ================================================================
    // Utility methods
    // ================================================================
    protected static <T> List<T> copyList(List<T> list) {
        List<T> copy = new ArrayList<T>(list.size());
        for (T item : list) {
            copy.add(item);
        }
        return copy;
    }

    protected static int[] toPrimitive(Integer[] array) {
        if (array == null) {
            return null;
        } else if (array.length == 0) {
            return EMPTY_INT_ARRAY;
        }
        final int[] result = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            result[i] = array[i].intValue();
        }
        return result;
    }

    protected static Integer[] toArray(List<Integer> list) {
        return toArray(list, Integer.class);
    }

    protected static <T> T[] toArray(List<T> list, Class<T> clazz) {
        @SuppressWarnings("unchecked")
        final T[] arr = list.toArray((T[]) Array.newInstance(clazz, list.size()));
        return arr;
    }

Range Class

Генерирует диапазон значений, аналогичный функции range Python.

    // ================================================================
    // Range class for generating a range of values.
    // ================================================================
    protected static List<Integer> range(int n) {
        return toList(new Range(n), new ArrayList<Integer>());
    }

    protected static <T> List<T> toList(Iterable<T> iterable) {
        return toList(iterable, new ArrayList<T>());
    }

    protected static <T> List<T> toList(Iterable<T> iterable, List<T> destination) {
        addAll(destination, iterable.iterator());

        return destination;
    }

    protected static <T> void addAll(Collection<T> collection, Iterator<T> iterator) {
        while (iterator.hasNext()) {
            collection.add(iterator.next());
        }
    }

    private static class Range implements Iterable<Integer> {
        private int start;
        private int stop;
        private int step;

        private Range(int n) {
            this(0, n, 1);
        }

        private Range(int start, int stop) {
            this(start, stop, 1);
        }

        private Range(int start, int stop, int step) {
            this.start = start;
            this.stop = stop;
            this.step = step;
        }

        @Override
        public Iterator<Integer> iterator() {
            final int min = start;
            final int max = stop / step;

            return new Iterator<Integer>() {
                private int current = min;

                @Override
                public boolean hasNext() {
                    return current < max;
                }

                @Override
                public Integer next() {
                    if (hasNext()) {
                        return current++ * step;
                    } else {
                        throw new NoSuchElementException("Range reached the end");
                    }
                }

                @Override
                public void remove() {
                    throw new UnsupportedOperationException("Can't remove values from a Range");
                }
            };
        }
    }
}
41
задан Jason Etheridge 21 September 2008 в 17:11
поделиться

7 ответов

SSL шифрует весь канал связи от клиента к серверу и назад, таким образом, да - заголовки будут зашифрованы.

Между прочим, при разработке сетевых приложений и заботы о безопасности данных, наименьшее необходимо сделать, читается книга как Практическая Криптография, Niels Ferguson и Bruce Schneier, и вероятно дополнительные материалы для чтения, это более фокусируется на безопасности веб-приложения, были бы хорошей идеей. Если я могу сделать наблюдение - и, я не подразумеваю, что как персональная критика - Ваш вопрос указывает на фундаментальное отсутствие понимания очень простых технологий безопасности в Интернете, и это никогда не хороший знак.

кроме того, это никогда не плохая идея подтвердить, что данные, которые, как предполагается, шифруются, действительно шифруются. Можно использовать анализатор сетей, чтобы контролировать трафик в проводе и не упустить что-либо чувствительное, представляемое ясное. Я использовал Wireshark, чтобы сделать это прежде - результаты могут быть удивительными, иногда.

57
ответ дан Ori Pessach 4 August 2019 в 21:33
поделиться

SSL.. или скорее HTTPS (HTTP по SSL) отправляет все содержание HTTP по SSL, и как содержание HTTP, и заголовки являются на самом деле тем же самым, это означает, что заголовки шифруются также. Наблюдение, как ДОБИРАЮТСЯ и данные POST, отправляется через HTTP-заголовки, тогда это только имеет смысл тогда при отправке данных надежно, Вы только хотели бы, чтобы код ответа или содержание были зашифрованы.

0
ответ дан 4 August 2019 в 21:33
поделиться

Другие ответы корректны, что заголовки действительно шифруются, наряду с телом, при использовании SSL. Но имейте в виду, что URL, который может включать параметры запроса, никогда зашифрован. Так старайтесь никогда не поместить уязвимую информацию в параметры запроса URL.

Обновление: как @blowdart указанный ниже, это неправильно. См. комментарий ниже.

0
ответ дан Avi Flax 4 August 2019 в 21:33
поделиться

Шифруются оба заголовка и содержание.

5
ответ дан cjm 4 August 2019 в 21:33
поделиться

Вы, кажется, думаете, что REST является отличным протоколом.

REST не является протоколом. Это - стиль дизайна для основанных на HTTP приложений.

Так, Ваш запись приложения HTTP. Заголовки шифруются? Да, если Вы используете HTTPS (HTTP по SSL) протокол вместо плоскости HTTP.

сертификаты Наличия с обеих сторон не непосредственно относится к Вашему вопросу. Сертификаты SSL используются для аутентификации. Они помогают в обнаружении атак "человек посередине" тех, которые являются возможным отравлением кэшем DNS использования.

3
ответ дан ddaa 4 August 2019 в 21:33
поделиться

Пока Вы связываетесь в туннеле SSL, все отправило между сервером, и клиент будет зашифрован. Шифрование сделано, прежде чем любые данные отправлены или получены.

6
ответ дан zigdon 4 August 2019 в 21:33
поделиться

Наличие сертификата недостаточно, необходимо настроить веб-сервер, чтобы зашифровать соединения (то есть, использовать сертификат) для того доменного или виртуального хоста. Кроме того, я думаю, что Вам просто был бы нужен единственный сертификат, ответы на запросы будут все еще зашифрованы.

И да, HTTP-заголовки шифруются, а также данные.

2
ответ дан Vinko Vrsalovic 4 August 2019 в 21:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: