HTTP|HTTP是什么?是怎么发展的?( 二 )

文章图片
对于服务器来讲,PUT、POST、DELETE都不安全,因为它们都允许客户端直接操作服务器上的资源,因此一般来讲,需要通过认证以后才能允许客户端操作。最安全的方法就是GET,GET类似于只读的意思。
MIME机制:
HTTP1.0更大的改进之处就是引入了MIME机制:
MIME:Multipurpose Internet Mail Extension,多功能(用途)互联网扩展邮件;
MIME实现了能够将非文本(如:二进制)数据在传输前重新编码为文本格式再进行传输,接收方能够用相反的方式将其重新还原成原来的格式,还能够调用相应的程序打开此文件。如:传输过去一个rar文件,对方知道这是一个rar压缩包并且能够用相应的软件打开;若传输的是图片就能调用程序打开图片。所以在MIME编码当中,Base64就是一种文本编码格式。
SMTP:Simple Mail Transfer Protocol,简单邮件传输协议;
邮件传输协议早期只能传输纯文本,但后来不仅可以传输纯文本,还可以传输图片、视频等二进制文件,因为后来引入了MIME机制。
在http1.0协议当中,也是纯文本传输的,后来参照了SMTP的纯文本传输机制将MIME引入到了http协议当中,从此以后,http协议也可以传输非文本数据了。
实现过程:在客户端去获取某个资源时,资源传递到客户端时,明确说明是哪一类文件,如:是一个image/jpeg格式的图片,通过http协议的元数据(协议首部),在协议首部里边明确添加一个首部,告诉对方自己的文件是image/jpeg格式,所以客户端发现这是一个image大类下的jpeg小子类。此时,浏览器调用内部与之相匹配的插件来展示这个文件。若浏览器不支持这种插件,可以通过接口调用外部的系统上安装的其它的能够显示文件的插件,以插件的机制在浏览器中去解析对应MIME格式的文档的。因此我们可以发现若未安装flash插件,打开网页后许多flash插件是无法显示的也正是基于此种原理。当然,也正是这种插件机制的实现,使得后来出现了动态网页的技术。
动态效果:
如:Java,Applet,JRE。嵌入到网页中,通过http协议传输到客户端,通过JRE环境展示动态效果,但由于过于重量级,在与flash的竞争中落败。
动态网页:
动态网页指的就是在服务器端存储的用户访问的文档不再是HTML格式,而是编程语言开发的脚本(也可以是非脚本)。这个脚本在接收参数之后在服务器运行一次,运行完成之后会生成HTML格式的文档,并且把生成的文档发送给客户端。需要注意的是,这个编程语言所开发的脚本在用户访问时不是原封不动的发送给客户端,而是要先获取客户端的特性(客户端获取资源时需要先发起申请,而在发起申请之前需要把客户端地址、客户端浏览器的类型等一并发送给服务器),服务器获取客户端地址,浏览器类型等数据并将这些数据当做参数传递给脚本,让脚本在服务器端执行一次。因此任何一个用户去访问,都是根据用户的特性随时生成的,所以称为动态网页。
http请求在服务器端处理的过程详细描述:(请求分别为静态网页与动态网页时的情况)
文章图片
首先我们需要确定的是Web服务器是一个进程,这个进程在用户空间(Web服务器是一个特殊的具体应用,而既然是具体应用那就是一个具体的软件,那么这个软件就应该放在用户空间)。而用户所有能够访问的网页文件都存放在磁盘上,因此客户端向服务器发起请求时,这个请求先到达内核空间,而又因为这个客户端请求一定是通过网络协议发送过来的,而协议工作在内核(TCP/IP协议在内核工作),所以首先到达内核,内核空间解析接收到请求后,在内核中通过TCP/IP协议栈中各种路由机制(编码)等发现这个请求访问的是本机地址80端口的套接字,因为Web服务一旦启动之后一定会监听在TCP协议的80端口之上,因此内核就将请求通过套接字转交给用户空间的Web服务器,因此执行流程就从内核空间转到了用户空间了。
若Web服务器发现用户访问的是一个文件,如:index.html,此时服务器就得陷入到内核中,重新转换为内核模式,到磁盘上将文件加载过来,内核找到这个文件后再返回给用户空间,此时又回到了Web服务器了,Web服务器发现这个文件取出来了就可以响应客户端了。此时再通过套接字回到内核空间,通过网络TCP/IP协议栈最终响应给客户端。
如果用户访问的是动态网页,就不能直接予以响应了,需要通过其它协议启动另外一个进程,这个进程一定是一个解释器,如bash脚本就是bash解释器,PHP脚本就是PHP解释器。然后通过协议将这个文件传递给这个解释器或者这个解释器能够访问这个文档解释器自己陷入到内核模式将文档读取到解释器中,在解释其中执行一次,将执行结果返回给Web服务器。
Web服务器将请求的结果通过网络传递给客户端,它需要额外启动一个进程,进程和服务器之间建立的联系是通过协议实现的,而在这个进程执行结束后需要销毁。所以对于Web服务器来讲,若要响应一个动态内容,需要先创建一个新的子进程,这个进程执行一次结束后需要将这个进程销毁,而这都是系统资源开销,对于一个客户端访问可能无所谓,但成千上万的客户端访问呢?因此我们可以推断到响应动态内容服务器需要更多的系统资源。
推荐阅读
- 小丹聊健康|练跆拳道会长肌肉吗?练跆拳道长肌肉怎么办,快一起来看看!
- 中华房买卖|购买小户型最重要的是什么?过来人说出两点,现在知道还不晚!
- 本质|黄多多获国际大奖,看了黄磊的教育,才知道教育的本质是什么
- 唯独|被问最近一次心动是什么时候,别的学长都好会说,唯独张云龙例外
- 热播|《三十而已》正在热播 网友喊话钟晓芹怎么还不离婚
- 多缴、重复缴纳的医保费怎么退?一图读懂|多缴、重复缴纳的医保费怎么退?一图读懂
- 中科院|中科院调查90多人集体离职事件怎么回事?90多人为什么集体离职
- etc|高速被蹭ETC会多扣费吗?被蹭怎么办?官方解答
- 中医饮食营养汇TB|长期尿酸高,跟什么有关?该怎么做才能降尿酸?
- 海峡网|赖宝突发心梗去世是真的吗 赖宝突发心梗去世怎么回事
