Введение в HTTP в Python3

В этой статье мы погрузимся в мир веб-протоколов, в частности HTTP, а также рассмотрим связь HTTP с TCP и UDP. Попутно, в качестве примеров, мы приведем примеры реализации на Python клиентов и серверов, использующих эти протоколы.

HTTP (Hypertext Transfer Protocol) является основой мира Интернета. Когда вы посещаете какой-нибудь сайт, ваш браузер посылает HTTP-запросы на сервер, который в ответ выдает веб-страницы. Это похоже на разговор между браузером и сервером. Например, если послать запрос с текстом “Joe”, то сервер может ответить “Hi there, Joe”.

Ниже приведен базовый пример работы такого HTTP-сервера в Python3. Мы будем использовать встроенные модули http.client и http.server. Это простой пример, поэтому он не строго соответствует стандартам HTTP и не рекомендуется для использования в производстве, поскольку реализует только базовые проверки безопасности. Но для наших целей это подойдет.

import http.server
import http.client

PORT = 8001

class Store:
    def __init__(self):
        self.requestBody = ''
        self.responseBody = ''

store = Store()

class MyHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        content = self.rfile.read(content_length).decode('utf-8')
        store.requestBody = content

        response_content = f'Hi there, {content}'.encode('utf-8')
        self.send_response(200)
        self.send_header('Content-Type', 'text/plain')
        self.send_header('Content-Length', len(response_content))
        self.end_headers()
        self.wfile.write(response_content)

def server_listen():
    with http.server.HTTPServer(('localhost', PORT), MyHTTPRequestHandler) as server:
        print(f'HTTP server listening on {PORT}')
        http_request()

def http_request():
    conn = http.client.HTTPConnection('localhost', PORT)
    content = 'Joe'
    headers = {
        'Content-Type': 'text/plain',
        'Content-Length': str(len(content))
    }
    conn.request('POST', '/greet', body=content, headers=headers)
    response = conn.getresponse()
    data = response.read().decode('utf-8')
    store.responseBody = data
    close_connections()

def close_connections():
    server.server_close()

    print(store.requestBody)  # Joe
    print(store.responseBody)  # Hi there, Joe

server_listen()

TCP-соединение

Теперь познакомимся с TCP  (Transmission Control Protocol). TCP является базовым протоколом, на котором построен HTTP, как видно из официальных спецификаций последнего. И хотя я уже об этом сказал, я попрошу вас сделать вид, что вы этого еще не знаете. Давайте докажем, что HTTP базируется на TCP!

В Python имеются встроенные модули threading и socket, которые помогают нам создавать TCP-клиенты и серверы.

Следует знать, что TCP отличается от HTTP по нескольким параметрам:

  • Запросы не могут отправляться спонтанно. Сначала должно быть установлено соединение.
  • После установки соединения сообщения могут передаваться в обоих направлениях.
  • Установленное соединение должно быть закрыто вручную.

Ниже приведена простая реализация TCP-клиента, который желает получить приветствие от сервера:

import socket
import threading

PORT = 8001
MAXIMUM_BYTES_RECEIVABLE = 1024

class Store:
    def __init__(self):
        self.requestBody = ''
        self.responseBody = ''

store = Store()

def handle_client(client_socket):
    request_data = client_socket.recv(MAXIMUM_BYTES_RECEIVABLE).decode('utf-8')
    store.requestBody = request_data

    response_data = f'Hi there, {request_data}'.encode('utf-8')
    client_socket.send(response_data)

    response = client_socket.recv(MAXIMUM_BYTES_RECEIVABLE).decode('utf-8')
    store.responseBody = response

    client_socket.close()

def server_listen():
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # When the socket type is socket.SOCK_STREAM the protocol being used is TCP by default.
    server.bind(('0.0.0.0', PORT))
    server.listen(5)
    print(f'TCP server listening on {PORT}')

    while True:
        client_socket, addr = server.accept() # Blocks execution and waits for an incoming connection.
        client_handler = threading.Thread(target=handle_client, args=(client_socket,))
        client_handler.start()

def http_request():
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('localhost', PORT))
    content = 'Joe'
    client.send(content.encode('utf-8'))
    client.shutdown(socket.SHUT_WR)
    response = client.recv(MAXIMUM_BYTES_RECEIVABLE).decode('utf-8')
    store.responseBody = response
    client.close()
    close_connections()

def close_connections():
    server.close()

    print(store.requestBody)  # Joe
    print(store.responseBody)  # Hi there, Joe

if __name__ == '__main__':
    server_listen()
    http_request()

Теперь представьте, что у вас есть TCP-прокси, который может передавать сообщения между HTTP-клиентами и серверами. Даже если этот прокси не понимает HTTP, он все равно может передавать запросы и ответы.

Вот как будет выглядеть его реализация:

import socket
import http.client
import threading

HTTP_PORT = 8001
PROXY_TCP_PORT = 8002
MAXIMUM_BYTES_RECEIVABLE = 1024

class Store:
    def __init__(self):
        self.requestBody = ''
        self.responseBody = ''

store = Store()

def proxy_handler(local_socket):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as remote_socket:
        remote_socket.connect(('localhost', HTTP_PORT))
        
        def forward(src, dst):
            while True:
                data = src.recv(MAXIMUM_BYTES_RECEIVABLE)
                if not data:
                    break
                dst.send(data)
        
        threading.Thread(target=forward, args=(local_socket, remote_socket)).start()
        threading.Thread(target=forward, args=(remote_socket, local_socket)).start()

def http_server_handler(client_socket):
    data = client_socket.recv(MAXIMUM_BYTES_RECEIVABLE).decode('utf-8')
    store.requestBody = data

    response_data = f'Hi there, {data}'.encode('utf-8')
    client_socket.send(response_data)

    response = client_socket.recv(MAXIMUM_BYTES_RECEIVABLE).decode('utf-8')
    store.responseBody = response

def http_server_listen():
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server:
        server.bind(('0.0.0.0', HTTP_PORT)
        server.listen(5)
        print(f'HTTP server listening on {HTTP_PORT}')

        while True:
            client_socket, addr = server.accept()
            threading.Thread(target=http_server_handler, args=(client_socket,)).start()

def proxy_listen():
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as proxy_server:
        proxy_server.bind(('0.0.0.0', PROXY_TCP_PORT))
        proxy_server.listen(5)
        print(f'TCP proxy listening on {PROXY_TCP_PORT}')

        while True:
            local_socket, addr = proxy_server.accept()
            threading.Thread(target=proxy_handler, args=(local_socket,)).start()

def http_request():
    conn = http.client.HTTPConnection('localhost', PROXY_TCP_PORT)
    content = 'Joe'
    headers = {
        'Content-Type': 'text/plain',
        'Content-Length': str(len(content))
    }
    conn.request('POST', '/greet', body=content, headers=headers)
    response = conn.getresponse()
    data = response.read().decode('utf-8')
    close_connections()

def close_connections():
    http_server_listen_thread.join()
    proxy_listen_thread.join()

    print(store.requestBody)  # Joe
    print(store.responseBody)  # Hi there, Joe

if __name__ == '__main__':
    http_server_listen_thread = threading.Thread(target=http_server_listen)
    proxy_listen_thread = threading.Thread(target=proxy_listen)
    http_server_listen_thread.start()
    http_server_listen_thread.join()
    proxy_listen_thread.start()
    http_request()

Как уже говорилось, хотя TCP-прокси-сервер не знает, что такое HTTP, запросы и ответы полностью проходят через него.

Понимание особенностей TCP

Прежде чем мы продолжим, несколько фактов о TCP:

  • Он надежен, т.е. обеспечивает подтверждение сообщений, их повторную передачу и тайминг при необходимости.
  • Он гарантирует, что данные поступают в правильном порядке.

Неудивительно, что TCP так распространен, но… Вы же знали, что будет какое-то “но”, верно?

TCP может быть несколько тяжеловат. Чтобы сокетное соединение могло разрешить отправку данных, требуется установить три пакета. В мире HTTP это означает, что для выполнения параллельных запросов HTTP/1.1 требуется несколько TCP-соединений, что может потребовать значительных ресурсов.

HTTP/2 пытается улучшить эту ситуацию, обрабатывая параллельные запросы через одно соединение. Однако при этом возникают проблемы. Когда один пакет задерживается или приходит не по порядку, это приводит к остановке всех запросов.

А теперь представьте, что есть альтернатива TCP, позволяющая параллельные HTTP-сообщения без этих последствий. Звучит неплохо, не так ли? Эта альтернатива – UDP (User Datagram Protocol).

UDP-соединение

Начнем с того, чем UDP отличается от TCP:

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

Давайте рассмотрим пример UDP-клиента, который хочет взаимодействовать с сервером. На этот раз мы определим наш сокет как SOCK_DGRAM:

import socket

PORT = 8001
EOS = b'{$content}'  # End of stream
MAXIMUM_BYTES_RECEIVABLE = 1024

class Store:
    def __init__(self):
        self.requestBody = ''
        self.responseBody = ''

store = Store()

def slice_but_last(data, encoding='utf-8'):
    return data[:-1].decode(encoding)

def server_listen():
    sender = None

    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as server:
        server.bind(('0.0.0.0', PORT))
        print(f'UDP server listening on {PORT}')

        while True:
            chunk, addr = server.recvfrom(MAXIMUM_BYTES_RECEIVABLE)
            sender = addr if sender is None else sender
            store.requestBody += slice_but_last(chunk)

            if chunk[-1:] == EOS:
                response_data = f'Hi there, {store.requestBody}'.encode('utf-8') + EOS
                server.sendto(response_data, sender)

                # Note: You can choose to close the server here if needed
                break

def http_request():
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as client:
        content = 'Joe'.encode('utf-8') + EOS
        client.sendto(content, ('localhost', PORT))
        response_data, _ = client.recvfrom(MAXIMUM_BYTES_RECEIVABLE)
        store.responseBody = slice_but_last(response_data)

        close_connections()

def close_connections():
    print(store.requestBody)  # Joe
    print(store.responseBody)  # Hi there, Joe

if __name__ == '__main__':
    server_listen()
    http_request()

Итак, учитывая, что у нас есть парсер HTTP (http-parser, например), вот как можно реализовать HTTP-решение через UDP:

import socket
from http_parser.parser import HttpParser

PORT = 8001
CRLF = 'rn'
MAXIMUM_BYTES_RECEIVABLE = 1024

class Store:
    def __init__(self):
        self.requestBody = ''
        self.responseBody = ''

store = Store()

def server_listen():
    parser = HttpParser()

    def on_body(data):
        store.requestBody += data

    def on_message_complete():
        content = f'Hi there, {store.requestBody}'
        response = f'HTTP/1.1 200 OK{CRLF}' 
                   f'Content-Type: text/plain{CRLF}' 
                   f'Content-Length: {len(content)}{CRLF}' 
                   f'{CRLF}' 
                   f'{content}'
        server.sendto(response.encode('utf-8'), sender)

    parser.on_body = on_body
    parser.on_message_complete = on_message_complete

    sender = None

    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as server:
        server.bind(('0.0.0.0', PORT))
        print(f'UDP server listening on {PORT}')

        while True:
            chunk, sender = server.recvfrom(MAXIMUM_BYTES_RECEIVABLE)
            parser.execute(chunk)

def http_request():
    parser = HttpParser()

    def on_body(data):
        store.responseBody += data

    def on_message_complete():
        close_connections()

    parser.on_body = on_body
    parser.on_message_complete = on_message_complete

    content = 'Joe'
    request = f'POST /greet HTTP/1.1{CRLF}' 
              f'Content-Type: text/plain{CRLF}' 
              f'Content-Length: {len(content)}{CRLF}' 
              f'{CRLF}' 
              f'{content}'

    client.sendto(request.encode('utf-8'), ('localhost', PORT))

def close_connections():
    server.close()
    client.close()

    print(store.requestBody)  # Joe
    print(store.responseBody)  # Hi there, Joe

if __name__ == '__main__':
    client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_listen()
    http_request()

Выглядит неплохо. У нас есть полноценная реализация с использованием UDP. Но пока не стоит слишком радоваться. UDP имеет ряд существенных недостатков:

  • Ненадежность. Вы не можете быть уверены, что ваше сообщение дойдет до адресата.
  • Пакеты приходят не по порядку, поэтому нельзя гарантировать порядок следования сообщений.

Возникновение QUIC и HTTP/3

Для устранения недостатков UDP был создан новый протокол – QUIC . Он построен на основе UDP и использует “умные” алгоритмы для его реализации. Отличительные особенности QUIC:

  • Надежность
  • Обеспечение упорядоченной доставки пакетов
  • Легкость

Это приводит нас прямо к HTTP/3, который все еще является относительно новым и экспериментальным. В нем используется QUIC для устранения проблем, возникших в HTTP/2. В HTTP/3 нет соединений, поэтому сессии не влияют друг на друга.

Таблица HTTP-семантики. Три столбца с версиями HTTP и соответствующими им протоколами.

HTTP/3 – перспективное направление развития веб-протоколов, использующее сильные стороны QUIC и UDP.

Хотя встроенная поддержка протокола QUIC отсутствует, можно воспользоваться модулем aioquic, который поддерживает реализацию как QUIC, так и HTTP/3.

Пример с использованием протокола QUIC

Рассмотрим простой пример сервера, использующего QUIC:

import asyncio
import ssl
from aioquic.asyncio import connect, connect_udp, Connection, serve
from aioquic.asyncio.protocol import BaseProtocol, DatagramProtocol
from aioquic.asyncio.protocol.stream import DataReceived

class HTTPServerProtocol(BaseProtocol):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    async def data_received(self, data):
        await super().data_received(data)
        if isinstance(self._quic, Connection):
            for stream_id, buffer in self._quic._events[DataReceived]:
                data = buffer.read()
                response = f'HTTP/1.1 200 OKrnContent-Length: {len(data)}rnrn{data.decode("utf-8")}'
                self._quic.send_stream_data(stream_id, response.encode('utf-8'))

async def main():
    loop = asyncio.get_event_loop()

    # Create QUIC server context
    quic_server = await loop.create_server(HTTPServerProtocol, 'localhost', 8001)

    async with quic_server:
        await quic_server.serve_forever()

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

А это – клиент:

import asyncio
import ssl
from aioquic.asyncio import connect, connect_udp, Connection
from aioquic.asyncio.protocol import BaseProtocol

class HTTPClientProtocol(BaseProtocol):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.connected_event = asyncio.Event()

    def quic_event_received(self, event):
        super().quic_event_received(event)
        if event.matches('connected'):
            self.connected_event.set()

    async def request(self, path, data=None):
        stream_id = self._quic.get_next_available_stream_id()
        self._quic.send_stream_data(stream_id, data)
        await self.connected_event.wait()
        response = await self._quic.receive_data(stream_id)
        return response

async def main():
    loop = asyncio.get_event_loop()

    # Create QUIC client context
    quic = connect('localhost', 8001)

    async with quic as protocol:
        client_protocol = HTTPClientProtocol(quic, protocol._session_id, None)
        await client_protocol.connected_event.wait()
        
        data = 'Hello, Joe!'
        response = await client_protocol.request('/greet', data.encode('utf-8'))
        print(response.decode('utf-8'))

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

Пример с использованием протокола HTTP/3

А чтобы вы получили полное представление, приведем пример с использованием протокола HTTP/3 (с помощью модуля aioquic).

Сервер:

import asyncio
from aioquic.asyncio.protocol import connect, connect_udp, serve, QuicProtocol
from aioquic.asyncio.protocol.stream import DataReceived
from h11 import Response, Connection
from h11._events import Data

class HTTP3ServerProtocol(QuicProtocol):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.conn = Connection()

    def quic_event_received(self, event):
        super().quic_event_received(event)
        if event.matches('handshake_completed'):
            self.conn.initiate_upgrade_for_http2()

    async def data_received(self, data):
        await super().data_received(data)
        if isinstance(self._quic, QuicProtocol):
            for stream_id, buffer in self._quic._events[DataReceived]:
                data = buffer.read()
                response = Response(status_code=200, headers=[('content-length', str(len(data)))], content=data)
                data = self.conn.send(response)
                self._quic.transmit_data(stream_id, data)

async def main():
    loop = asyncio.get_event_loop()

    # Create QUIC server context
    quic_server = await loop.create_server(HTTP3ServerProtocol, 'localhost', 8001)

    async with quic_server:
        await quic_server.serve_forever()

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

И клиент:

import asyncio
from aioquic.asyncio.protocol import connect, connect_udp, QuicProtocol
from h11 import Request, Response, Connection
from h11._events import Data

class HTTP3ClientProtocol(QuicProtocol):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.conn = Connection()

    async def request(self, path, data=None):
        stream_id = self._quic.get_next_available_stream_id()
        request = Request(method='POST', target=path, headers=[('content-length', str(len(data)))]
            if data else [])
        data = self.conn.send(request)
        self._quic.transmit_data(stream_id, data)

        while True:
            event = self.conn.next_event()
            if isinstance(event, Data):
                self._quic.transmit_data(stream_id, event.data)
            elif event == h11.EndOfMessage():
                break

        response = await self._quic.receive_data(stream_id)
        return response

async def main():
    loop = asyncio.get_event_loop()

    # Create QUIC client context
    quic = connect('localhost', 8001)

    async with quic as protocol:
        client_protocol = HTTP3ClientProtocol(quic, protocol._session_id, None)
        
        data = 'Hello, Joe!'
        response = await client_protocol.request('/greet', data.encode('utf-8'))
        print(response.content.decode('utf-8'))

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

Итоги

Такая эволюция ставит вопрос о том, сможем ли мы в будущем распрощаться с TCP, но это уже тема для другой статьи и, возможно, для будущего.

На этом мы завершаем наше путешествие по HTTP, TCP и UDP в Python3! Тема может показаться сложной, но под поверхностью каждого посещаемого вами сайта скрывается увлекательный мир веб-коммуникаций, с которым стоит познакомиться.

Перевод статьи «Introduction to HTTP in Python3».

Сообщение Введение в HTTP в Python3 появились сначала на pythonturbo.


Source: pythonturbo.ru

«Возникла проблема при возврате вашего компьютера в исходное состояние» в Windows 11

Сообщение об ошибке «Возникла проблема при возврате вашего компьютера в исходное состояние» в Windows 11 обычно появляется, когда пользователи пытаются выполнить сброс или обновление системы на своем компьютере. Эта функция предназначена для решения различных системных проблем путем переустановки Windows, сохраняя при этом ваши личные файлы. Однако если в процессе сброса возникает проблема, это может привести к отображению этого сообщения об ошибке. В этом руководстве мы познакомим вас с пошаговыми решениями, как исправить проблему «При перезагрузке вашего компьютера» в Windows 11 и вернуть вашу систему в нужное русло.

Этой проблеме могут способствовать несколько факторов, включая поврежденные системные файлы, проблемы с системными разделами или конфликты со сторонним программным обеспечением.

Чтобы устранить эту ошибку, пользователям часто необходимо выполнить следующие действия по устранению неполадок, такие как:

  1. Использование восстановления при загрузке Windows
  2. Перезапустите среду восстановления Windows (WinRE).
  3. Запустите ДИСМ
  4. Используйте восстановление системы
  5. Переустановите Windows 11

Способ 1. С помощью средства восстановления при загрузке Windows

1. Откройте приложение «Настройки» и перейдите в «Система».

2. Нажмите «Восстановление».

3. Теперь нажмите «Перезагрузить сейчас» в разделе «Расширенный запуск».

Разгон

4. Ваш компьютер перезагрузится. В открывшемся меню перейдите в «Устранение неполадок => Дополнительные параметры».

5. Нажмите на опцию «Восстановление при загрузке».

Способ 2. Перезапустите среду восстановления Windows (WinRE).

1. Откройте командную строку и запустите от имени администратора.

2. Скопируйте и вставьте приведенную ниже команду:

reagentc /disable

Нажмите Ввод.

Запустить WinRE

Приведенная выше команда остановит Windows RE.

3. Чтобы снова запустить WinRE, скопируйте и вставьте следующую команду:

reagentc /enable

Остановить WinRE

4. В конце перезагрузите ПК.

Способ 3. Исправление: «Возникла проблема при перезагрузке вашего компьютера» в Windows 11 с помощью команды DISM.

1. Откройте командную строку и запустите от имени администратора.

2. Скопируйте и вставьте приведенную ниже команду:

dism /online /cleanup-image /restorehealth

Нажмите Ввод.

Исправлено: «Возникла проблема при перезагрузке вашего компьютера» в Windows 11 — DISM.

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

Способ 4. Исправление: «Возникла проблема при перезагрузке компьютера» с помощью восстановления системы.

1. Откройте Панель управления и перейдите в «Восстановление».

2. Нажмите «Открыть восстановление системы».

Исправлено: «Возникла проблема при перезагрузке вашего компьютера» в Windows 11 — откройте восстановление системы.

3. Нажмите Далее.

Исправлено: «Возникла проблема при перезагрузке вашего компьютера» в Windows 11 — Open System Recovery 2.

3. После этого выберите недавнюю точку восстановления и нажмите «Далее».

Исправлено: «Возникла проблема при перезагрузке вашего компьютера» в Windows 11 — Open System Recovery 3.

4. Нажмите «Готово».

Исправлено: «Возникла проблема при перезагрузке вашего компьютера» в Windows 11 — Open System Recovery 4.

Способ 5: переустановить Windows 11

Если вы перепробовали все, но по-прежнему не можете исправить ошибку «При перезагрузке компьютера возникла проблема», возможно, вам стоит рассмотреть возможность чистой установки операционной системы Windows 10 или Windows 11 на ваш компьютер.

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

Вот и все!



2023-11-18T18:41:02
Вопросы читателей

Как включить историю файлов в Windows 11 и 10 (настроить резервное копирование)

Регулярное резервное копирование файлов и папок полезно на случай случайного удаления, сбоя оборудования или повреждения. Резервные копии гарантируют, что ваши важные файлы не будут потеряны безвозвратно. В Windows 11 и 10 «История файлов» — это встроенная функция резервного копирования и восстановления, которая позволяет создавать резервные копии ваших личных файлов/папок (данных) на внешнем диске или в сетевом расположении. Эта функция отслеживает изменения, вносимые в ваши файлы с течением времени, поэтому при необходимости вы можете вернуться к предыдущим версиям. Кроме того, история файлов может помочь вам восстановить файлы, если они были случайно удалены, повреждены или заражены вредоносным ПО. Вот как включить и настроить резервное копирование истории файлов в Windows 11, чтобы защитить ваши файлы от случайного удаления, изменения и повреждения.

Функция истории файлов в Windows 11

Функция «История файлов» в Windows 10 и 11 позволяет создавать резервные копии важных файлов и папок на внешнем устройстве хранения. Он отличается от образа системы или резервной копии Windows, поскольку копирует только определенные файлы и папки, а не дублирует весь диск C:. История файлов работает путем создания снимков файлов в папках, связанных с вашей учетной записью пользователя, таких как «Документы», «Музыка», «Изображения», «Видео», «Рабочий стол» и OneDrive. Вы также можете добавить или исключить другие папки по своему желанию.

  • История файлов работает в фоновом режиме и автоматически создает резервные копии ваших файлов через регулярные промежутки времени, гарантируя, что у вас есть актуальные копии важных данных.
  • Он поддерживает несколько версий ваших файлов, позволяя при необходимости вернуться к предыдущему состоянию. Это полезно, если вы случайно удалили или изменили файл, а позже поняли, что вам нужна более ранняя версия.
  • Если вы потеряете файл или папку, вы можете легко восстановить их с помощью функции «История файлов».

Как включить историю файлов в Windows 11

Чтобы включить историю файлов в Windows 11, вам необходимо подключить внешнее запоминающее устройство к компьютеру и выполнить следующие действия:

  • Сначала откройте панель управления, нажмите «Система и безопасность», затем «История файлов».
  • Или вы можете выполнить поиск истории файлов, используя поиск в меню «Пуск» (клавиша Windows+S).

Открыть историю файлов

  • Нажмите кнопку «Выбрать диск» на левой панели.

Выберите Диск

  • Здесь вы можете выбрать внешний диск (для хранения резервных копий) или нажать «Добавить сетевое расположение», чтобы сохранить резервные копии на сетевом диске.

Выберите диск для резервного копирования файлов

  • И, наконец, нажмите кнопку «Включить», чтобы включить историю файлов Windows 11.

История файлов включена

Как настроить параметры истории файлов в Windows 11

Вы можете настроить различные параметры истории файлов в Windows 11, например:

– Как часто История файлов делает снимки ваших файлов

– Как долго История файлов хранит ваши снимки

– Сколько места История файлов использует на вашем резервном диске

– Какие папки История файлов включает или исключает из резервных копий

– Как восстановить файлы из резервных копий

Добавить папки в историю файлов:

Начнем с того, как добавить папки в историю файлов. Обычно история файлов по умолчанию создает резервные копии важных папок, таких как «Документы», «Изображения», «Видео» и «Рабочий стол». Но вы можете добавить любую папку для резервного копирования, используя историю файлов, вам нужно добавить эту папку в одну из этих основных библиотек.

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

Добавить папки в историю файлов

Чтобы исключить папки из истории файлов:

  • В окне «История файлов» нажмите ссылку «Исключенные папки» в списке слева.

Исключенные папки

  • Нажмите кнопку «Добавить» и выберите папки или подпапки, которые вы хотите исключить из резервной копии истории файлов.

Нажмите «Добавить опцию».

  • После исключения папок обязательно нажмите кнопку «Сохранить» в нижней части экрана.

Изменить частоту резервного копирования истории файлов

  • Чтобы изменить частоту создания снимков файлов в истории файлов, нажмите «Дополнительные настройки» на левой панели.
  • В разделе «Версии» используйте раскрывающееся меню рядом с пунктом «Сохранять копии файлов», чтобы выбрать частоту резервного копирования.
  • Вы можете выбирать каждые 10 минут, 15 минут, 20 минут, 30 минут, 1 час, 3 часа, 6 часов, 12 часов или один раз в день.

История файлов Частота резервного копирования

Изменить продолжительность резервного копирования истории файлов

  • Чтобы изменить срок хранения ваших снимков в истории файлов, нажмите «Дополнительные настройки» на левой панели.
  • В разделе «Версии» используйте раскрывающееся меню рядом с пунктом «Сохранить сохраненные версии», чтобы выбрать продолжительность резервного копирования.
  • Вы можете выбрать один месяц, три месяца, шесть месяцев, девять месяцев, один год, два года или навсегда.

История файлов Продолжительность резервного копирования

Как восстановить файлы с помощью истории файлов в Windows 11

Функция истории файлов в Windows 11 не только создает резервные копии ваших файлов и папок, но также позволяет восстанавливать удаленные файлы в случае случайного удаления, изменения или повреждения.

  • Чтобы восстановить файлы из резервных копий, нажмите «Восстановить личные файлы» на левой панели.
  • Откроется окно, в котором вы сможете просматривать и искать предыдущие версии ваших файлов.
  • Вы можете использовать стрелки внизу для навигации по различным снимкам.
  • Чтобы восстановить файл или папку, выберите его и нажмите зеленую кнопку с круглой стрелкой внизу.
  • Вы также можете щелкнуть правой кнопкой мыши файл или папку и выбрать «Восстановить», «Восстановить в» или «Открыть».

Как отключить историю файлов в Windows 11

В открывшемся окне «История файлов» нажмите «Выключить», чтобы история файлов не делала новые снимки ваших файлов.

Если вы хотите удалить существующие снимки с резервного диска, нажмите «Дополнительные настройки» на левой панели. В разделе «Версии» нажмите «Очистить версии».

Очистить версии

  • В появившемся всплывающем окне выберите, как долго вы хотите хранить сохраненные версии. Вы можете выбрать один из нескольких вариантов, например, один месяц, три месяца, шесть месяцев, один год, два года или навсегда.
  • Если вы хотите удалить все версии, выберите «До тех пор, пока не потребуется место». Это означает, что история файлов удалит все версии, кроме последней.
  • Нажмите «Очистить», чтобы подтвердить свой выбор.

Очистка истории файлов

Разница между историей файлов в Windows 11 и 10

История файлов в Windows 10 и 11 в основном одинакова, но есть некоторые незначительные различия, о которых вам следует знать:

  • В Windows 10 вы можете получить доступ к истории файлов как из панели управления, так и из настроек. В Windows 11 вы можете получить доступ к истории файлов только из панели управления.
  • В Windows 10 история файлов создает резервные копии файлов во всех папках, которые являются частью библиотек вашей учетной записи, таких как «Документы», «Музыка», «Изображения», «Видео», «Рабочий стол» и OneDrive. В Windows 11 история файлов по умолчанию создает резервные копии только файлов в папках «Рабочий стол» и OneDrive. Если хотите, вы можете добавить другие папки вручную.
  • В Windows 10 в истории файлов есть возможность рекомендовать диски для резервного копирования. В Windows 11 эта опция недоступна.

История файлов — это полезный инструмент, который поможет вам защитить ваши личные файлы от случайной потери или повреждения. Однако это не полное решение для резервного копирования, которое может восстановить всю вашу систему в случае серьезного сбоя или катастрофы. Для этой цели вам понадобится инструмент резервного копирования образа системы, который может создать полную копию всего вашего диска, включая Windows, программы, настройки и файлы.



2023-11-18T18:28:29
Вопросы читателей

The Dude – мониторинг оборудования ЛВС. Часть 1 – установка.

В данном описании представлена установка The Dude v6 на примере ЛВС нашей организации.

The Dude – это программа мониторинга оборудования в локальной сети от производителя MikroTik. Страница на официальном сайте.

Программа распространяется бесплатно. В основном она нацелена на мониторинг сетевого оборудования MikroTik, но так же удовлетворительно справляется с мониторингом других сетевых устройств. Работает в основном на L3 OSi, может сканировать L2. Умеет мониторить соединения (Links) и поддерживает работу с SNMP.

Программа (система) состоит из серверной и клиентской частей. Информация от сетевого оборудования поступает на сервер. Администратор просматривает поступившую информацию и выполняет настройки через клиентское ПО со своего компьютера. Читать

Electron 27.0 выходит с улучшениями для Wayland и прощается с macOS 10.13 и Windows 7/8/8.1

электрон

Electron позволяет писать кроссплатформенные настольные приложения с использованием JavaScript, HTML и CSS.

В выпуск новой версии Electron 27.0 и в этом выпуске выделяются различные изменения, большинство из которых — это исключение различных методов, свойств и событий, а также поддержка macOS 10.13 и косвенно Windows 7/8/8.1.

Для тех, кто не знает об Электроне, они должны знать, что это позволяет создавать любые графические приложения с использованием браузерных технологий, логика которого определена в JavaScript, HTML и CSS, а функциональность может быть расширена с помощью системы плагинов.





Читать

Почему мои видео на YouTube постоянно приостанавливаются?

YouTube — один из основных источников развлечений для многих людей по всему миру. Благодаря множеству каналов YouTube разных жанров, YouTube стал идеальной платформой для просмотра фильмов. Вы когда-нибудь были в ситуации, когда вы смотрите какое-то видео на YouTube, и оно внезапно зависает или через несколько минут начинает приостанавливаться? Это может испортить все впечатление от просмотра чего-либо на YouTube. Если вы когда-нибудь попали в такую ​​ситуацию и не знаете, что делать, эта статья может вам помочь. Существует множество исправлений, когда ваши видео на YouTube продолжают приостанавливаться, и каждое из этих исправлений подробно описано ниже.

Почему видео на YouTube постоянно останавливаются?

Независимо от того, используете ли вы свой мобильный телефон, планшет, телевизор или компьютер, проблема приостановки видео на YouTube может возникнуть в любое время. Прежде чем мы углубимся в решения этой проблемы, давайте рассмотрим множество причин, по которым видео YouTube на вашем устройстве может приостанавливаться.

  • Сервер YouTube не работает.
  • Ваше интернет-соединение не работает.
  • Ваш браузер устарел.
  • В вашем браузере сохранено много ненужных и нежелательных файлов.
  • Вы не обновили приложение YouTube до последней версии.
  • Вы включили функцию «Напомнить мне о перерыве».
  • Наушники, которые вы используете, неисправны.

Как исправить, что видео на YouTube продолжают ставиться на паузу?

Теперь, когда вы рассмотрели возможные причины приостановки видео на YouTube, давайте посмотрим, как быстро решить эту проблему.

1. Проверьте подключение к Интернету.

Если ваши видео на YouTube постоянно приостанавливаются, возможно, у вас плохое подключение к Интернету. Вы можете решить эту проблему, используя любое из исправлений, приведенных ниже.

  • Закройте все ненужные приложения, работающие в фоновом режиме, которые могут перегружать полосу пропускания.
  • Чем дальше вы отойдете от Wi-Fi роутера, тем хуже будет соединение. Вы можете попробовать подойти ближе к маршрутизатору Wi-Fi и проверить, сохраняется ли проблема.
  • Перезагрузите маршрутизатор Wi-Fi, чтобы удалить все файлы кэша или памяти, которые могут повлиять на общую производительность соединения Wi-Fi.
  • Если у вас нет возможности приблизиться к маршрутизатору Wi-Fi для лучшего подключения, вы можете попробовать использовать удлинитель Wi-Fi.

2. Попробуйте использовать другой браузер.

Если вы сталкиваетесь с другими проблемами на YouTube, а также с регулярными приостановками видео, возможно, виноват используемый вами браузер. В таком случае проблема будет решена при обновлении браузера до последней версии. Если даже после обновления браузера у вас по-прежнему возникают проблемы при просмотре видео на YouTube, лучше всего загрузить другой браузер.

3. Убедитесь, что наушники отключены.

Если вы смотрите какое-то видео на YouTube, используя наушники для звука, и замечаете, что оно продолжает отключаться, вы можете столкнуться с проблемой приостановки видео на YouTube. Это может произойти, если штекер наушников поврежден, порт телефона загрязнен или наушники Bluetooth разряжены.

Если ваши наушники физически повреждены, всегда лучше немедленно заменить их, чтобы избежать проблем в будущем при воспроизведении видео на YouTube. Если проблема связана с наушниками Bluetooth и вы не видите никаких физических повреждений, вы можете сделать следующее.

  • Старайтесь находиться на расстоянии 20–30 футов от вашего устройства, когда вы используете наушники Bluetooth для прослушивания звука.
  • Отключите и снова подключите наушники.
  • Зарядите наушники и попробуйте использовать их снова.

4. Очистите кэш и данные.

Ваше устройство, будь то мобильный телефон или компьютер, хранит файлы кэша с каждого сайта, который вы посещаете в Интернете, чтобы оно могло запустить сайт быстрее при следующем посещении. Однако, когда многие из этих файлов кэша накапливаются с течением времени, это может вызвать множество проблем с производительностью, одной из которых является приостановка видео на YouTube. Чтобы устранить эту причину, вам придется очистить кеш магазина и файлы данных из вашего браузера, выполнив следующие действия.

  • В «Настройки» перейдите в «Приложения и уведомления».
  • В списке приложений выберите «YouTube».
  • Перейдите в «Хранилище» и нажмите «Очистить кэш».

5. Проверьте неограниченное использование фоновых данных

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

  • В «Настройки» перейдите в «Подключения», а затем нажмите «Использование данных».
  • Здесь выберите «Экономия данных» и включите «Разрешить приложение, пока включено сохранение данных».
  • В списке приложений переместите тумблер рядом с YouTube, чтобы включить его.

6. Перезагрузите ваше устройство.

В вашем устройстве могут быть небольшие ошибки, из-за которых видео на YouTube может приостанавливаться. Простая перезагрузка используемого вами устройства может решить множество подобных проблем. Всегда убедитесь, что вы сохранили свою работу перед перезагрузкой устройства.

  • iPhone: чтобы перезагрузить iPhone, одновременно нажмите кнопку «Увеличение/уменьшение громкости» и боковую кнопку и удерживайте их, пока не появится ползунок, и выключите телефон. Через несколько секунд нажмите кнопку «Боковая» и удерживайте ее, пока на экране не появится логотип Apple.
  • iPad: Чтобы перезагрузить iPad, одновременно нажмите кнопку «Увеличение/уменьшение громкости» и кнопку «Вверх» и удерживайте их, пока не появится ползунок, и выключите iPad. Через несколько секунд нажмите кнопку «Вверх» и удерживайте ее, пока на экране не появится логотип Apple.
  • Телефон Android: нажмите кнопку «Питание», удерживайте ее несколько секунд и выберите «Перезагрузить» из предложенных вариантов.

7. Обновите приложение

Если вы не установили последние обновления приложения YouTube, вы можете столкнуться с множеством проблем, когда видео YouTube приостанавливается и является одним из них. Чтобы это исправить, перейдите в Play Store на своем устройстве Android или в App Store на своем устройстве Apple, найдите приложение YouTube и нажмите «Обновить». На вашем ПК с Windows вы можете обновить YouTube либо из его настроек, либо из Microsoft Store. После этого вы сможете смотреть любые видео на YouTube без каких-либо перерывов.

8. Отключите расширения

Если в вашем браузере установлено несколько расширений, велика вероятность, что одно из них может быть причиной приостановки видео на YouTube. Исправить это можно, открыв новое окно в режиме инкогнито. Когда вы транслируете видео YouTube в приватном режиме, расширения браузера отключаются. Если после этого вы не столкнетесь с проблемой приостановки видео на YouTube на полпути, вам придется удалить все расширения браузера и установить их по отдельности, чтобы проверить то, которое вызывает проблему. Как правило, причиной таких проблем являются расширения браузера, управляющие мультимедийным контентом.

9. Отключите функцию «Перерыв»

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

  • Откройте YouTube, перейдите в свой профиль и нажмите «Настройки».
  • Нажмите «Общие» и отключите «Напомнить мне о перерыве».

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

10. Отключите автоматическую паузу

При использовании YouTube необходимо убедиться, что на вашем телефоне отключена функция автоматической паузы. Функция YouTube Auto Pause позволяет автоматически приостанавливать видео при просмотре видео в приложении. Эта функция в основном активируется датчиком лица, который распознает выражение лица пользователя и выводит телефон из спящего режима, воспроизводит видео на YouTube и даже приостанавливает видео на YouTube. Если именно это вызывает проблему с приостановкой видео на YouTube, вам придется отключить функцию автоматической паузы, которая использует датчик лица.

11. Избавьтесь от рекламы

Один из способов заработать деньги на YouTube — это размещение нескольких рекламных объявлений в видео. Хотя это определенно приносит пользу создателям видео, это может испортить впечатления зрителям. Самый простой способ избавиться от этой рекламы — перейти на платную премиум-версию YouTube. Вы даже можете установить блокировщик рекламы, но недавно YouTube начал обнаруживать блокировщики рекламы и ограничивать видео для любого пользователя с блокировщиками рекламы.

12. Отключить сохранение данных.

Экономия данных обычно снижает качество изображения, чтобы помочь вам ограничить использование мобильных данных и не превысить лимит. Если вы превысите лимит, Data Saver может даже остановить воспроизведение видео на YouTube. Однако если у вас безлимитный тарифный план, вы можете отключить функцию «Экономия данных» и непрерывно наслаждаться видео на YouTube, выполнив действия, указанные ниже.

  • Запустите приложение YouTube и перейдите в свой профиль.
  • Нажмите «Настройки», а затем «Сохранение данных».
  • Установите переключатель перед «Режимом экономии данных», чтобы отключить эту функцию.

13. Выключите режим экономии заряда батареи.

Если на вашем телефоне включен режим экономии заряда батареи, видео на YouTube может приостанавливаться, пока вы смотрите их в случайном порядке. Это происходит потому, что в режиме экономии заряда ваш телефон пытается сэкономить заряд аккумулятора, мешая работе приложений на вашем телефоне, что потенциально может привести к более быстрому разряду аккумулятора вашего телефона. Избежать такой ситуации можно, отключив режим энергосбережения следующим образом.

  • На экране мобильного телефона проведите пальцем вниз от верхней части экрана, чтобы открыть панель уведомлений.
  • Найдите значок экономии заряда батареи и отключите его.

14. Проверьте конфликтующее стороннее приложение

Некоторые сторонние приложения могут снижать производительность вашего приложения YouTube. Приложения для блокировки рекламы, антивирусные приложения или VPN являются наиболее распространенными причинами ненормального поведения вашего приложения YouTube. Чтобы решить эту проблему, вам придется удалить все такие приложения, которые потенциально могут снизить производительность YouTube. После этого вы можете перезапустить приложение YouTube и проверить, сохраняется ли проблема.

YouTube – часто задаваемые вопросы

1. Почему все мои видео останавливаются каждые несколько секунд?

Ответ: Самая распространенная причина, по которой видео на вашем телефоне приостанавливается каждые несколько секунд, — это плохое подключение к Интернету. Видео YouTube используют много данных, и когда скорость вашего интернет-соединения низкая, данные, необходимые для потоковой передачи видео, не передаются с необходимой скоростью, что ограничивает плавный просмотр видео.

2. Почему мое интернет-видео постоянно приостанавливается?

Ответ: Когда пропускная способность Интернета недостаточна, видео в Интернете может периодически приостанавливаться. Это происходит потому, что данные не могут быть загружены достаточно быстро для просмотра видео, из-за чего видео начинает буферизоваться. Это также происходит при нестабильном интернет-соединении.

3. Как сделать так, чтобы видео не приостанавливалось?

Ответ: Вы можете попробовать следующее исправление, чтобы ваши видео не приостанавливались на YouTube.

* Запустите приложение YouTube и зайдите в свой профиль.

* Перейдите в «Настройки» и выберите «Общие».

* Отключите опцию «Напомнить мне сделать перерыв».

4. Как решить проблему автоматической паузы YouTube в браузере?

Ответ: Вы можете исправить это в своем браузере, очистив кеш, историю и файлы cookie, выполнив действия, указанные ниже.

* Перейдите в «Меню» и выберите «История».

* Отсюда нажмите «Очистить данные просмотра».

* Затем выберите «Дополнительно» и установите необходимые флажки для удаления кэша, файлов cookie и данных сайта.

* Кроме того, выберите параметр «Все время» в разделе «Диапазон времени» и нажмите «Очистить данные».

5. Почему YouTube приостанавливает работу на моем Smart TV?

Ответ: Если YouTube постоянно приостанавливает работу вашего Smart TV, вы можете попробовать следующие исправления.

* Убедитесь, что у вас надежное и быстрое подключение к Интернету.

* Закройте все приложения, работающие в фоновом режиме.

* Сбросьте настройки модема или маршрутизатора.

* Перезапустите приложение YouTube.

Заключение

Очень неприятная ситуация, когда видео на YouTube, которое вы смотрите, начинает случайно останавливаться каждые несколько секунд. Если вы когда-нибудь окажетесь в такой ситуации, эта статья может вам помочь. Может быть несколько причин, по которым видео YouTube на вашем устройстве может время от времени приостанавливаться. Как только вы узнаете причину, вам станет легче устранить проблему. Вы можете следовать приведенным выше решениям, чтобы наслаждаться плавным просмотром видео на YouTube без каких-либо перерывов.



2023-11-18T01:03:21
Вопросы читателей