zoukankan      html  css  js  c++  java
  • 一次HTTP请求所涉及的技术与原理的理解

            这几天在学习lighttpd 和nginx服务器的配置和 Web运行环境的搭建。在配置过程中总带带有点模糊,为什么要这样配置,其中的原理是什么。虽然环境搭建好了,但心里还是带有点迷惑,为了解开自己的迷惑网上找了很多资料,终于 有一点点明白了。

           自己就把一次HTTP请求从浏览器发出到 服务器响应 反馈给 浏览器整个过程梳理了一遍。首先 要有一个大体的认识 就是 我们浏览网页, 无非就是 电脑A( 我们的电脑)  对电脑B(网站的服务器)上的文件和数据的一次访问。

          首先假设 用户打开浏览器 在网址栏中 输入 网址 例如  www.google.com 敲击回车后 浏览器将请求 按照 HTTP 协议的格式 讲请求打包,发到 google的服务器上。google服务器上的 HTTP Server 解析发送过来的HTTP请求,按照HTTP协议的格式解析,此时有两种情况:

          第一客户请求的是静态文件(html文件,图片等),此时HTTP Server根据配置文件找到对应文件所在的目录,使用IO流读取文件中的信息,然后HTTP Server在将这些数据 按照HTTP协议的格式打包,然后在反馈给用户浏览器,用户浏览器收到数据包后,同样按照HTTP协议的格式进行解析,然后展示给用户。

      以上的静态文件的处理比较容易理解,下面我们来说说如果用户请求的是 动态文件。

         动态请求:假设用户是一次登录请求,此时静态网页文件就无法处理了,因为要与数据库打交道,此时就要用到运用程序了(Application)。用户的一次登录请求被浏览器按照HTTP协议发送到HTTP Server后,HTTP Server解析到这次请求的是一个CGI应用程序,所以此时HTTP Server要与请求的 CGI应用程序  进行通信,难点就在这里。

        HTTP Server 如何 与 CGI应用程序 进行打交道呢(通信)?

        在讲解之前 我们先了解下 CGICGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。

      通俗点说  就是 我(HTTP Server)要与你(应用程序) 聊天,但 我是地球人 你是火星人(Java运用程序),我们之间根本无法直接沟通,该怎么解决呢?于是我们就共同制定 一个聊天的规定(协议),我按照规定这个 协议 跟你说话,然后 你 按照这个 协议 来理解我的讲话的内容。同理 你按照这个 协议 讲话,我也按照这个协议 来理解你讲话的内容。于是我们之间就可以正常的交流啦。而 这个 协议呢 就是 CGI 。有  CGI  不管 你(应用程序)用怎么写的,用什么编程语言写的,或者 我(HTTP Server)用什么方式写的。只要我们 拥有了能够读懂处理  CGI  我们就可以正常交流。

          但是我们毕竟 相隔太远 不能面对面交流,为了使我们能够交流,我们必须要借助一些工具。我来自 地球 科技比较落后 所以 我要扩展 我的功能,使我能够 发送和处理 CGI ,于是我 增加 我的  CGI模块 后 我拥有了发送和处理  CGI 的功能。而你是 火星人 科技更为先进,你们直接使用在火星上建立 网络服务器上 来发送和处理 CGI ,将我 发送来的每个请求传送到 指定 的  CGI应用程序 ,处理完后在反馈给我。后来 你们 觉得 CGI 太原始啦,“我们是火星人 我们要指定属于我们自己的 协议,使我们的火星人处理 CGI 更容易” 然后你们 就 制定了 Servlet 规范,但是 你 与 我之间 通信还是要通过 CGI ,你们火星很聪明,你们把 我的 CGI 请求 转换成 你们火星的  Servlet 然后在传递给指定的  Servlet 火星人 进行处理。当然你们的 网络服务器 在增加了将  CGI 与Servlet 互相转换的功能。很出名的就是Tomcat。

         有一天我想 与 其他外星 如 土星(假设是Python) ,土星 也有自己的网络服务器——flup 和自己的 规范 WSGI 。

         当然有可能还有人 疑惑 那  HTTP , CGI 等这些协议  运用程序服之间 又是怎么收到的? 这些讲 起来就麻烦啦 ,其中 涉及 到 TCP/IP  和操作系统 等底层知识啦,毕竟在中国 我们的软件还停留在 运用层。那些 操作系统,编译器,运用服务器 等基础软件都是老外写的,我们也就拿来修改一下或者直接用。有个大体的认识 写程序的时候 不迷惑就行啦。

          

  • 相关阅读:
    Centos7下rc.local文件开机不执行…
    Centos7添加密码安全策略
    Java8 时间日期类操作
    XML配置spring session jdbc实现session共享
    Spring Boot 2.x以后static下面的静态资源被拦截
    外观模式
    组合设计模式
    Java线程池源码解析
    观察者模式
    Java使用POI解析Excel表格
  • 原文地址:https://www.cnblogs.com/ArtsCrafts/p/Web.html
Copyright © 2011-2022 走看看