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. LINUX安装vm tools及使用方法(centos7,vm12)

    1.安装vmtools: 下载文件之后,到自动挂在的目录下(/run/media/用户名),将文件cp到其他的目录: 然后到其他的目录,解压缩,执行pl文件,执行方式:./vmware-install ...

  2. bootstrap中的.container类定义

    bootstrap中的.container类定义 .container{ padding-right:15px; padding-left:15px; margin-right:auto; margi ...

  3. windows分驱

    步骤/方法   1 鼠标右击“计算机” 2 选择“管理”标签 3 打开“计算机管理”窗口   选择“磁盘“>>”存储管理“,打开”磁盘管理“页面 如图:   右键单击选择要压缩的磁盘(本例 ...

  4. linux - whatis 提示 ls: nothing appropriate

    linux 执行命令 whatis 时,提示: ls: nothing appropriate 原因:whatis是在数据库中执行查找操作,这个数据库是定期更新的, 新安装的系统,系统没有更新,没有这 ...

  5. Type curtilage home

    This year's National Day coincides with the Mid-Autumn festival, the double false merger about eight ...

  6. win10安装pytorch

    安装gpu版本的pytorch需要三个东西:pytorch(torchvision).cuda.cudnn 相信大家都安装过了anaconda,就不介绍anaconda的安装了 1.安装cuda:从官 ...

  7. Java - Java入门(2-1am)

    第一讲.Java入门 1. 计算机语言是人和计算机进行交互的一种工具,人们通过使用计算机语言编写程序来向计算机施令,计算机则执行程序,并把结果输出给用户. 2. 机器语言:由0.1序列构成的指令码组成 ...

  8. 高精度加法——经典题 洛谷p1601

    题目背景 无 题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b] 输入输出格式 输入格式: 分两行输入a,b<=10^500 ...

  9. linux 命令启动Oracle数据库

    首先使用oracle用户登录Linux,然后在shell命令行中执行下面的命令: 第一步:打开Oracle监听lsnrctl start 第二步:进入sqlplussqlplus /nologSQL& ...

  10. Python 3 Anaconda 下爬虫学习与爬虫实践 (2)

    下面研究如何让<html>内容更加“友好”的显示 之前略微接触的prettify能为显示增加换行符,提高可阅读性,用法如下: import requests from bs4 import ...