HTTP协议与WebServer

描述点

  • HTTP协议包括请求报文和相应报文,请求报文说明想要请求的资源路径,响应报文将指定路径下的资源返回。
  • WebServer指的是运行WebServer程序的服务器,这个程序监听服务器的某个端口。
  • 资源在一开始就只得是文件,也就是客户端请求服务器某个路径下的一个文件,然后服务器读取这个文件的内容,然后封装成为响应报文发送回去。因此响应报文最重要的是一个路径,响应报文最重要的是资源内容。
  • 单纯的静态页面文件不能满足需求,之后Web服务器在接收到请求报文之后,将请求的资源路径当作参数传递给另外一个运行在服务器上的程序,这个程序返回一个二进制的流当作资源的内容给WebServer程序,进而返回给客户端。

结论

  • WebServer本质的作用是接收客户端的请求报文,然后根据请求的资源路径获取资源内容,生成响应报文发送给客户端。至于如果获得资源的内容,或者直接读取服务器上的某个文件,或者交由另外一个程序负责。

HTTP报文例子

  • 下面是一个request的头部信息。
GET /gn/shipin/2018/07-13/news777755.shtml HTTP/1.1
Host: www.chinanews.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: cnsuuid=f1514510-f50b-ed5d-e3c8-79bdc4d3ddf810149.71358966217_1531461114252
  • 从首行可以看出,浏览器请求的是服务器中的/gn/shipin/2018/07-13/news777755.shtml文件,请求的是一个具体的文件,服务器找到这个文件之后,将文件的内容包装导response报文中,返回给浏览器。早期的网页都是静态的,也就是说服务器端的文件的内容是固定的,每次浏览器请求得到的页面相同,也就是用html编写的一些文本文件。服务器通过监听机器的一些端口号,当有请求的报文到达这个端口的时候,服务器根据报文中的参数中指定的文件的路径,在服务器中寻找该文件并返回。web server也可以看成是一种文件服务器,只不过利用的是http协议将文件的内容发送到浏览器端。浏览器还扮演了一个文件阅读器的角色,因为浏览器对一些已知类型的文件知道怎么读,知道怎么显示,因此从服务器端获取文件的内容之后就直接显示出来的。
  • 早期因为需求并不多,放在服务器上的文件都是编写好的,当浏览器请求该文案的时候,服务器中的处理进程根据配置在制定的目录下寻找浏览器请求的文件。但是随着需求的发展,经常手动更改一个网页文件变得繁琐。有没有一种可能,当服务器收到一个请求时,把必要的参数传递给另- - 一个程序,另一个程序根据参数生成一个页面文件,然后服务器把这个文件返回。例如有个页面需要包含当前时间,不可能每次都手动更改时间。如果写一个shell程序,这个shell程序的工作就是更新指定目录下的指定文件,把当前时间以字符串的形式写入到文件中。当服务器收到请求之后,首先调用这个shell程序,然后将请求的文件返回到浏览器。后面多出来的这个程序可以多种多用,可以是java,可以是python, php等脚本语言,只要能实现动态生成一个文件的语言都可以。

    浏览器的种类多种多用,编程语言也多种多样,他们之间的调用需要有个规范进行约束。所谓的规范,就是说浏览器在调用其他的程序的时候,必须传递那些参数,参数名是什么,值是什么。服务器在调用其他的程序的时候,只要满足指定的参数就可以。这样的一个规范就是CGI,也就是通用网关接口。服务器端按照接口标准进行传参,后端程序接受参数,但是这些参数是不是后端程序真正使用的不一定。如果后端的程序的功能就是向一个文件中写hello world,传递什么参数无所谓,虽然这是没有意义的。
  • cgi 和fastcgi虽然在工作原理上有区别,但是和服务器端的对接都是一样的,都要符合cgi标准。
  • 还有一种需求,在一台服务器上部署多个项目。从端口的角度来说,就是所有的到一个端口的认为是一个项目,另一个端口认为是另一个项目。例如192.168.0.1:80是一个网站,192.168.0.1:81是另一个网站,因为http协议似乎在tcp协议之上的,因此有端口的概念,不同的端口认为是不同的请求。因此当服务器接收到一个请求的时候,需要根据这个请求是从哪个端口来的,到指定的目录去寻找请求的文件。这就是apache2上的虚拟主机的概念,一个虚拟主机就是一个指定的目录,在配置上文件中,每个虚拟主机都指定一个端口,一个根目录。在nginx的配置文件中就是使用server指定声明的一个context。

[随笔][胡思乱想][唠叨][web server]的更多相关文章

  1. Jexus Web Server 完全傻瓜化图文配置教程(基于Ubuntu 12.04.3 64位)[内含Hyper-v 2012虚拟机镜像下载地址]

    1. 前言 近日有感许多新朋友想尝试使用Jexus,不过绝大多数都困惑徘徊在Linux如何安装啊,如何编译Mono啊,如何配置Jexus啊...等等基础问题,于是昨日向宇内流云兄提议,不如搞几个配置好 ...

  2. Flash: An Efficient and Portable Web Server

    Introduction This paper presents the design of a new Web server architecture called the asymmetric m ...

  3. C#中自己动手创建一个Web Server(非Socket实现)

    目录 介绍 Web Server在Web架构系统中的作用 Web Server与Web网站程序的交互 HTTPListener与Socket两种方式的差异 附带Demo源码概述 Demo效果截图 总结 ...

  4. 本机ip+端口不能访问web server,外部却可以访问

    本机ip+端口不能访问web server,外部却可以访问! 这个奇葩的问题困扰了我好久,别人通过ip访问我的server一切正常,自己却访问不了,一度怀疑win10的问题,久寻无果! 最后关闭ads ...

  5. Difference between web server ,web container and application server

    In Java: Web Container or Servlet Container or Servlet Engine : is used to manage the components lik ...

  6. vs默认VS Development Sever和用IIS Web Server的一点差别

    关于VS Development Server(vs调试默认运行环境)和IIS Web Server 做运行服务器时,请求处理的一点区别. 将请求粗略分为两类:静态资源请求和动态资源请求. 静态资源请 ...

  7. [SDK2.2]Windows Azure Virtual Network (4) 创建Web Server 001并添加至Virtual Network

    <Windows Azure Platform 系列文章目录> 在上一章内容中,笔者已经介绍了以下两个内容: 1.创建Virtual Network,并且设置了IP range 2.创建A ...

  8. The Web server is configured to not list the contents of this directory.

    部署一个ASP.NET MVC网站至一个全新的服务器Windows Server 2008 R2, 数据为MS SQL Server 2014 64bit Expression版本. 运行时,它第一次 ...

  9. 【转】推荐介绍几款小巧的Web Server程序

    原博地址:http://blog.csdn.net/heiyeshuwu/article/details/1753900 偶然看到几个小巧有趣的Web Server程序,觉得有必要拿来分享一下,让大家 ...

随机推荐

  1. 后台管理系统之“图片上传” --vue

    图片上传(基于vue) 相信上传图片是所有系统必备的功能吧,工作中的第一个管理系统就在上传图片的功能上卡顿了一整天. 当时用的elementUI组件,但是由于样式和设计图样式差别较大再加上原生相较好理 ...

  2. Oracle 多行变一行

    https://blog.csdn.net/rainyspring4540/article/details/50231521

  3. elasticsearch(2) 数据操作——查询

    一 文档 ES面向文档,并且使用JSON作为文档序列化格式,对于ES来说,文档特指根对象序列化成的JSON数据,以唯一ID标识并存储于ES中. 文档元数据 三个必须的元数据节点 1._index   ...

  4. 精进之路之lru

    原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. 实现1 最常见的实现是 ...

  5. 小试牛刀 WiFi 远控 + wendu

    废话 少说 直接上代码 DH11三根线  信号线 接2 WiFi 模块  r-------t t--------r en&vcc------3.3v 剩下的 共地的啦 double Fahre ...

  6. mybatics 与jpa

    mybatics,dao层接口,mapper: public interface UserMapper { @Select("SELECT * FROM T_ROLE WHERE ROLE_ ...

  7. springboot整合多数据源及事物

    有两种方式:一种是分包的方式.一种是加注解的方式(@DataSource(ref="")). 分包方式:项目结构图如下: 分为com.itmayiedu.test01.com.it ...

  8. learn-ES6基础语法1-let&const

    1.let ① 使用let声明的变量,所声明的变量只能在命令所在的代码块内有效. 同样在代码块内的a和c,c在代码块内就可以输出,a在代码块外就找不到了. ② 使用let命令声明的变量在域解析的时候不 ...

  9. How To Make A Swipeable Table View Cell With Actions – Without Going Nuts With Scroll Views

    How To Make A Swipeable Table View Cell With Actions – Without Going Nuts With Scroll Views  Ellen S ...

  10. jQuery-3.事件篇---自定义事件

    jQuery自定义事件之trigger事件 众所周知类似于mousedown.click.keydown等等这类型的事件都是浏览器提供的,通俗叫原生事件,这类型的事件是需要有交互行为才能被触发. 在j ...