这是一篇为初学者准备的文章,所以作者会尽量从基础出发,尽量细致的描述每一个细节,以求让初学者不会一头雾水,有一定基础的同学就不用看了,以免浪费你的时间。
假设博主今天春心荡漾,想要访问一些不可描述的小网站,于是,博主悄悄的打开了浏览器,在浏览器的地址栏中输入了一个小网站的网址,此处假设这个小网站的网址为www,baidu.com,当博主输入了这个网址以后,浏览器中就显示了博主想要看到的内容,整个过程如下图所示。
那么,浏览器返回给我们的内容是怎么产生的呢?
这些内容肯定不是凭空产生的,而是有人为我们准备了这些内容,当我们在浏览器的地址栏输入网址,这些提前准备好的内容即可返回到浏览器中,以便有需要的人能够查看到这些内容,而查看这些内容的人就是我们平常所说的“客户”,客户往往会通过“客户端程序”去请求,查看这些内容,我们最常使用的客户端程序就是浏览器了,所以,在之后的http相关的文章中,如果没有特别说明,我们所说的”客户端“就是“浏览器”,我们使用客户端去查看我们想要的内容,而提供内容的一端被称为“服务器端“,当作为客户时,我们需要在电脑上安装客户端软件(即浏览器),通过客户端软件查看我们想要的内容,而作为提供内容的人,也需要在服务器的计算机上安装对应的软件,才能为我们提供服务,而服务器端的计算机就是我们常说的“服务器”,安装在服务器上的,为我们提供内容的软件称之为“web服务器软件”。
所以,综上所述,我们可以了解到如下名词
注:如下名词的解释均针对http而言,在后面的文章中我们会解释什么是http,此处不用纠结
客户端:客户端通常是指浏览器,比如谷歌浏览器,火狐浏览器,IE等,浏览器安装在客户使用的电脑上,所以,在描述http时,客户端通常也代指那些安装了浏览器的电脑。
服务端:·服务器通常是那些安装了“web服务软件”的计算机,这些服务端的计算机被称为服务器。
没错,聪明如你一定想到了,说白了,客户端与服务端就说两台电脑,分别安装了不同的软件,服务器提供内容,客户端查看内容。
所以,当我们访问网页时,大致的过程如下图所示。
客户端与服务器既然能够通讯,那么证明它们之间一定是通过某种方法进行沟通当的,就像你我之间能够进行沟通一样。
你和我都说汉语,所以,当我说“苹果”这个词的时候,你就会想到一种水果,或者想到一个手机品牌,但是当我对一个美国人说“苹果”两个字时,他可能并不能理解我在说什么,因为他可能听不懂汉语,如果我想要对他表达“苹果”这个词,我需要说“Apple”,他才会明白我说的是什么,当我跟你聊天时,我们都说汉语,当两个美国人聊天时,他们都说英语,这样,才能有效的沟通,总之,如果想要能够顺畅的沟通,沟通双方都必须遵守相同的协议,我们可以把汉语理解成一种协议,把英语也理解成一种协议,只要沟通双方都遵守相同的协议,双方就能够顺畅的沟通,只要沟通双方都遵守相同的协议,双方就能够理解对方想要做什么。当然,之所以拿汉语,英语举例,是为了让初学者能够更加容易的理解“协议”这个词,但是请不要错误的以为“协议“就是”“语言”,之所以拿语言举例,是为了方便理解,说白了,“协议”可以理解为某种规则或者某种约定,只要大家严格按照这种约定行事,世界就会正常的运转,比如“红灯停”,“绿灯行”也可以理解为一种协议,比如在马路上都要靠右行驶(在中国),也是一种协议,比如在小饭馆,你给老板人民币,老板给你对应的餐食,也是一种协议,“协议”的概念稍微有一些抽象,稍微有一些宽泛,此处大概有一个印象即可,在学习的过程中,我们自己就会慢慢的理解它了。
客户端与服务器之间,也需要遵守某些相同的协议,才能够顺畅的通讯,细心如你一定注意到了,我说的是“某些”协议,也就是说,双方要遵守的协议不止由一种。它们需要同时遵守多种协议,才能够正常的完成整个通讯过程。
就像我们发送信件一样,首先,我们需要将信息写到一张纸上,然后将信纸放到信封中,并且将信封封死,最后将信件投入邮局中。邮局根据信件的目的地址,将信件分派到不同的运转中心(分拣中心),中转中心根据信件的地址,将信件发送到下一个中转中心,直到由中转中心发往信件的目的地,当信件到达收件人手中之后,收件人需要拆开信封,拿出信纸,阅读邮件,就能知道发信人想要传达的信息,整个过程中,发信人将信件写在纸上,并将信纸放入信封中,这其实就是一种协议,因为大家如果想要发送信件,则都需要这么做,信件被邮局传输的过程,其实也是一种协议,因为邮局或者快递公司,都是将信件或者快件发送到中传中心,再由中传中心一步一步的中传到最终的目的地的,这个大家都遵守的运输规则,也是一种协议,只不过,邮局的协议是针对运输过程这个层面的协议,而写信,封信,拆信对应的协议不是针对运输过程的,而是针对信息封装过程这一层面的一种协议,所以,这两种协议所针对的“层面”不同,但是如果想要正常完成整个过程,则必须遵守各个“层面”的协议,才能正常的完成整个发信收信的过程。
而客户端与服务器通讯的过程也是一样的,它们需要同时遵守很多协议, 这些协议可能针对的“层面”不同,当整个过程处于某个层面时,就需要遵循这个层面的协议,才能够正常工作,在最早的时候,人们将网络世界分为七层,但是,人们发现,将网络世界分为七层有些复杂了,而且不太实用,经过一段时间的实践,人们将网络世界分为了4层(或者说分成了5层,此处不用纠结),我们把这4层称之为:应用层,转输层,网络层和数据链路层。
当然,网络并不是我们此处探论的重点,我们可以先聊聊另外一些东西,比如http协议,刚才已经说过,不同的”层面“中,需要使用不同的协议,http协议就是应用层的一种协议,http协议是什么意思呢?
http是HyperText Transfer Protocol的缩写,HyperText Ttansfer Protocol 译为“超文本转输协议”。
从字面上理解,这种协议是用来转输“超文本”的,我们可以暂且粗暴的将“超文本”理解成我们所谓的”网页“(这样并不准确,但是方便理解),那么,我们可以将http协议理解为一种“网页转输协议”。
当我们在浏览器中输入网址时,其实就是在访问我们期望访问到的“网页”,而我们说过,这些网页中的内容不是凭空产生的,是别人提供给我们的,所以,如果我们需要访问网页,则需要从别人那里获取到这些网页文件。
客户端通过http协议告诉服务端:“我想要访问那个页面,请你转输给我”。
因为服务端也能够理解http协议,所以,服务端听到客户端的诉求以后,通过http协议找到对应的页面,再转输给客户端。
客户端收到了对应的网页以后,浏览器会对网页进行“解析”,最终展示别到人的眼前,变成我们看到的网页的内容。
浏览器我们天天都在用,浏览器是一种常用的客户端软件,它能够理解http协议,浏览器有不同的“品牌”,比如谷歌浏览器,火狐浏览器,IE浏览器等,我们可以根据自己的使用需要,选择一款适合自己的浏览器,浏览器是客户端软件,那么常用的服务端软件有哪些呢?
常见的http服务端软件如下(不包含能够处理动态请求的服务端软件):
Httpd
Nginx
lls
与浏览器一样,服务端软件也有不同的“品牌”,上述三种常见的http服务器软件就可以理解为不同的厂商的产品。
Httpd就是Apache软件基金会旗下的产品,由于Httpd是Apache如软件基金会众多产品里面出名较早的产品,所以人们往往会不加区分的称呼appche与httpd,当然,除了httpd以外,Apache软件基金会下面还有很多出名的开源项目。
Nginx就是所谓的“后起之秀”,它是俄国人发明的,与httpd相比,它的特点就是并发能力强,资源消耗小。
lls是我们熟知的“微软”的产品,它是Windows Server中的默认提供的http服务器。
我们可以根据具体的场景或者需要,选择对应的服务端软件。
好了,说了这么多,都是一些非常基础的概念,只是为了方便入门的同学,我们会在之后的文章中,慢慢的深入,慢慢的结合实际总结一些知识,希望这篇文章呢能够帮助到你~
- httpd配置文件httpd.conf规则说明和一些基本指令
apache httpd系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 本文主要介绍的是httpd的配置文件,包括一些最基本的指令.配置规 ...
- apache的/etc/httpd/conf/httpd.conf和/usr/local/apache2/conf/httpd.conf区别
一.问题 centos系统用yum安装完apache后,重启后有时会失效,然后去网上找资料,发现有的说重启命令是这样的: /etc/init.d/httpd restart 而有的呢,说重启命令应该是 ...
- 转:浅谈UNIX下Apache的MPM及httpd.conf配置文件中相关参数配置
为什么要并发处理 以Apache为代表的web服务器中,如果不支持并发,则在一个客户端连接的时候,如果该客户端的任务没有处理完,其他连接的客户端将会一直处于等待状态,这事不可想象的,好像没有为什么要不 ...
- httpd三种MPM的原理剖析
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- (httpd、php)
(一)http协议介绍 http: 超文本传输协议,http协议是应用层协议,实现http协议的软件都监听的TCP的80端口之上.http协议也是一种文本协议,是基于TCP协议实现 http协议有几个 ...
- WEB应用之httpd基础入门(一)
前文我们聊了下http协议web服务的一些常识和httpd服务器软件三种响应模型的简单介绍,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12515075.ht ...
- Linux——搭建Apache(httpd)服务器
一.基本概念 Apache(或httpd)是Internet上使用最多的Web服务器技术之一,使用的传输协议是http超文本传输协议(一个基于超文本的协议),用于通过网络连接来发送和接受对象. 有两个 ...
- Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details
thinkphp 在Apache上配置启用伪静态,重启Apache1 restart 竟然失败了,报错 Job for httpd.service failed because the control ...
- Apache主配置文件httpd.conf 详解
Apache的主配置文件:/etc/httpd/conf/httpd.conf 默认站点主目录:/var/www/html/ Apache服务器的配置信息全部存储在主配置文件/etc/httpd/co ...
- centos7 apache httpd安装和配置django项目
一.安装httpd服务 apache在centos7中是Apache HTTP server.如下对httpd的解释就是Apache HTTP Server.所以想安装apache其实是要安装http ...
随机推荐
- 数据结构之单链表(golang版)
线性表之单链表 package main //线性表中的链式存储结构 //第一个节点为头节点,并不真实保存数据,头节点基本代表了整个链表 import ( "fmt" ) type ...
- 【1.1】mysql frm文件丢失(ibd文件丢失)
[1]故障模拟准备环境 这里以innodb为例 [1.1]配置参数 开启独立表空间 innodb_file_per_table; [1.2]构建测试数据 create database test; c ...
- linux用户和组 之 用户管理
一. linux 用户和组的基本介绍 1.linux下 有三种用户: 1. root: 权限最大的. 2. 系统用户: UID小于1000的.系统服务管理用户,一般是不允许登录系统的.(比如mysql ...
- C++结构体、类和对象
在C++中结构体(struct)和类(class)可以通用,[结构体是一种特殊的类] struct和class的区别:访问和控制. struct在缺省值的情况下可以是public在外部被访问到对于类来 ...
- django 路由层 伪静态网页 虚拟环境 视图层
路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页 虚拟环境 视图层 JsonResponse FBV与CBV 文件上传 项目urls.py下面 from app01 import ...
- CentOS 修改/etc/resolv.conf 重启network后又恢复到原来的状态?
问题描述:CentOS 修改/etc/resolv.conf 执行service network restart后,/etc/resolv.conf又恢复到原来的状态 解决方法:/etc/resolv ...
- 算法:二叉树的层次遍历(递归实现+非递归实现,lua)
二叉树知识参考:深入学习二叉树(一) 二叉树基础 递归实现层次遍历算法参考:[面经]用递归方法对二叉树进行层次遍历 && 二叉树深度 上面第一篇基础写得不错,不了解二叉树的值得一看. ...
- 实现Banner广告图片轮换
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Java 中使用serversocket通信
1. 创建一个Java项目 TestMyServerSocket. 2. 创建一个包 com.weloglog.main 3. 创建一些使用到的类 程序启动类 MyServerSccket : 用来启 ...
- idea2019 Tomcat9 Tomcat Localhost log 乱码
网上一顿搜索,基本没用,可能版本不一样. idea2019 tomcat9解决方案: 找到Tomcat的安装目录,进入conf目录 打开logging.properties 找到java.util.l ...