HTTP笔记1
传输层:提供进程地址
TCP:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路。端口号:0-65535
UDP:用户报文协议,无连接的协议。端口号:0-65535
IANA(互联网数字分配机构)
0-1023:知名端口,永久的分配给固定的应用使用,特权端口,22/TCP(SSH),80/TCP(HTTP),443/TCP(HTTPS),53/TCP|UDP(DNS),21/TCP(FTP)等。
1024-41951:亦为注册端口,单要求并不严格分配给程序注册为某应用使用,11211/TCP, 11211/UDP (memcached), 3306/TCP(MySQL)等。
41952-65535:客户程序随机使用的端口;动态端口,或私有端口,其范围的定义:/proc/sys/net/ipv4/ip_local_port_range
Socket:IPC(进程间通信)的另一种实现,允许位于不同主机(甚至同一主机)上不同的进程之间进行通信,数据交换,Socket API, 1983年,4.2 BSD。
SOCK_SREAM:TCP套接字
SOCK_DGRAM:UDP套接字
SOCK_RAW:裸套接字
IPv4地址分类:
IPv4共分为5大类:
A类:1.0.0.0-126.255.255.255,netmask:8,每个网络有2^24-2个可用IP
B类:128.0.0.0-191.255.255.255,netmask:16,每个网络有2^16-2个可用IP
C类:192.0.0.0-223.255.255.255,netmask:24,每个网络有2^8-2个可用IP
D类:224.0.0.0-239.255.255.255,组播
E类:240.0.0.0-255.255.255.255,科研等其他用途
私有IP:
A:10.0.0.0/8
B:172.16.0.0/16-172.16.31.0.0/16
C:192.168.0.0/24-192.168.255.0/24
本地环回地址:
127.0.0.0/8
TCP协议特性:
建立连接:三次握手
将数据打包成段:校验和(CRC-32)
确认、重传以及超时;
排序:逻辑排序
流量控制:滑动窗口算法
拥塞控制:慢启动和拥塞避免算法
Socket Domain:指明通信的“域”(范围),我们是在IPv4还是IPv6这个范围内通信,也就决定了我们通信的地址是IPv4格式还是IPv6格式。
AF_INET:Adress Family,IPv4
AF_INET6:Adress Family,IPv6
AF_UNIX:同一主机上不同进程之间通信时使用。
每类套接字都至少提供了两种socket:流、数据报。
流:可靠的传递,面向连接,无边界。
数据报:不可靠的传递、有边界、无连接。
套接字相关的系统调用:
socket():创建一个套接字
bind():绑定
listen():监听
accept():接收请求
connet():请求连接建立
write():发送
read():接收
send(), recv(), sendto(), recvfrom()
HTTP:hpyer text transfer protocol(超文本传输协议),80/TCP
html:编程语言,超文本标记语言
- <html>
- <head>
- <title>TITLE</title>
- </head>
- <body>
- <h1>这是一个标题</h1>
- <p>这是一个段落</p>
- <a href=https://www.baidu.com>这是一个连接</a>
- </body>
- </html>
CSS:Cascading Style Sheet,层叠样式表
js:javascript
MIME:Multipurpose Internet Mail Extesion,多用途互联网邮件扩展协议,参考连接:https://baike.baidu.com/item/MIME/2900607?fr=aladdin
工作机制:参考http://blog.csdn.net/hguisu/article/details/8680808
http请求
http响应
Web资源:web resource
静态文件:.jpg .gif .html .txt .js .css .mp3 .mp4
动态文件:.php .jsp...
媒体:
媒体类型(MIME类型):major/minor
text/html
text/plain
image/jpeg
image/gif
URI:Uniform Resource Identifier,统一资源标识符。
URL:Uniform Resource Locator,统一资源定位符,用于描述某服务器特定资源的位置
Scheme://Server:port/path/to/resoource
http://www.magedu.com/images/logo.jpg
URN:Uniform Resource Nameing,统一资源名称,目前较少使用
http的协议版本
HTTP/0.9:原型版本,功能简陋
HTTP/1.0:第一个被广泛使用的版本,支持MIME.
HTTP/1.1:在1.0的版本上改良了某些特性,如增强了缓存功能。
HTTP/2.0:HTTP/NG下一代的HTTP
一次完整的http请求处理过程:
1.建立或处理连接;接收请求或拒接请求。
2.接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程。
并发访问相应模型(Web I/O):
单进程I/O结构:启动一个进程处理用户请求,一次只能处理一个,多个请求被串行响应;
多进程I/O结构:并行启动多个进程,每个进程响应一个请求;
复用I/O结构:一个进程响应N个请求;
多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;
事件驱动:event-driven;
复用的多进程I/O结构:启动M个进程,每个进程响应N个请求;
3.处理请求,对请求报文进行解析,并获取请求的资源及请求方法等相关信息。
元数据:请求报文首部
<method><URL><VERSION>
Host:www.baidu.com 请求的主机名称
Connection:
4.访问资源:获取请求报文中请求的资源。
web服务器即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态生成的资源;这些资源放置域本地文件某路径下,此路径通常称之为DocRoot.
/www/var/html/
images/1.jpg
http://www.magedu.com/images/1.jpg
web服务器资源路径映射方式:
a.docroot
b.alias
c.虚拟主机docroot
d.用户家目录docroot
5.构建响应报文
资源的MIME类型:
显示分类
魔法分类
协商分类
URL重定向:web服务器构建的响应并非客户端请求的资源,而是另外一个访问路径下的资源。
6.发送响应报文
7.记录日志
http服务器程序
httpd
nginx
lighttpd
应用程序服务器:
IIS
Tomcat,Jetty,Jboss,Resin
Webshpere,Weblogic,oc4j
www.netcraft.com (查看各程序的使用主机量占比)
httpd的安装配置和使用:
httpd:apache
a patchy server =apache
ASF:apache software foundation(Apache软件基金会)
httpd的特性:
高度模块化:core+modules
DSO:Dynamic Shared Object
MPM:Multipath Processing Modules(多道处理模块)
prefork:多进程模型,每个进程响应一个请求;一个主进程负责生成N个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达,最大不会超过1024个。
worker:多线程模型,每个线程响应一个请求;一个主进程生产多个子进程,每个子进程负责生成多个线程,每个线程响应一个请求。
m进程,n线程:m*n个请求
event:事件驱动模型,每个线程响应N个请求;一个主进程生成m个子进程,每个进程字节n个请求
httpd-2.2:event为测试使用
httpd-2.4:event可生产使用
httpd的功能特性:
虚拟主机
IP、Port、FQDN
CGI:Common Gateway Interface,通用网关接口
反向代理
负载均衡
路径别名
丰富的认证机制:basic|digest
支持第三方模块
CentOS 6:
程序环境:
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服务脚本:
/etc/rc.d/init.d/httpd
配置文件:/etc/sysconfig/httpd
主程序文件:
/usr/sbin/httpd
/usr/sbin/httd.event
/usr/sbin/httpd.worker
日志文件目录:/var/log/httpd/
access_log:访问日志
error_log:错误日志
站点文档目录:/var/www/html
模块文件路径:/uar/lib64/httpd/modules
配置文件组成:
~]# grep "Section" /etc/httpd/conf/httpd.conf
### Section 1: Global Environment /*全局环境变量*/
### Section 2: 'Main' server configuration/*中心主机配置*/
### Section 3: Virtual Hosts/*虚拟主机配置*/
配置格式:directive value
directive:不区分字符大小写
value:为路径时,取决于文件系统
常用配置:
1.修改监听的IP和Port:Listen [IP:]PORT(省略IP表示监听本机所有IP;Listen可以重复出现多次)
2.持久连接:Persistent Connection;连接建立,每个资源获取完成后不会断开连接,而是继续等待其他的请求完成;
如何断开:1.数量限制 100,2.时间限制:可配置
副作用:对并发访问量较大的服务器,持久连接功能会使有些请求得不到响应。
折中:使用较短的持久连接;(httpd-2.4支持毫秒级的持久时间)
非持久连接:每次发起请求是都需要进行三次握手和四次断开。
KeepAlive On|Off --开启或关闭持久连接
MaxKeepAliveRequests # --最大连接数
keepAliveTimeout # --持久连接保持时间
3.MPM:prefork|worker|event
http-2.2不支持同时编译多个模块,只能编译时选定一个;rpm安装的包提供了三个二进制程序文件,分别用于实现对不同的MPM机制的支持;确认方法为:pa aux | grep httpd
默认为/usr/sbin/httpd,其使用prefork
查看模块列表:
查看静态编译的模块:
- # httpd -l
- Compiled in modules:
- core.c
- prefork.c
- http_core.c
- mod_so.c
查看静态编译及动态装载模块:
- httpd -M
更换使用的httpd程序:/etc/sysconfig/httpd/ 修改"HTTPD="的值重启即可。
- #prefork的配置
- <IfModule prefork.c>
- StartServers 8
- MinSpareServers 5
- MaxSpareServers 20
- ServerLimit 256
- MaxClients 256
- MaxRequestsPerChild 4000
- </IfModule>
- #worker的配置
- <IfModule worker>
- StartServers 4
- MaxClients 300
- MinSpareThreads 25
- MaxSpareThreads 75
- ThreadsPerChild 0
- </IfModule>
PV,UV:PV:Page Vies:页面浏览量;UV:User View,用户浏览量(独立IP量)
4.DSO
配置指令实现模块加载:LoadModule <mod_name> <mod_path>
模块路径可使用相对地址:1.相对于ServerRoot(/etc/httpd)指向的路径而言:/etc/httpd/modules
5.定义'Main' server的文档页面路径,DocumentRoot
文档路径映射:DocumentRoot指向的路径为URL路径的启始位置:DocumentRoot "/var/www/html"
test/index.html -->http://HOST:PORT
/test/index.html
6.站点访问控制:可基于两种类型的路径指明对哪些资源进行访问控制
文件系统路径:
<Directory ""> </Directory>
<File ""> </File>
<FileMatch ""> </FileMatch>
URL路径
<Location ""> </Location>
...
7.Directory中“基于来源地址”实现访问控制
1.Options:所有可用特性:Indexes Includs
FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
None,ALL
Indexes:索引
FollowSymlinks:运行跟踪符号链接文件
2.基于来源地址的访问控制机制
Order:检测次序
Order allow,deny
Order deny,allow
Allow from IPaddr
Deny from ipaddr
来源地址:
1.IP
2.NetAddr:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
8.定义默认主页面:DirecotryIndex index.html index.html.var
9.日志设定:
错误日志:ErrorLog logs/error_log
Loglevel warn(日志级别):debug info notice warn error crit alert emerg
访问日志:CustomLog logs/access_log combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"{User-Agent}i\"" combined
%h:客户端IP地址
%l:Remote logname(from identd,if supplied),远程登录名,-表示为空
%u:Remote user,(from auth;may be bogus if return status (%s) is 401);
%t:Time the request was received(standard english format),服务器收到请求的时间
%r:First line of request,请求报文的首行信息(method url version)
%>:响应状态码
%b:响应报文的大小,单位是字节,不包括响应报文的首部;
%{Referer}i:请求报文当中“referer”首部的值;当前资源的访问入口,及从哪个页面中的超链接跳转而来。
%{User-Agent}i:请求报文当中“User-Agent”首部的值;即发出请求用到的应用程序。
参考连接:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
10.路径别名
DocumentRoot "/www/htocs"
http://www.magedu.com/download/
bash-4.4.2-3.el6.x86_64.rpm
-->/www/htdocs/download/
bash-4.4.2-3.el6.x86_64.rpm
Alias /URL/ "/PATH/TO/SOMEDIR/"
Alias /bbs/ "/forum/htdocs"
http://www.magedu.com/bbs/index.html
-->/forum/htdocs/bbs/
11.设定默认字符集
AddDefaultCharset UTF-8
GBK,GB2312,GB18030
12.基于用户的访问控制
认证质询:WWW-Authenticate,响应码为401,拒绝客户端请求,并说明要求客户提供账号和密码;
认证:Authorization,客户端用户填入账号和密码后再次发送请求报文认证通过,则服务器发送响应的资源;
认证类型:1.basic 明文 2.digest,消息摘要
安全域:需要用户认证后方能访问的路径,应该通过名称对其进行标识,并用于告知用户认证的原因;
用户的账号和密码存储于位置:
虚拟账号:仅用于访问某服务器时用到的认证标识
存储:文本文件、SQL数据库、LDAP、NIS
basic认证:
1.定义安全域
<Directory "">
Options None
AllowOverride None
AuthTye Basic
AuthName "STRING"
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
Require user username1 username2
......
</Directory>
允许账号文件中的所有用户登录访问:
Require valid-user
2.提供账号和密码存储(文本文件)
使用htpasswd命令进行管理
htpasswd [option] passwordfile username
-c:自动创建passwordfile,因此仅应该在添加第一个用户时使用
-m:md5加密用户密码
-s:sha1加密用户密码
-D:删除指定用户
3.实现基于组进行认证:
<Directory>
Options None
AllowOverride None
AuthType Basic
AuthName "STRING"
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"
Require group GROUP1 GROUP2
</Directory>
要提供:用户账号文件和组文件
组文件:每一行第一一个组
GRP_NAME:user1 user2 user3
示例:
<Dircectory "/www/htdocs/admin">
Options None
AllowOverride None
AuthType Basic
AuthName "Administrator private"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
AuthGroupFile "/etc/httpdconf.d/.htgroup"
Require group webadmin
</Directory>
13.虚拟主机
有三种实现方案:
基于IP:为每个虚拟主机准备至少一个IP地址
基于PORT:为每个虚拟主机准备至少一个专用port;实践中很少使用
基于hostname:为每个虚拟主机准备至少一个专用的hostname;
可混合使用上述三种方式中的任意方式。
注意:一般虚拟主机莫与中心主机很用,所以要使用虚拟主机,先禁用中心主机;方法:注释DocumentRoot
每个虚拟主机都有专有的配置:
<VirtualHost "IP:PORT">
ServerName
DocumentRoot ""
</VirtualHost>
ServerAlias:虚拟主机的别名
ErrorLog
CustomLog
<Directory ""> </Directory>
示例1.基于IP
<VirtualHost 172.16.100.250:80>
ServerName web1.magedu.com
DocumentRoot "/vhosts/web1/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.251:80>
ServerName web2.magedu.com
DocumentRoot "/vhost/web2/htdocs"
</VirtualHost>
示例2:基于port
<VirtualHost 172.16.100.251:80>
ServerName web2.magedu.com
DocumentRoot "/vhost/web2/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.251:8080>
ServerName web3.magedu.com
DocumentRoot "/vhost/web3/htdocs"
</VirtualHost>
示例3:基于hostname
<VirtualHost 172.16.100.251:80>
ServerNme web2.magedu.com
DocumentRoot "/vhost/web2/htdocs"
</VirtualHost>
<VirtualHost>
ServerName web4.magedu.com
DocumentRoot "/vhost/web4/htdocs"
</VirtualHost>
<VirtualHost>
ServerName web5.magedu.com
DocumentRoot "/vhost/web5/htdocs"
</VirtualHost>
14.内置的status页面
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 172.16
</Location>
实现:基于账号实现访问控制;
HTTP笔记1的更多相关文章
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- NET Core-学习笔记(三)
这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...
- springMVC学习笔记--知识点总结1
以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
随机推荐
- [Caffe]Win10+VS2015+CUDA8.0+cudnn5.1环境配置
百度:win10 caffe vs2015 编译caffe.sln工程参见->这里 caffe训练参见->这里 参见->这里 Windows+VS2013爆详细Caffe编译安装教程
- GridView 事件出发后 内容滚动条 实时定位
var hh; var hh1; var h2; ///获取初始位置 触发事件 function Scroll() { ...
- Oracle命令行中显示:ORA-04076: 无效的 NEW 或 OLD 说明
Oracle命令行进行操作时可能出现"ORA-04076: 无效的 NEW 或 OLD 说明" 需要在条件语句中JOB前面添加“old.”即可(因为是在when条件里面,所以不用“ ...
- flask之wtforms
本篇导航: wtforms组件的使用 自定义From组件 一.wtforms组件的使用 1.flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进 ...
- __x__(5)0905第二天__网页三大组成部分
根据 W3C 标准,将网页主要分成 3 个部分:结构,表现,行为. 结构: HTML 用于描述页面结构. 表现: CSS 用于控制页面中元素的样式. 行为: JavaScript 用于响应用户操作.
- ajax 传递中文字符参数 问题
使用ajax 传递中文字符串时, 服务端会接收不到预期的 中文字符. 此时,需要对 js中的中文字符参数进行 编码, 到达服务端后, 再为其解码 即可. 前端: var url = '....'; ...
- 170217、nginx 安装时候报错:make: *** No rule to make target `build', needed by `default'. Stop.
出现此种情况,是linux系统没有安装先决条件 1.GCC——GNU编译器集合(GCC可以使用默认包管理器的仓库(repositories)来安装,包管理器的选择依赖于你使用的Linux发布版本,包管 ...
- 下面findmax函数将计算数组中的最大元素及其下标值,请编写该函数。
#include <stdio.h> void findmax ( int s[ ], int t, int *k ) { int i; *k = ; ; i < t; i++) { ...
- Java演算法-「馬踏棋盤問題」
/* * 馬踏棋盤問題:(貪婪法求解) * 棋盤有64個位置,“日”字走法,剛好走滿整個棋盤 */ //下一個走法的方向類 class Direction{ int x; int y; int way ...
- Django学习之django自带的contentType表 GenericRelation GenericForeignKey
Django学习之django自带的contentType表 通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...