大家好,又见面了,我是你们的朋友全栈君。
HTTP
对于软件都有服务和客户,有服务端和客户端
服务
就是在操作系统运行一个或者多个程序,并为客户端提供相应所需的服务
协议
就是计算机网络中进行数据交换而建立的规则、标准或约定的集合。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。
1.WEB服务器
web服务器一般指网站服务器,他是一个驻留于Internet的一个计算机程序,用于向浏览器提供文档,网站等信息,也可以在其中放置各种文档数据供世界下载,当然也可以放置文档供世界浏览。
1.1 WWW
环球信息网,又名“万维网”,其可分为Web客户端和Web服务器程序。可以让客户端(常用浏览器)访问浏览Web服务器上的页面。由许多互相链接的超文本组成,通过互联网互相访问。
Internet提供的主要服务有万维网(WWW)、文件传输(FTP)、电子邮件(E-mail)、远程登录(Telnet)、手机 (3GHZ) 等。
1.2 Http
(HyperText Transfer Protocal)超文本传输协议,是互联网上最广泛的一种网络协议,所有的www文件都必须遵守这个标准。
它使得浏览器的传输访问更高效,使网络传输减少。
1.3 网页、网页文件和网站
网页是网站的基本信息单位,是组成WWW的基本文档。由文字、图片、动画、声音等多种媒体信息以及链接组成,用HTML编写,通过链接实现与其他网页或网站的关联和跳转。
网页文件是用HTML(标准通用标记语言下的一个应用)编写的,在WWW上传输,能被浏览器识别显示的文本文件。其扩展名是.htm和.html。
网站由众多不同内容的网页构成,网页的内容可体现网站的全部功能。通常把进入网站首先看到的网页称为首页或主页(homepage)
1.4 apache
是一种当今流行的linux Web服务器,起初由Illinois大学Urbana-Champaign的国家高级计算程序中心开发,后来Apache被开放源代码团体的成员不断地发展和加强。
1.5网站架构lamp
lamp=Linux+apache+mysql+php\python\jsp\perl
静态网页:html
动态网页 : 和后台数据库实现一些交互 php jsp python perl …
本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,该软件开发的项目在软件方面的投资成本较低,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案。
访问标准:通过访问ip地址及端口号访问服务器
2.HTTP协议运行原理
HTTP报文结构
请求报文由请求行,请求头部,空行和请求数据组成
如下图
1).请求行
请求行分为三个部分:请求方法、请求地址和协议版本
请求方法
请求地址
URL:统一资源定位符,是一种自愿位置的抽象唯一识别方法。
端口和路径有时可以省略(HTTP默认端口号是80)
如下例:
协议版本
协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1
2).请求头部
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。
请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据,这一行非常重要,必不可少。
3).请求数据
可选部分,比如GET请求就没有请求数据。
下面是一个POST方法的请求报文:
POST /index.php HTTP/1.1 请求行
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 请求头
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/
Content-Length:25
Content-Type:application/x-www-form-urlencoded
空行
username=aa&password=1234 请求数据
HTTP响应
代理服务器: S和C之间的访问实体
缓存服务器: 特殊的代理服务器
网关服务器: 一个http/FTP网关服务器C—http — 8080 (FTP<–>HTTP )—–S FTP
<源ip地址><源端口号> <目标ip地址><端口>
HTTP关键字段
UA字段
SERVER字段
Referer字段
HTTP重定向
Session
Session是可以存储针对于某一个用户的浏览器以及通过其当前窗口打开的任何窗口具有针对性的用户信息存储机制。 通常大家认为,只要关闭浏览器,session就消失,其实这是错误的理解。对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留。由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间.
(1)第一次访问某个web站点资源时,客户端提交没有带SessionID的请求(请求报文头没有Cookie头域信息)。 而web服务器会检查是否有SessionID过来,没有则创建SessionID,并根据web程序自身定义在请求哪个资源时添加属于当前会话的信息(也可为空),这个信息列表以SessionID作为标识。然后将SessionID返回给客户端(通过响应报文头的Set-Cookie头域)。 (2 )客户端再次访问同个web站点时,提交带有SessionID的请求(通过Cookie头域存储SessionID)。由服务端判断session是否失效,如果未失效,可查询属于当前会话的信息列表。如果失效,则创建新的session(产生新的SessionID),而原先的session(包含session带的信息列表)则丢失,无法访问。
Cookie
Cookie 保存SessionID的方式可以采用Cookie,这样在交互过程中浏览器可以自动的按照规则把这个SessionID发回给服务器。Cookie的命名方式类似于SessionID。有时Cookie被人为的禁止,所以出现了其他机制以便在Cookie被禁止时仍然能够把SessionID传递回服务器。这种技术叫做URL重写,就是把SessionID直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://www.wantsoft.com/index.asp;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 。 另一种是作为查询字符串附加在URL后面,表现形式为http://www.wantsoft.com/index?js … 99zWpBng!-145788764 。
软件安装
[root@imoemoe ~]# yum install httpd 安装http服务器
[root@imoemoe ~]# systemctl stop firewalld 关闭防火墙
[root@imoemoe ~]# setenforce 0 关闭selinux防火墙
[root@imoemoe ~]# mkdir /{xixi,haha} 创建文件夹
[root@imoemoe ~]# mkdir /usr/local/hehe 创建虚拟目录文件夹
[root@imoemoe ~]# mkdir /xixi/100 创建用户名登陆的虚拟目录
[root@imoemoe ~]# echo ‘嘻嘻’ > /xiaopang/100/index.html
[root@imoemoe ~]# echo ‘我是嘻嘻’ > /xiaopang/index.html
[root@imoemoe ~]# echo ‘哈哈’ > /dapang/index.html
[root@imoemoe ~]# echo ‘虚拟目录’ > /usr/local/hehe/index.html
vim /etc/httpd/conf.d/httpd.conf ——编写主配置文件
ServerName 0.0.0.0:80
vim /etc/httpd/conf.d/vhosts.conf ——编写辅助配置文件
<Directory /xixi> ——设置xixi目录
AllowOverride none ——允许覆盖
Require all granted ——设置访问目录权限
</Directory>
<Directory /haha> ——设置haha目录
AllowOverride none
Require all granted
</Directory>
<Directory /usr/local/hehe> ——设置hehe目录
AllowOverride none
Require all granted
</Directory>
Listen 10000 ——监听10000端口
<VirtualHost 192.168.10.100:80> 端口号必须写
DocumentRoot /xixi/100 ——指定当前主机访问网站根目录
ServerName 192.168.10.100 ——指定访问网站名称
</VirtualHost>
<VirtualHost 192.168.10.100:80>
DocumentRoot /xixi
ServerName www.xixix.com ——基于域名寻址
ErrorLog “/var/log/httpd/dummy-host2.example.com-error_log” ——错误日志
CustomLog “/var/log/httpd/dummy-host2.example.com-access_log” common ——访问日志
</VirtualHost>
<VirtualHost 192.168.10.100:80>
DocumentRoot /haha
ServerName www.haha.com
Alias /hehe /usr/local/hehe
ErrorLog “/var/log/httpd/dummy-host2.example.com-error_log”
CustomLog “/var/log/httpd/dummy-host2.example.com-access_log” common
</VirtualHost>
<VirtualHost *> ——如想表示所有主机则使用 * 号
[root@imoemoe ~]# systemctl restart httpd
[root@imoemoe ~]# vim /etc/hosts
192.168.10.100 www.xixi.com
192.168.10.100 www.haha.com
[root@imoemoe ~]# curl http://192.168.10.100
嘻嘻
[root@imoemoe ~]# curl http://www.haha.com
哈哈
[root@imoemoe ~]# curl http://www.haha.com/hehe/
虚拟目录
[root@imoemoe ~]# curl http://www.xixi.com
我是嘻嘻
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140369.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...