HTTP 是每个 Web 开发人员都应该了解的协议,因为它为整个 Web 提供动力。了解 HTTP 当然可以帮助您开发更好的应用程序。
在本文中,我将讨论 HTTP 是什么、它是如何产生的、它今天的状况以及我们是如何走到这一步的
什么是 HTTP? 首先,什么是 HTTP? HTTP 是基于 TCP/IP 的应用层通信协议,它标准化了客户端和服务器之间的通信方式。它定义了如何通过互联网请求和传输内容。通过应用层协议,我的意思是它只是一个标准化主机(客户端和服务器)通信方式的抽象层。 HTTP 本身依赖于 TCP/IP 来获取客户端和服务器之间的请求和响应。
默认情况下,使用 TCP 端口 80,但也可以使用其他端口。然而,HTTPS 使用端口 443。
HTTP/0.9 - One Liner (1991) HTTP 的第一个有记录的版本是 1991 年提出的 HTTP/0.9。它是有史以来最简单的协议;有一个名为 GET 的方法。如果客户端必须访问服务器上的某个网页,它会发出如下所示的简单请求
GET /index.html 服务器的响应如下所示
(response body) (connection closed) 也就是说,服务器将收到请求,回复 HTML 作为响应,一旦内容传输完毕,连接就会关闭。有
无标题 GET 是唯一允许的方法 响应必须是 HTML 正如您所看到的,该协议实际上只不过是未来的踏脚石。
HTTP/1.0 - 1996 1996 年,HTTP 的下一个版本(即 HTTP/1.0)得到了发展,比原始版本有了很大的改进。与仅针对 HTML 响应设计的 HTTP/0.9 不同,HTTP/1.0 现在也可以处理其他响应格式,即图像、视频文件、纯文本或任何其他内容类型。它添加了更多方法(即 POST 和 HEAD)、更改了请求/响应格式、将 HTTP 标头添加到请求和响应中、添加了状态代码来标识响应、引入了字符集支持、多部分类型、授权、缓存、内容编码等都包括在内。
以下是示例 HTTP/1.0 请求和响应的样子:
GET / HTTP/1.0 Host: cs.fyi User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) Accept: */* 正如您所看到的,除了请求之外,客户端还发送了它的个人信息、所需的响应类型等。而在 HTTP/0.9 中,客户端永远无法发送此类信息,因为没有标头。
对上述请求的响应示例可能如下所示
HTTP/1.0 200 OK Content-Type: text/plain Content-Length: 137582 Expires: Thu, 05 Dec 1997 16:00:00 GMT Last-Modified: Wed, 5 August 1996 15:55:28 GMT Server: Apache 0....
欢迎来到 Git 面试准备指南,我们将在这里向初学者和经验丰富的专业人士讨论最常见的 Git 面试问题。无论您是准备参加 DevOps 或测试面试,还是希望提高 Git 技能,此资源都可以通过深入研究一些与 Git 基本概念和实践相关的最常见面试问题来帮助您。
我们将涵盖所有重要主题,例如分支、存储库管理、处理合并冲突和协作工作流程。通过探索这些问题,您将更深入地了解 Git 的版本控制系统,并更好地应对开发项目中的现实挑战。
1.什么是版本控制系统? 版本控制系统 (VCS) 是一种帮助跟踪和管理文件和代码随时间变化的软件。它允许多人协作处理一个项目,跟踪修订,并在需要时轻松恢复到以前的版本。
版本控制系统主要分为三种类型:
本地版本控制系统 (LVCS):在 LVCS 中,版本控制数据库存储在本地计算机上。更改和修订在位于用户计算机上的本地存储库中进行跟踪。但此类系统缺乏协作功能,不利于团队开发。 集中版本控制系统 (CVCS):在 CVCS 中,版本控制数据库存储在中央服务器上。用户可以从服务器检出文件、进行更改并将其提交回服务器。这允许多个用户在同一项目上进行协作,并提供对存储库的集中控制。然而,CVCS 的一个缺点是,如果中央服务器出现故障,协作者将无法执行某些操作,直到服务器恢复为止。 分布式版本控制系统 (DVCS):在 DVCS 中,每个用户都有一个包含整个版本历史记录的本地存储库。这意味着每个用户都拥有项目存储库的完整副本,包括所有分支和修订。用户可以在本地存储库上独立工作,并与其他存储库同步更改。 DVCS 为分布式和分散式工作流程提供更好的支持,允许用户离线工作并更有效地协作。 2. Git 中的 Origin 是什么? 在 Git 中,“origin”是指我们从中克隆的远程存储库。当我们从远程服务器克隆存储库时,Git 会自动创建一个名为“origin”的远程引用,该引用指向原始远程存储库。
默认情况下,当我们克隆存储库时,Git 会设置“来源”并将其与我们克隆的原始存储库关联起来。我们可以通过运行命令“git remote -v”来验证这一点。此命令显示与本地存储库关联的远程存储库列表及其 URL。
git remote -v origin https://github.com/lokeshgupta1981/Spring-Boot3-Demos.git (fetch) origin https://github.com/lokeshgupta1981/Spring-Boot3-Demos.git (push) 请注意,“origin”只是一个未硬编码的别名,可以使用以下命令提示符进行更改:
git remote rename origin newName 3.我们如何在 Git 中配置全局用户名和电子邮件? 设置全局一致的用户名和电子邮件地址非常重要,因为 Git 使用此信息将提交与正确的作者关联起来。它有助于识别每个提交的人员,并允许在项目内进行适当的协作和归属。
要在 Git 中配置全局用户名和电子邮件,我们可以使用以下命令:
git config --global user.name "MyName" git config --global user.email "myname@gmail.com" 这些命令将全局设置用户名和电子邮件,这意味着它们将用于您计算机上的所有 Git 存储库,除非在存储库级别覆盖。
您可以通过运行以下命令来验证更改。这些命令将分别显示配置的用户名和电子邮件。
git config --global user.name # Prints 'lokeshgupta1981' git config --global user.email # Prints 'howtodoinjava@gmail.com' 4....
介绍 Git Flow 是由 Vincent Driessen 在 2010 年提出的一种 Git 工作流。在这之前,Git 没有一个明确的标准工作流,导致团队在使用 Git 时往往会遇到一些问题,如分支管理、版本控制等。为了解决这些问题,Vincent Driessen 提出了 Git Flow 分支模型,成为了 Git 在实际应用中的一种标准工作流。
随着时间的推移,Git Flow 也在不断发展和完善。在 2011 年,Atlassian 发布了 SourceTree,这是一款图形化的 Git 客户端,支持 Git Flow 分支模型。在 2013 年,Git Flow 的一些开发者发布了 Git Flow AVH Edition,这是 Git Flow 的一个增强版本,提供了更多的功能和选项。此外,Git Flow 还得到了其他开源工具和平台的支持,如 GitHub、GitLab 等。
Git Flow 分支模型 Git Flow 分支模型定义了一种标准的 Git 分支模型,它将代码分为两个长期分支(master 和 develop)和三个短期分支(feature、release 和 hotfix),使得团队可以更好地管理代码的版本和发布。
以下是 Git Flow 分支模型的详细介绍:
master 分支 master 分支是代码库的主分支,它包含了所有已发布的代码和版本。所有代码都应该在该分支上进行测试和验证,以确保代码的质量和稳定性。master分支只能通过合并release或hotfix分支来更新。 develop 分支 develop 分支是代码库的开发分支,它包含了所有开发中的代码和功能。所有新的代码都应该在该分支上进行开发和测试,以确保代码的可靠性和稳定性。develop分支只能通过合并feature分支来更新。 feature 分支 feature 分支是为开发新的功能或修复 bug 而创建的临时分支。每个feature分支都是从develop分支分离出来的,开发完成后会合并回develop分支。feature 分支的命名应该清晰明确,以反映该分支所涉及的功能或问题。 release 分支 release 分支是为发布新版本而创建的临时分支。每个release分支都是从develop分支分离出来的,发布完成后会合并回develop分支和master分支。在 release 分支上可以进行一些小的修复和调整,以确保发布的代码的质量和稳定性。 hotfix 分支 hotfix 分支是为快速修复生产环境中的问题而创建的临时分支。每个 hotfix 分支都是从 master 分支分离出来的,修复完成后会合并回 develop 分支和 master 分支。hotfix分支的优先级比其他分支更高,因为它们需要尽快修复生产环境中的问题。 根据上面的理论,我们来实际操作一遍。首先,是 develop 分支创建一个 feature 分支。...
服务器设置 [可选] 设置系统 Swap 交换分区
因为 vps 服务器的运行内存很小,所以这里先设置下 Swap
# 1GB RAM with 2GB Swap sudo fallocate -l 2G /swapfile && \ sudo dd if=/dev/zero of=/swapfile bs=1024 count=2097152 && \ sudo chmod 600 /swapfile && \ sudo mkswap /swapfile && \ sudo swapon /swapfile && \ echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab && \ sudo swapon --show && \ sudo free -h 安装并生成证书 curl https://get.acme.sh | sh -s email=czj.june@gmail.com .acme.sh/acme.sh --issue --server letsencrypt --dns dns_aws -d chensoul.com -d '*.chensoul.com' .acme.sh/acme.sh --installcert -d chensoul.com -d *.chensoul.com --cert-file /usr/local/nginx/ssl/chensoul.com.cer --key-file /usr/local/nginx/ssl/chensoul.com.key --fullchain-file /usr/local/nginx/ssl/fullchain.cer --ca-file /usr/local/nginx/ssl/ca.cer --reloadcmd "sudo nginx -s reload" Docker 安装和配置 Docker 安装 具体过程可以参考网上文章。...
最近编写文档或者写博客,喜欢用 Typora 编辑器通过 Markdown 语法完成编写所有内容。为此,还付费购买了许可证。
喜欢 Typora 的理由:
所见即所得的编辑,Markdown 的语法都支持快捷键操作,非常方便
可以自定义主题的 CSS,包括文章内容就可以粘贴到公众号里
上传图片,支持图床服务。可以将图片上传到指定的图床,前提是需要先安装一个客户端,这里我使用的是 PicGo。然后,PicGo 支持常见的一些图床服务。
支持导出
Typora 图片复制到本地 接下来,聊聊 Typora 的图片上传设置:
当你插入图片时,你可以分情况对图片进行设置。比如:
1、对本地位置的图片,可以设置一个上传规则:复制到指定路径或者是当前路径下的一个文件夹、上传图片。
如果是编写一个文档,我们就设置把图片保存到本地的 assets 文件夹内,这样方便管理。 如果是编写博客,图片一般是集中管理的,我们可以设置复制到一个指定路径 2、类似的,对网络位置的图片也可以使用上面的规则。
注意,如果将图片保存到本地目录,在文章中引用图片是使用的相对或者绝对路径。如果只是在本地查看,是可以预览图片的。但是,如果将博客上传到服务器,则因为路径问题可能会出现无法预览图片的情况。
所以,这种情况我们需要做一些修改。通常我会设置图片复制到博客的静态页面目录下面,比如,我现在使用的是 Hugo 构建静态博客,会将图片保存到 static/img 目录下,并且,还需要修改图片的 markdown 引用路径为 /images/image-20220819124422239.png ,以表示绝对路径查找图片,在博客服务器上就是相对根域名目录去 img 路径下查找图片。待 hugo 编译完成上传静态文件到服务器之后,可以通过 https://blog.chensoul.com/images/ 加上图片名称的方式访问到图片。
但是,显然,这时候在 Typora 是无法预览图片的,因为在本地查找不到这个绝对路径地址。这时候可以在 Typora 里面设置一个绝对路径,操作方法是,在 显示 -> 图片 -> 图像 -> 设置图片根目录 里进行设置。
设置完成之后,在当前文件的 md 文件的顶部元数据代码里会多一行代码:
title: "博客中如何使用图床服务" date: 2022-08-19T12:15:54+08:00 slug: using-images-in-blog categories: [日志] tags: [hugo] draft: true typora-root-url: ../../static 这样博客里所有的图片都会保存的博客服务器,如果博客访问量增大,则图片加载时间会变慢。为了解决这个问题,需要将图片进行压缩,并给博客设置 CDN 加速。
Typora 图片上传到网络 将图片保存到本地,待博客静态页面部署到服务器上之后,可以实现正常预览情况。但是,如果我们想把 md 文件打包上传到一些云笔记,比如:语雀,你会发现上传之后会出现图片无法预览的情况。
这时候,我们需要将图片上传到网络。首先,我们需要安装 PicGo,然后设置图床服务,这里我使用的是 github 作为图床来保存图片,并使用 jsDelivr 的 CDN 服务进行加速访问。
如何利用 Github 搭建自己的免费图床?可以参考这篇 文章。这里,记录一下我的操作步骤。
1、使用博客的托管仓库 的 static/img 目录来保存图片,这样方便图片的管理(比如:压缩、重命名,删除无用图片),如果图床服务不可用了,所有博客图片还有一个备份,只需要修改博客内图片的引用地址。前提是需要将仓库设置为 public。
2、在 github 设置里面创建一个 Token。以此打开 Settings -> Developer settings -> Personal access tokens,最后点击 generate new token...
这是我的第一篇文章,作为程序员,首先要做得第一件事情,就是配置好开发环境,因为我使用的是 Mac 开发环境,所以,这篇文章主要是基于 Mac 操作系统,记录开发环境搭建过程。
系统设置 dotfile 配置 下载 dotfile 文件:
git clone git@github.com:chensoul/snippets.git 拷贝到用户目录:
cd dotfiles sh bootstrap.sh macos 系统设置:
. .macos 安装软件 安装 brew、nvs sh install.sh 安装 MySQL 安装 MySQL:
# 搜索可以安装的版本 ➜ brew search mysql # 安装对应的版本 ➜ brew install mysql@5.7 # 写入环境变量 echo 'export PATH="/opt/homebrew/opt/mysql@5.7/bin:$PATH"' >> ~/.zshrc # 为了让编译器找到 mysql@5.7 还需要写入 echo 'export LDFLAGS="-L/opt/homebrew/opt/mysql@5.7/lib"' >> ~/.zshrc echo 'export CPPFLAGS="-I/opt/homebrew/opt/mysql@5.7/include"' >> ~/.zshrc # 为了让 pkg-config 找到 mysql@5.7 还需要写入 echo 'PKG_CONFIG_PATH="/opt/homebrew/opt/mysql@5.7/lib/pkgconfig"' >> ~/.zshrc MySQL 服务相关:
# 查看 MySQL 服务状态 ➜ brew services info mysql@5.7 ➜ mysql.server status # 启动 MySQL 服务 ➜ brew services start mysql@5.7 ➜ mysql.server start # 重启 MySQL 服务 ➜ brew services restart mysql@5....
从零开始搭建博客,包括注册域名、购买服务器、部署程序及网站配置和优化。
域名 搭建一个博客或者网站,需要有一个域名。那什么是域名呢?看看百度百科上的解释:
域名(英语:Domain Name),又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。
由于IP 地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过网域名称系统(DNS,Domain Name System)来将域名和IP 地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP 地址数串。
简单来说,IP 地址可以标识一台计算机,但是不容易记忆,所以,设计出了域名。而域名就是标识因特网上的一台计算机,由网域名称系统 DNS 来完成域名和 IP 之间的映射。
如何注册域名?有很多网站提供域名注册服务,比如国内的:
阿里云 腾讯云 华为云 国外的:
GoDaddy Namecheap Amazon 注册域名的建议:
1、建议在正规、出名的网站注册域名,防止网站跑路。我曾经在一个小网站注册了一个域名,使用了几年之后,续期的时候,联系不上对方,导致无法使用该域名,甚至该域名被别人抢注册了。 2、在国内网站注册域名,都需要备案。如果不想备案,请在国外网站注册域名。我的域名 chensoul.com 就是在亚马逊上注册的。一是不想备案,二是对比了上面几个网站,发现亚马逊上的 com 域名价格相对便宜,所以一次性购买了 5 年。 3、建议优先注册 com 域名,域名尽可能的简短并且方便记忆。 我曾经注册过的域名:
javachen.com、javachen.space、javachen.xyz huaiu.com 服务器 注册了域名之后,需要一台服务器运行程序。服务器可以是一台物理机,比如你可以使用自己的电脑作为服务器;也可以是一台虚拟的云服务器,比如在云服务提供商购买一台独立的服务器;也可以使用第三方提供的服务器空间,比如 Github 上可以部署静态程序。不管哪种方式,服务器都需要有一个公网 IP,这样才能在因特网上访问你服务器上部署的程序。有了服务器之后,就可以给服务器公网 IP 设置域名解析。
我的服务器是在搬瓦工购买的,一年 49.99 美元。
程序 安装 Hugo 在 Mac 下安装 Hugo:
brew install hugo 新建站点 hugo new site chensoul.github.io -y yaml 上述命令会生成一个名为 chensoul.github.io 的文件夹,下面对文件夹结构做个说明:
$ tree chensoul.github.io chensoul.github.io ├── archetypes │ └── default.md ├── config.yaml ├── content ├── data ├── layouts ├── static └── themes 6 directories, 2 files 新建的站点,还没有加入 Git 版本管理,进入到这个目录下,执行一下如下命令,完成 Git Repo 的初始化:...