Linux运维学习笔记之十二:http协议和www服务

本文详细介绍了HTTP协议和WWW服务的基础知识,包括HTTP协议的请求工作流程、客户端和报文格式,以及www服务的访问流程。讲解了用户从输入网址到浏览器显示内容的完整步骤,并探讨了HTTP客户端、HTTP报文结构、网页分类和特点。此外,还涵盖了Apache服务器的安装、配置和日志管理,包括虚拟主机配置、日志轮询工具的使用以及日志分析技巧。文章最后讨论了如何隐藏Apache服务器的版本信息,以增强服务器安全性。
摘要由CSDN通过智能技术生成

第二十一章 http协议和www服务

一、http协议和www服务基础
1、HTTP协议简介

HTTP协议,全称为HyperText Transfer Protocol,中文名为超文本传输协议,是互联网中最常用的一种网络协议。 HTTP的重要应用之一是WWW服务。设计HTTP协议最初的目的就是提供一种发布和接收HTML(一种页面标记语言)页面的方法。HTTP协议是互联网上常用的通信协议之一。它有很多的应用,但最流行的就是用于Web浏览器和Web服务器之间的通信,即WWW应用或称Web应用。

2、WWW服务简介

www服务全称为World Wide Web,常称为Web,中文译为“万维网”。它是目前互联网上最受用户欢迎的信息服务形式。HTTP协议的WWW服务应用的默认端口为80,另外一个加密的WWW服务应用https的默认端口为443,主要用于网银、支付等和钱相关的业务。当今,HTTP服务、WWW服务、Web服务三者的概念已经混淆了,在本文中也视为相同,都是指当下最常见的网站服务应用。

3、用户访问网站流程
(1)第一步:

客户端用户在浏览器中输入www.baidu.com网站地址回车后,系统首先会查找系统本地的DNS缓存及hosts文件信息,确认是否存在www.baidu.com对应的域名ip解析记录如果有就直接获取IP地址,然后去访问这个IP地址对应域名www.baidu.com的服务器。一般第一次请求时,DNS缓存是没有解析记录的,而hosts文件多在内部临时测试使用。

(2)第二步:

如果客户端本地DNS缓存及hosts文件没有www.baidu.com域名对应的解析记录,那么,系统会把浏览器的解析请求发送给客户端本地设置的DNS服务器地址(通常称此DNS为LDNS,即local DNS)解析,如果LDNS服务器的本地缓存有对应的解析记录就会直接返回IP地址给客户端,如果没有,则LDNS会负责继续请求其他的DNS服务器。

(3)第三步:

LDNS从DNS系统的(.)根开始请求对www.baidu.com域名的解析,并针对各个层级的DNS服务器系统进行一系列的查找,最终会查找到baidu.com域名对应的授权DNS服务器,而这个授权DNS服务器正是企业购买域名时用于管理域名解析的服务器,这个授权服务器会有www.baidu.com对应的IP解析记录。如果此时没有,就表示企业的域名管理人员没有为www.baidu.com域名做解析设置,即网站还没有架设好。

(4)第四步:

baidu.com域名的授权DNS服务器会把www.baidu.com最终IP解析记录(例如1.1.1.1)发给LDNS

(5)第五步:

LDNS把来之授权DNS服务器www.baidu.com对应的IP解析记录发给客户端浏览器,并且他会把该域名和IP对应的解析缓存起来,以便下一次更快的返回相同的解析请求的记录。这些缓存在指定的时间(DNS TTL 值控制)内不会过期。

(6)第六步:

客户端浏览器获取了www.baidu.com的对应IP地址,接下来,浏览器会请求IP地址对应的网站服务器,网站服务器收到客户的请求并响应处理(此处的处理可能是数百台集群的服务器系统,也可能是一台云主机)将客户请求的内容返回给客户端浏览器。至此,一次访问浏览器的完整过程就完成了。

(7)提示:

上述仅仅是客户端用户第一次访问网站的基本过程,连续访问后,系统本地和LDNS层级都会有缓存记录,再访问时流程就会有些变化,会直接取本地缓存记录,这样访问过程就很快了。

4、HTTP协议请求的工作流程

(1)终端客户在Web浏览器地址栏输入访问地址http://www.etiantian.org/index.html。

(2)Web浏览器请求DNS服务器把域名www.etiantian.org转换成Web服务器的IP地址,此处的解析过程就是DNS解析的原理流程,前面已经讲过了,此处不再赘述。

(3)Web浏览器将端口号(默认是80)从访问地址(URL)中解析出来。

(4)Web浏览器通过解析后的IP地址及端口号与Web服务器之间建立一条TCP连接。

(5)建立TCP连接后,Web浏览器向Web服务器发送一条HTTP请求报文。请求报文

(6)Web服务器读取并响应浏览器的请求信息,然后返回一条HTTP响应报文。响应报文除了有html页面外,还包括对象、对象类型、对象长度等header信息

(7)Web服务器关闭HTTP连接,关闭TCP连接,Web浏览器显示访问的网站内容到屏幕上。

5、HTTP客户端

最常见的是Web浏览器:IE、Firefox、Chrome等

6、HTTP报文格式
(1)HTTP 请求报文

HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成,如下图所示:

a、请求行

请求行由方法字段、URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开。常用的 HTTP 请求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;

(i)GET

当客户端要从服务器中读取某个资源时,使用GET 方法。GET 方法要求服务器将URL 定位的资源放在响应报文的数据部分,回送给客户端,即向服务器请求某个资源。使用GET方法时,请求参数和对应的值附加在URL 后面,利用一个问号(“?”)代表URL 的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。

(ii)POST

当客户端给服务器提供信息较多时可以使用POST 方法,POST 方法向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理。GET 一般用于获取/查询资源信息,POST 会附带用户数据,一般用于更新资源信息。POST 方法

b、请求头部Header(HTTP request header )

将请求参数封装在HTTP 请求数据中,以名称/值的形式出现,可以传输大量数据;

请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头Header(HTTP request header ) 有:

  User-Agent:产生请求的浏览器类型;

  Accept:客户端可接受的响应内容类型列表;星号 “ * ” 用于按范围将类型分组,用“ */* ”指示可接受全部类型,用“ type/* ”指示可接受 type 类型的所有子类型;

  Accept-Language:客户端可接受的自然语言;如gzip,deflate 

  Accept-Encoding:客户端可接受的编码压缩格式;

  Accept-Charset:可接受的应答的字符集;

  Host:请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机;

  connection:连接方式(close 或 keepalive);

   Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie;

c、空行

最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头;

d、请求包体

请求包体不在 GET 方法中使用,而是在POST 方法中使用。POST 方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型Content-Type 和包体长度Content-Length;

(2)HTTP 响应报文

HTTP 响应报文由状态行、响应头部、空行 和 响应包体 4 个部分组成,如下图所示:

 

a、状态行:

状态行由 HTTP 协议版本字段、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开;

(i)状态码

 状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:

  1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;

  2xx:表示服务器已成功接收到请求并进行处理;

  3xx:表示服务器要求客户端重定向;

  4xx:表示客户端的请求有非法内容;

  5xx:表示服务器未能正常处理客户端的请求而出现意外错误;

(ii)状态码描述文本取值

  200 OK:表示客户端请求成功;

  301 MovedPermanently:表示请求的网页永久跳转的新位置

  400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解;

  401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;

  403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;

  404 Not Found:请求的资源不存在,例如,输入了错误的URL;

  500 InternalServer Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;

  502 Bad Gateway:一般是网关服务器请求服务器时,后端服务器没有按http协议正确返回结果;

  503 ServiceUnavailable:表示服务器当前不能够处理客户端请求,一段时间之后,服务器可能会恢复正常;

  504 GatewayTimeout:网关操时;

b、响应头部Header(response header) 

  Location:Location响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源;

  Server:Server 响应报头域包含了服务器用来处理请求的软件信息及其版本。它和 User-Agent 请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户端软件(浏览器)和操作系统的信息。如Apache/2.2.6 

  Vary:指示不可缓存的请求头列表;

  Connection:连接方式;

  对于请求来说:close(告诉 WEB 服务器或者代理服务器,在完成本次请求的响应后,断开连接,不等待本次连接的后续请求了)。keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求);

  对于响应来说:close(连接已经关闭); keepalive(连接保持着,在等待本次连接的后续请求); Keep-Alive:如果浏览器请求保持连接,则该头部表明希望WEB 服务器保持连接多长时间(秒);例如:Keep-Alive:300;

WWW-Authenticate:WWW-Authenticate响应报头域必须被包含在401 (未授权的)响应消息中,这个报头域和前面讲到的Authorization 请求报头域是相关的,当客户端收到 401 响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了Authorization 报头域的请求;
  Date 服务器端时间 
  Etag 文件标识符 
  Content-Encoding传送启用了GZIP压缩 gzip 
  Content-Length 内容长度 
  Content-Type 内容类型

c、空行

最后一个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。

d、响应包体

服务器返回给客户端的文本信息;

(3)示例

a、下载网页

wget www.baidu.com

b、查看网页代码

curl www.baidu.com

c、获取网页响应报文头

curl -I www.baidu.com

HTTP/1.1 200 OK

Server: bfe/1.0.8.18

Date: Mon, 27 Feb 2017 14:41:56 GMT

Content-Type: text/html

Content-Length: 277

Last-Modified: Mon, 13 Jun 2016 02:50:33 GMT

Connection: Keep-Alive

ETag: "575e1f79-115"

Cache-Control: private, no-cache, no-store, proxy-revalidate,no-transform

Pragma: no-cache

Accept-Ranges: bytes

7、网页分类及特点
(1)静态网页

a、每个静态网页都有一个因定的URL,且URL一般以html、htm、shtml等常见后缀,而且地址中不含"?"或"&"。

b、静态网页一经发布,是实实在在保存在服务器上的文件,每个静态网页对应一个独立的文件。

c、静态网页的内容相对稳定,容易补充搜索引擎收录。

d、静态网页没有数据库支持,在制作和维护方面工作量较大,当网站信息量很大时,完全依靠静态网页制作方式比较困难。

e、静态网页的交互性较差,在功能方面有很大限制。

f、静态网页是在客户端解析,效率高。并且服务器不进行解析,直接返回数据,所以可以接受更多的并发访问。

(2)动态网页

a、程序在服务端解析,一般以数据库为基础,可以大量的和用户交互

b、URL地址后缀一般为jsp、asp、aspx、do、cgi、php、perl等,并常伴随"?"或"&"。

c、架构设计要优化好(系统架构师和程序架构师的职责)。动态网页的效率很差,并发也很低,静态:动态比一般在10:1,所以尽可能的转换成静态网页提供服务。

(3)伪静态网页

a、将动态网页伪装成静态网页

b、目的是便于搜索引擎招录,提升用户访问量及用户体验

c、由于仅仅是伪装,实际上还是动态,性能没有提升,但因转换而消耗资源,因此性能反而下降

d、尽可能转换成真正的静态页面,除非并发量不是很大。可以用rewrite实现伪静态,rewrite是一个模块,一般web服务器都支持

8、WEB架构优化方案

由于静态程序在客户端解析,大大降低了服务器端的压力,因此解析效率更高。在实际高并发网站架构中,可以考虑把用户请求的数据解析后存成静态文件放于磁盘中或放于内存中。来降低动态服务器的压力,从而提升用户体验。

高并发网站架构从动态转静态不用业务产品实现的例子:

(1)门户新闻业务(一旦发布完成,几乎不会改动)

对于新闻业务静态化相对比较简单,在发布新闻时就可以生成静态文件,然后把静态内容同步到所有服务器节点上,提供访问。

(2)视频网站业务(一旦发布完成,几乎不会改动)

用户上传视频后,需经历审核、转码的过程,大概1-2小时,审核-转码-推送(同步到全国所有CDN节点)。

(3)blog/bbs/sns/微博社区业务/电商(淘宝、京东等)(用户发布后,可能会随时更新)

一般使异步、消息中间件、消息队列

见参考博文11:浅谈千万级PV/IP规模高性能高并发网站架构。

9、PV、IP和UV
(1)IP(独立IP数)

IP可以理解为独立IP的访问用户,指1天内使用不同IP地址的用户访问网站的数量,同一IP无论访问了几个页面,独立IP数均为1。但是假如说两台机器访问而使用的是同一个IP,那么只能算是一个IP的访问。

使用独立IP数来度量网站访问量,不是很精确。因为国内的上网多数都时NAT上网的,一个独立IP背后可能为数十上百个客户端访问。

(2)PV(page view,页面浏览量或点击量)

PV通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。用户每1次对网站中的每个网页访问均被记录1次。网页浏览数是评价网站流量最常用的指标之一,简称为PV。监测网站PV的变化趋势和分析其变化原因是很多站长定期要做的工作。 Page Views中的Page一般是指普通的html网页,也包含php、jsp等动态产生的html内容。来自浏览器的一次html内容请求会被看作一个PV,逐渐累计成为PV总数。

PV是网站被访问的页面数据量的一个指标,但没法估算有多少人访问。

(3)UV(unique visitor,独立访客数)

UV指访问某个站点或点击某个网页的不同IP地址的人数。但统计的是客户端(PC或移动端)的数量。在同一天内,UV只记录第一次进入网站的具有独立IP的访问者,在同一天内再次访问该网站则不计数。UV提供了一定时间内不同观众数量的统计指标,而没有反应出网站的全面活动。通过IP和cookie是判断UV值的两种方式。

  用Cookie分析UV值:

当客户端第一次访问某个网站服务器的时候,网站服务器会给这个客户端的电脑发出一个Cookie,通常放在这个客户端电脑的C盘当中。在这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值