Как сервер различает, запросы сделанные с помощью Python, от запросов сделанные Браузером?
============================================================================================

 Интересует, как сильно отличается запрос сделанный с помощью Python(requests или httpx) от запроса идущего с любого другого браузера? Есть ли различия?   

По идее, это набор одних и тех же битов.  

Как сервер понимает, что у клиента, который шлет запрос, нет JS обработчика.   

  

Заранее, всем спасибо за ответ. 

 можно еще проверять, запросил ли потом ещё какой-то URL, по инициативе JS.  

  

Закрыл ли соединение, или это HTTP/2. 

 1. Просто, но эффективно - заголовки запроса, в т.ч.  

* User-Agent
* Cookie
* Referer

  

Также легко подделывается.  

2. Использование штук типа prefetch и тому подобных. Если клиент запросил страницу, но не запросил сразу же стили/скрипты на ней - возможно, это бот. Просто, но рискованно (можно забанить обычных людей) и затратно (нужно анализировать отдачу статики).  

3. Исполнение JS-кода - например, предлагает клиенту выполнить фоновый AJAX-запрос, который поставит специальную куку. Минус - работает только со второго запроса. Обходится безголовым браузером типа selenium. 

 очевидно, по заголовкам