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. 阶段02JavaWeb基础day04mysql

    数据库--MySql 数据仓库.就与我们之前学过的纯文本,properties这些技术一样.用来保存数据.并提供对数据进行增删改查的操作.我们以后做项目时,项目中的数据都是保存在数据库中的.//--- ...

  2. hadoop streaming字段排序介绍

    我们在使用hadoop streaming的时候默认streaming的map和reduce的separator不指定的话,map和reduce会根据它们默认的分隔符来进行排序 map.reduce: ...

  3. Ceph Luminous版本创建OSD无法激活问题

    一.问题描述 部署ceph的Luminous之ceph-12.2.10版本,在其中一个集群节点部署OSD时,发现命令执行完毕后,集群中并没有将格式化的盘加入到OSD中,也没有任何报错,问题如下: [r ...

  4. ForkJoinPool 源码

    ForkJoinPool----FJP先看task.fork方法,含义是将当前任务,放到当前线程的工作队列中.但是第一次执行这个方法是在主线程中,主线程是不可能被FJP管理的.那么就进入ForkJoi ...

  5. js★★★【面向对象的使用方法】*****************★★★★ 相当重要

    标准用法: function Sprite(){ //函数内容部设置属性 this.name='shimily'; } //原型上设置方法 Sprite.prototype.show=function ...

  6. 利用toggle实现背包

    1.先创建入如图所示界面 2.在图片下面创建一个选中状态图片 3.在normal图片添加toggle组件,将子物体拖动到graphic里

  7. docker 容器跑一个应用

    虽然是个前端,但是公司比较推崇docker,感觉挺神奇,就也学了一些,再此做个笔记,以供日后回想. 我的想法是在一个centos环境中运行一个nginx服务.docker的安装就不说了,网上已经有好多 ...

  8. loadrunner11浏览器兼容性的问题

    最近项目中遇到了新开发的系统,全是HTML5和一些最新的前端框架技术,由于没有做浏览器兼容处理,所以该系统无法在IE浏览器进行操作,对firefox和google浏览器支持较好.但是又一个问题出现了, ...

  9. SpringBoot统一异常处理

    /** * 异常处理器 */ @RestControllerAdvice // public class BDExceptionHandler { private Logger logger = Lo ...

  10. 阿里云 oss 图片上传解决方案 vue (web直传)

    我们通过aliyun-oss-web这个npm去解决 该文章主要介绍如何获取 imgSignature 和 imgPolicy 这两个参数 首先下载 web直传的案例 : http://files.c ...