GitHub中HTTPS和SSH之间的混淆

GitHub中HTTPS和SSH之间的混淆,git,github,Git,Github,我正在学习Git和GitHub,并想就此提出一些问题。我发现有两种方法可以从本地PC连接GitHub repo并与之交互:通过SSH和HTTPS。我所面临的困惑是,在这里,它说“HTTP协议的目的是为web浏览器和服务器提供一种标准的相互通信方式。”既然HTTPS只是HTTP的更安全版本,那么如果我们通过HTTPS与GitHub交互,我们可以使用类似shell的bash而不是浏览器来与githubrepo交互。其次,HTTPS是否只允许传输数据,还是也允许像SSH允许的那样操纵服务器(在远程服务

我正在学习Git和GitHub,并想就此提出一些问题。我发现有两种方法可以从本地PC连接GitHub repo并与之交互:通过SSH和HTTPS。我所面临的困惑是,在这里,它说“HTTP协议的目的是为web浏览器和服务器提供一种标准的相互通信方式。”既然HTTPS只是HTTP的更安全版本,那么如果我们通过HTTPS与GitHub交互,我们可以使用类似shell的bash而不是浏览器来与githubrepo交互。其次,HTTPS是否只允许传输数据,还是也允许像SSH允许的那样操纵服务器(在远程服务器中创建和删除文件)

HTTP协议的目的是为web服务提供一种标准方式 浏览器和服务器可以相互通信

在更一般的形式中,HTTP用于客户端和服务器之间的通信。这里的客户端可以是web浏览器,甚至是命令行界面

既然HTTPS只是HTTP更安全的版本,那么它是如何实现的呢 如果我们通过HTTPS与GitHub交互,我们可以使用类似于shell的bash 而不是与GitHub repo交互的浏览器

由于已经确定HTTP/s用于服务器和客户端之间的通信,并且web浏览器只是众多客户端中的一个,现在很容易理解为什么可以通过bash进行通信。请注意,要进行通信,最需要的是身份验证,如果这样做了,您就可以轻松地进行通信。在这里,您正在github服务器和您的命令行客户机之间通信

第二,HTTPS是只允许传输数据还是也允许传输数据 操作服务器(在远程服务器中创建和删除文件) 像SSH允许我们做什么

它只允许传输数据。请记住,HTTPS只是一个协议,这意味着一组规则,如果遵循这些规则,将允许您在服务器和客户端之间传输数据。现在,只有当服务器理解数据时,数据才有用。 如果说数据包含一个命令,说明删除所有数据,并且如果服务器理解并以某种方式运行该命令,则表示您以某种方式操作了服务器。 但在相同的情况下,如果服务器不理解,则不会发生更改。但正如您所看到的,HTTPS在做出更改时没有任何作用,除了允许或不允许传输该数据

希望这能有所帮助

编辑: 还要补充的是,有标准的HTTP方法,允许修改服务器数据;发布、删除等。要将此内容完整地放进去,请检查评论

引用@Z4层进行编辑 "
如前所述,bash实际上并不涉及git如何与远程主机通信。此外,最后一段有误导性。HTTP绝对提供了能够操纵服务器资源的方法:DELETE、PUT、POST等……这些请求方法是规范的一部分。我认为您将HTTP与底层transf混为一谈er层协议–Z4层“

在HTTPS和SSH之间选择与远程Git存储库通信通常归结为一个方便和个人偏好的问题。在这两种情况下,Git只是简单地使用一个现有的和完善的协议来与远程系统通信。真正地就这些,不必过度思考。HTTPS是为传输超文本而设计的(因此名称…),但它可以用于其他目的,所以不要认为它仅限于您的web浏览器

如果您使用为HTTP定义的一组功能,您将看到它提供了一组强大的功能,方便了任意数据的交换。该规范确实包括可能对服务器产生副作用的方法(删除、发布等)

Git如何在HTTP上工作? 要使用HTTPS为存储库提供服务,您需要配置一个web服务器(Apache、Lighthttpd……),以使用一个名为“
git
请求处理程序”的插件。要记住几点:

  • git
    不是web服务器。它不直接绑定到端口或服务HTTP请求。要做到这一点,它需要一个真正的web服务器。(*)
  • Web服务器不了解
    git
    。ApacheHTTPD不理解git,因为这不是它的目的
git-http-backend
是一个CGI脚本,用作web服务器和主机系统上的
git
存储库之间的接口。web服务器将绑定到HTTPS端口和服务输入连接。当您从本地系统运行
git push
到远程主机时,
git
将通过HTTP连接到远程服务器。在服务器上,当一个
git
客户端连接时,该请求被转发到CGI插件进行处理

Git如何在SSH上工作? 更容易将我们使用
git
的方式与
ssh
联系起来,因为它们都是我们在命令行中经常使用的工具

当配置为使用SSH时,
git
的功能与您想象的非常接近:它使用SSH协议传输数据并影响远程存储库上的更改

哪个更好? 有时HTTPS是更好的选择,因为必要的端口通常不会被防火墙阻止,而SSH有时会被防火墙阻止。我相信GitHub为此推荐HTTPS

HTTP允许匿名访问存储库,而SSH要求用户在远程服务器上具有SSH访问权限,即使是只读操作,如
git pull

另一方面,SSH通常更容易设置(许多Linux发行版默认启用了SSH),并且可能不需要任何特殊配置就可以工作。HTTPS需要一些关于如何设置的知识