网站基础:

1.域名:

域名是一个IP地址的“面具” ,目的是便于记忆和访问一个或一组服务器的地址(网站,电子邮件,FTP等)。
www.baidu.com 这是一个完整的FQDN
一个完整的FQDN=主机名+域名
主机名:www
域名:baidu.com

使用域名的原因:是因为IP地址,不容易记


2. 域名解析:

本地HOSTS解析、DNS服务器解析


3. 网站的基本概念:

网站、网页、主页;HTTP、URL、HTML、超链接
Url和uri它俩之间很相似
Url比uri能够更精确的定位到资源,资源位置是绝对路径,uri的资源位置可以是相对路径
url=https://www.baidu.com/

https: 这个是客户端访问服务端所用到的协议
www.baidu.com: 这个是客户端想要访问的服务端域名
/: 这个是客户端访问服务端的具体资源


4.web网站:

有web1.0(以编辑为特征)和web2.0(侧重用户交互)


5.动态页面与静态页面的差别:

1)URL不同:静态页面没有?、动态页面包含?
2)后缀不同(开发语言不同):
静态页面一般以.html/.htm/.xml;
开发在写完页面之后,所写的页面需要部署到服务器上的,在部署页面之前需要在服务器上安装能够解析静态页面的服务(nginx httpd这两类web服务默认只能解析静态页面)

动态页面一般以.php/.asp/.jsp/.pl/.py/.cgi等为后缀
同样动态页面也需要在服务器上部署能够解析动态页面的服务(nginx httpd),还要安装能够解析php页面php服务

3)静态页面的内容是固定的,动态页面的内容会因用户、浏览器、时间、地点等而发生变化。
http://(协议头)cn.bing.com(域名)/(URI资源:路径/文件名):
https://jx.tmall.com/?ali_trackid=2:mm_28347190_2425761_27186547:1512434578_208_1779858597


6.网站传输协议:

http–超文本传输协议,监听的端口为tcp协议的80端口,不加密、https–安全超文本传输协议,监听的端口号是tcp协议的443号端口,加密传输,使用证书加密;


HTTP协议分析:

1.HTTP:

超文本传输协议协议是互联网上应用最为广泛的一种网络协议,协议的核心功能是传输 Web 服务器上的 HTML 页面及其他文件;


2.版本:

http0.9(已过时)、http1.0和http1.1(目前广泛使用)、http2.0(未普及);


3.http协议请求流程:


影响客户端访问web站点的因素:客户端请求的网络I/O;Web服务器请求页面的磁盘I/O;


http请求报文和响应报文

http协议是一个应用层协议,其报文分为请求报文和响应报文
当客户端请求一个网页时,会先通过http协议将请求的内容封装在http请求报文之中,服务器收到该请求报文后根据协议规范进行报文解析,然后向客户端返回响应报文。


http报文结构为:
• 起始行
对报文进行描述
• 头部
向报文中添加了一些附加信息,是一个名/只的列表,头部和协议配合工作,共同决定了客户端和服务器能做什么事情
例如:Content-Length(主体长度),Content-Type(主体类型)等。
• 主体
包含数据的主体部分

请求报文
下面是我用wireshark捕捉到的一个http请求报文,我们来分析一下它。

起始行
在请求报文中,起始行包括了3个部分:

• 请求的方法(POST)
• 请求的URL(/cgi-bin/qqshow_user_props_info)
• 协议类型及版本(HTTP/1.1)

请求方法

在本例中请求的方法是POST,http中请求方法有以下8种(其中比较常用的是GET,POST,HEAD):


1.OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2.HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3.GET
向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
4.POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
5.PUT
向指定资源位置上传其最新内容
6.DELETE
请求服务器删除Request-URL所标识的资源
7.TRACE
回显服务器收到的请求,主要用于测试或诊断
8.CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

其实他们的本质区别是GET是从服务器上请求数据,而POST是向服务器发送数据


头部
以下只列出部分请求报文头部所独有的信息:
Client-IP:提供了运行客户端的机器的IP地址
From:提供了客户端用户的E-mail地址
Host:给出了接收请求的服务器的主机名和端口号
Referer:Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
UA-Color:提供了与客户端显示器的显示颜色有关的信息
UA-CPU:给出了客户端CPU的类型或制造商
UA-OS:给出了运行在客户端机器上的操作系统名称及版本
User-Agent:将发起请求的应用程序名称告知服务器
Accept:告诉服务器能够发送哪些媒体类型
Accept-Charset:告诉服务器能够发送哪些字符集
Accept-Encoding:告诉服务器能够发送哪些编码方式
Accept-Language:告诉服务器能够发送哪些语言
TE:告诉服务器可以使用那些扩展传输编码
Expect:允许客户端列出某请求所要求的服务器行为
Range:如果服务器支持范围请求,就请求资源的指定范围
Cookie:客户端用它向服务器传送数据
Cookie2:用来说明请求端支持的cookie版本


应答报文
和上面一样,下面是我用wireshark捕获到的一个http应答报文

起始行
应答报文的起始行也包含了3个部分
• 协议类型及版本号
• 状态码
• 状态码的文字描述

头部
响应报文首部提供的额外信息:
Age:(从最初创建开始)响应持续时间

Public:服务器为其资源支持的请求方法列表

Retry-After:如果资源不可用的话,在此日期或时间重试

Server:服务器应用程序软件的名称和版本

Title:对HTML文档来说,就是HTML文档的源端给出的标题

Warning:比原因短语更详细一些的警告报文

Accept-Ranges:对此资源来说,服务器可接受的范围类型

Vary:服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端

Proxy-Authenticate:来自代理的对客户端的质询列表

Set-Cookie:在客户端设置数据,以便服务器对客户端进行标识

Set-Cookie2:与Set-Cookie类似

WWW-Authenticate:来自服务器的对客户端的质询列表


访问日志access_log记录了所有对Web服务器的访问活动,下面是访问日志access_log中的一个标准记录
183.202.144.5 - - [13/Apr/2020:14:55:46 +0800] “GET / HTTP/1.1” 200 30 “-” "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0"

日志字段所代表的内容如下:
1.远程主机IP:表明访问网站的是谁 183.202.144.5
2.空白(E-mail):为了避免用户的邮箱被垃圾邮件骚扰,第二项就用“-”取代了
3.空白(登录名):用于记录浏览者进行身份验证时提供的名字。dgf
4.请求时间:用方括号包围,而且采用“公用日志格式”或者“标准英文格式”。 时间信息最后的“+0800”表示服务器所处时区位于UTC之后的8小时。
5.方法+资源+协议:服务器收到的是一个什么样的请求。该项信息的典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。
METHOD: GET、POST、HEAD、……
RESOURCE: /、index.html、/default/index.php、……(请求的文件)
PROTOCOL: HTTP+版本号
6.状态代码:请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请求,一切正常。
7.发送字节数:表示发送给客户端的总字节数。它告诉我们传输是否被打断(该数值是否和文件的大小相同)。把日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。
8.客户端的系统,以及客户端访问服务器的浏览器类型


5.http状态返回状态码:

状态码首位 范围 分类
1xx 100-101 信息提示
2xx 200-206 成功
3xx 300-305 重定向
4xx 400-415 客户端错误
5xx 500-505 服务器错误
常见的状态返回码:
200 ok 301 请求的页面永久跳转 302 临时跳转 403 禁止访问该页面
404 找不到页面 500 服务器内部错误 502 网关错误
503 当前服务不可用 504 网关请求超时

3.查看系统中数据包的状态;

netstat -anto                ##查看系统中所有连接
netstat -ant |awk '/^tcp|^udp/{state[$6]++}END{for(i in state){print i,state[i]}}'      ##统计连接

apache原理讲解:

1.概述:apache作为最早的web服务程序,基于http协议提供网页浏览服务;
2.特点:模块化设置、开放源代码、跨平台应用、支持多种web编程语言、运行稳定;
3.apache的常见三种工作模式:
Apache 的核心模块叫多路处理模块Multi-Processing Module,简称 MPM;
MPM-prefork:多进程模式,一个进程处理一个连接,每个进程相对来讲都是独立的,这个过程会用到select机制来通知;特点:稳定、响应快、消耗大量cpu和内存、不适用于高并发的场景,keep-alive长连接占据问题;
注解:keep-alive长连接-- TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。减少重复请求的次数,进而加快访问速度,实现长连接要客户端和服务端都支持长连接。

MPM-worker:多进程多线程、一个进程开多个线程、每一个线程处理一个连接,但通知机制还是select不过可以接受更多的请求;特点:节省资源、兼容性不好、稳定性不高、适用于高并发场景,keep-alive长连接占据问题;

MPM-event:worker的升级版、把服务器进程和连接进行分离,基于异步I/O模型。请求过来后进程并不处理请求,而是直接交由其他机制来处理,通过epoll机制来通知请求是否完成;在这个过程中,进程本身一直处于空闲状态,可以一直接收用户请求。可以实现一个进程响应多个用户请求。并且event模式对于keep-alive连接处理也有所优化,event模式有单独的线程处理keep-alive长连接,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。特点:支持海量级高并发负载、消耗资源少、但其对https支持的不完美;


总结:

不同模式效率不同,主要用于调优、命令“httpd -V |grep "Server MPM"”查看当前使用模式;

httpd_2.2版本默认的模式为prefork,httpd_2.4版本默认的模式为event;


案例:搭建apache网站服务

实验步骤:

下面是下载软件包的方法



最后直接命令行输入wget 然后把复制的地址粘贴到后面


1.准备环境,上传软件包,并解压编译安装

rpm -e httpd --nodeps
wget http://archive.apache.org/dist/httpd/httpd-2.2.17.tar.gz
tar zxvf httpd-2.2.17.tar.gz -C /usr/src/
cd /usr/src/httpd-2.2.17/
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-cgi  &&  make  &&make install

httpd是高度模块化的程序,各个功能通过加载各个模块来实现。但前提是将功能对应的模块先编译好,以供httpd加载。

httpd对模块有两种编译方式:静态编译和动态编译。
静态编译:将模块直接编译进httpd的核心中。静态编译的所有模块都会随着httpd的启动和启动。
动态编译:将模块编译好,但不编译到httpd的核心中。要启动动态编译的模块,需要在httpd的配置文件中使用LoadModule指令加载。

注解:
–enable-so ##开启动态加载模块的功能
–enable-rewrite ##开启地址重写、重定向功能
–enable-cgi ##开启与一些动态编程语言之间进行交互的接口

注解:
bin:存放命令;
lib:跟httpd相关的库文件
man:帮助文档
modules:模块文件
conf:配置文件存放位置
htdocs:网页存放位置
logs:日志存放文件位置

 [root@localhost httpd-2.2.17]# cd

2.安装后优化调整

ln -s /usr/local/httpd/bin/* /usr/local/bin/    ##优化执行命令的路径

cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
chmod a+x /etc/init.d/httpd

修改启动脚本如下:

vi /etc/init.d/httpd


修改定制配置文件、准备网页文档、并启动服务

vi /usr/local/httpd/conf/httpd.conf
29 ServerRoot "/usr/local/httpd"            #httpd的安装路径
40 Listen 80                             #httpd监听的端口号
65 User daemon                         #启动httpd服务的用户
66 Group daemon                        #启动httpd服务的组
88 ServerAdmin admin@linuxfan.cn       ##修改管理员的邮箱
97 ServerName www.linuxfan.cn:80        ##添加网站的域名
104 DocumentRoot "/usr/local/httpd/htdocs"  #httpd的默认网页存放路径
131 <Directory "/usr/local/httpd/htdocs">       ##此区域标识网页的设置,如限制、认证等...
159 </Directory>
186 ErrorLog "logs/error_log"
193 LogLevel warn
215 CustomLog "logs/access_log" common
:wq

访问顺序:先允许,后拒绝,默认拒绝所有
先拒绝,后允许,默认允许所有

准备网页文档

[root@www ~]# cat <<END > /usr/local/httpd/htdocs/index.html
<html>
<head>
<title>www.linuxfan.com</title>
</head><body>
<h1><span style="color:#3F9; font-size:36px;">www.linuxfan.com</h1>
<p><img src="./linux.jpg" alt="www.linuxfan.com" title="www.linuxfan.com width=700"" height="500" /></p>
</body>
</html>
END

启动服务

 ls /usr/local/httpd/htdocs//etc/init.d/httpd start    ##启动网站服务netstat -utpln |grep httpd

注解:CLOSED          无连接是活动的或正在进行 LISTEN          服务器在等待进入呼叫 SYN_RECV        一个连接请求已经到达,等待确认 SYN_SENT        应用已经开始,打开一个连接 ESTABLISHED     正常数据传输状态/当前并发连接数 FIN_WAIT1       应用说它已经完成 FIN_WAIT2       另一边已同意释放 TIMED_WAIT      等待所有分组死掉 CLOSING         两边同时尝试关闭 TIME_WAIT       另一边已初始化一个释放 LAST_ACK        等待所有分组死掉

客户端访问测试

yum -y install elinks
elinks --dump http://192.168.17.176



继续优化
删除apache的默认页面

然后删掉配置文件里第144行的Indexes

vi /usr/local/httpd/conf/httpd.conf


最后显示下面这个页面就可以了

想要显示出内容,必须跟上文件名称


优化httpd服务:调整其工作模式

1.查看工作模式:

/usr/local/httpd/bin/httpd -V |grep MPM      ##查看工作模式


注:设置httpd的工作模式时,不仅考虑网站的并发连接等工作效率,也要考虑服务器硬件占用情况,内存尤为重点考虑


2.prefork(进程+子进程)模式,默认:


修改配置文件

vi /usr/local/httpd/conf/extra/httpd-mpm.conf


去掉注释让httpd.conf生效

vi /usr/local/httpd/conf/httpd.conf +370


重启服务查看进程

/etc/init.d/httpd  restart
ps aux |grep httpd |grep -v grep         ##一个主进程,五个子进程


3.worker(多进程+多线程)工作模式:


注:如若开启worker工作模式,需要在编译安装时–with-mpm=worker选项指定

当从prefork切换到worker时,重新编译安装时

cd /usr/src/httpd-2.2.17/   ##进入配置目录
./configure --prefix=/usr/local/httpd  --enable-so --enable-rewrite --enable-cgi --with-mpm=worker   ##切换到worker
make clean   ##清空缓存
make && make install   ##重新编译安装

此时已经切换成功

优化参数
vi /usr/local/httpd/conf/extra/httpd-mpm.conf

去掉注释

[root@www ~]# vi /usr/local/httpd/conf/httpd.conf +370
370  Include conf/extra/httpd-mpm.conf
:wq


4.event工作模式:

注:如若开启event工作模式,需要在编译安装时–with-mpm=event选项指定,并且内核版本最低需要2.6

cd /usr/src/httpd-2.2.17/   ##进入配置目录
./configure --prefix=/usr/local/httpd  --enable-so --enable-rewrite --enable-cgi --with-mpm=event   ##切换到event
make clean   ##清空缓存
make && make install   ##重新编译安装

查看工作模式

/usr/local/httpd/bin/httpd -V |grep MPM


可以看到上面 此时已经成功切换为event模式

在配置文件末尾添加参数

vi /usr/local/httpd/conf/extra/httpd-mpm.conf
111 <IfModule mpm_event_module>
112 ServerLimit         1000
113 StartServers         20
114 MinSpareThreads        25
115 MaxSpareThreads      1200
116 ThreadsPerChild      50
117 MaxConnectionsPerChild  1000
118 </IfModule>


去掉注释

[root@www ~]# vi /usr/local/httpd/conf/httpd.conf +370
370  Include conf/extra/httpd-mpm.conf
:wq


动态编译:

./configure  --prefix=/usr/local/httpd --enable-so  --enable-modules=most   --enable-mpms-shared=all

查看模块

/usr/local/httpd/bin/apachectl -D DUMP_MODULES


Web基础与apache讲解与搭建相关推荐

  1. Web基础与apache讲解

    Web基础与apache讲解 一.网站基础: 二.HTTP协议分析: 三.TCP数据包状态分析: 四.apache原理详解: 五.案例:搭建apache网站服务: 一.网站基础: 1.域名:域名是一个 ...

  2. apache虚拟服务器搭建,httpd搭建虚拟主机与Apache网站基础服务

    前言 Apache简介 Apache的主要特点 httpd 服务器的基本配置 搭建httpd虚拟主机 Apache简介: Apache HTTP Server 是开源软件项目的代表,也是世界使用排名第 ...

  3. Web基础(三)Python Web

    文章目录 Python Web基础 1. WSGI 1.1 概述 1.2 实现原理 1.WSGI Server/gateway 2.WSGI Application 3.WSGI MiddleWare ...

  4. 【笔记】网易微专业-Web安全工程师-01.WEB基础知识

    课程概述: 本课是基础中的基础,通俗易懂的讲解了Web的本质和Web开发的基础知识.对于Web小白,建议从头开始抓紧学习:对于已经有一定Web基础知识的同学,建议快速的过一遍,夯实基础. 课程大纲: ...

  5. 2017-2018-2 20155314《网络对抗技术》Exp8 Web基础

    2017-2018-2 20155314<网络对抗技术>Exp8 Web基础 目录 实验内容 实验环境 基础问题回答 预备知识 实验步骤 1 macOS下Apache的配置 2 macOS ...

  6. 跟着王进老师学开发Python篇:基础强化案例讲解-王进-专题视频课程

    跟着王进老师学开发Python篇:基础强化案例讲解-143人已学习 课程介绍         共计27个项目案例+项目源码,跟着王进老师尽情玩转Python解释器! 案例涵盖的内容有:Python程序 ...

  7. 跟着王进老师学开发Python篇:基础入门案例讲解-王进-专题视频课程

    跟着王进老师学开发Python篇:基础入门案例讲解-166人已学习 课程介绍         共计45个项目案例+项目源码,跟着王进老师尽情玩转Python解释器! 本课程涉及Python的基础语法, ...

  8. 视频教程-跟着王进老师学开发Python篇:基础入门案例讲解-Python

    跟着王进老师学开发Python篇:基础入门案例讲解 教学风格独特,以学员视角出发设计课程,难易适度,重点突出,架构清晰,将实战经验融合到教学中.讲授技术同时传递方法.得到广大学员的高度认可. 王进 ¥ ...

  9. 从零开始学WEB前端——前置知识以及环境搭建

    ??项目介绍 先做个自我介绍,本人是一个没人写前端所以就自学前端的后端程序员??.在此项目中我会和大家一起从零基础开始学习前端,从后端程序员的视角来看前端,受限于作者的水平本项目暂时只会更新到前端框架 ...

最新文章

  1. 【kudu pk parquet】TPC-H Query2对比解析
  2. python小项目实例流程-python——房价预测案例(完整项目流程)
  3. 关于递归三要素的理解
  4. 计算机科学对个人而言最大的影响,论材料科学对计算机科学技术的深远影响.doc...
  5. 影响网络OA系统成功实施的技术因素浅析
  6. 酷炫的深色模式APP设计模板|2020设计潮流趋势
  7. #{}不自动改参数类型_我是干流动补胎的,想让我的柴油机气泵自动打气,怎么改装。谢谢。...
  8. 吴恩达神经网络和深度学习-学习笔记-30-相关符号和计算+单层卷积网络+简单卷积网络示例
  9. 【ZooKeeper Notes 5】单机启动多个zk实例注意点
  10. floyd算法_常用十大算法(九)— 弗洛伊德算法
  11. mac怎么给python下载库_关于macos:在Python中安装库
  12. 计算机电路基础答案刘怀望,计算机电路基础
  13. 08_星仔带你学Java之什么是软件开发以及软件开发方式有哪些?
  14. Egret引擎学习笔记
  15. layui修改表格行高
  16. leetcode 给我上了深深的一课,被删掉所有题解后的我感动了
  17. pr模板.mogrt格式安装方法
  18. 如何使用HTML进行一个简单的图文混排
  19. HEXO启动,初始化,本地页面成功启动,(Win 7 64 bit)可以在浏览器打开http://localhost:4000
  20. 苹果正式发布Mac OS X Lion系统

热门文章

  1. Quill编辑器实现图片上传功能
  2. flask学习之4:图片验证码
  3. 赛普拉斯PSoC6正式接入阿里云Link TEE加强物联网应用的安全设计...
  4. 解题记录 LeetCode 下一个更大元素 II 单调栈
  5. linux 群组分类,Linux文件权限与群组修改命令详解
  6. linux删除带用户的群组,Linux账号群组删除等相关操作
  7. 台式计算机用u盘给电脑安装系统,如何在台式计算机上用U盘重新安装Win7系统
  8. 充电池中热敏电阻作用
  9. 作业帮猿辅导们的隐忧:下沉市场真的是在线教育的菜?
  10. 将Excel中的数据导入html以及将html表格数据导出Excel