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. 基于.NET平台常用的框架整理<转载>

    转载来自:http://www.cnblogs.com/hgmyz/p/5313983.html 基于.NET平台常用的框架整理   自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大 ...

  2. logging dictconfig

    #coding: utf-8 import logging import logging.config   class SingleLevelFilter(object):     def __ini ...

  3. Problem C: STL——Jerry的问题

    Description 最近Jerry正在刻苦的学习STL中的set的功能函数,他发现set可以用现有的函数实现并.交.差.对称差等功能,但是他没有找到怎么来比较两个集合是否相等的功能函数,所以他想自 ...

  4. SharePoint Framework解决方案管理参考(一)

    博客地址:http://blog.csdn.net/FoxDave 使用SPFx,你的企业可以轻松构建解决方案跟Office 365和SharePoint Online集成.SPFx解决方案基于现代w ...

  5. Linux 系统运行命令 > 查看系统信息

    查看系统运行状态 一 . 查看硬件信息 - 1. cpu信息(可以通过find,whereis,locate查出路径) #cat /proc/cpuinfo 2 . 内存信息:meminfo(可以用c ...

  6. linux bash 命令

    export:显示所有的环境变量,如果你想获取某个变量的详细信息,使用 echo $VARIABLE_NAMEv whereis:使用系统自动构建的数据库来搜索可执行文件,源文件和手册页面 which ...

  7. styled-components的基本使用

    一.官网地址 https://www.styled-components.com/ 二.styled-components 1.styled-components 样式化组件,主要作用是它可以编写实际 ...

  8. WebStorm 安装及使用

    WebStrom 插件安装 File(文件) -> settings(设置) -> Plugins 即可调出设置中的插件选项. 或者 按 快捷键ctrl + alt + s也可调出设置菜单 ...

  9. Windows10 VS2017 C++模拟点击按键

    #include "pch.h" #include <Windows.h> #include <stdio.h> #include <iostream ...

  10. tomcat免安装版做成windows系统服务

    安装服务在命令行中进入/Tomcat路径/bin/,执行“service.bat install”:卸载服务在命令行中进入/Tomcat路径/bin/,执行“service.bat remove”: