http协议:超文本传输协议
html:超文本标记语言;
应用层协议格式:文本(http/sftp),二进制(memcache)
http服务器程序:
httpd
Nginx
lighttpd 轻量级应用程序服务器:不仅能处理静态资源,还能处理动态资源;
IIS .net
Tomcat jsphttp协议版本:
HTTP/0.9 只支持GET方法
HTTP/1.0 引入MIME,支持传输多媒体;引入cache,支持更多的Method
HTTP/1.1 增强了缓存,开始支持持久连接功能;
HTTP/2.0 借鉴了SPDY,增强了性能;
MIME:多用途互联网邮件扩展;Multipurpose Internet Mail Extension
主要作用:传输非文本格式的数据;
major/minor
HTML格式的文本:text/html
普通ASCII文本:text/plain
JPEG格式的图片:image/jpeg
WEB资源的分类:
- 静态资源:图片,txt文本,css,mp3,html
- 动态资源:客户端请求的是程序文件,需要服务器端的应用程序运行后返回运行的结果;
注意:一个站点由众多的资源构成,每个资源都需要单独请求;
URL:唯一标识服务器端某特定资源的存放位置;
语法格式:scheme://server[:port]/path/to/source
。 URI 统一资源标识符;URL和URN(统一资源名)是URI的子集;httpd协议本事是无状态的,无法永久存储用户的信息,所以引用了cookie和session机制
。Cookie:保存在客户端;由服务器发送给客户端,唯一标识用户的信息;
。 胖cookie 信息量大,可能会泄露用户信息
。瘦cookie 仅记录个人用户信息Session:保存在服务器端
一次完整的http请求过程:
1.接收客户端的连接,如果不希望与这个客户端建立连接,就直接关闭;
2.接收来自客户端的http请求;
3.处理请求:分析请求报文中的首部信息,并采取相应的行动;
4.访问资源:发起系统调用,获取请求的资源;
5.构建http响应报文并发送给客户端;
6.记录到日志文件中
并发响应模型:(c10K问题)
1.单进程i/o模型:启动一个进程处理所有用户的请求;
2.多进程i/o模型:并行启动多个进程,每个进程处理一个请求;
3.复用的i/o模型:
多线程模型:一个进程产生多个线程,一个线程处理一个请求;
事件驱动机制:一个进程直接响应n个请求;
4.复用的多进程i/o模型:启动m个进程,每个进程生成n个线程;则,响应请求数量为m*n
- http事务:一次http事务=一次请求+一次响应的过程;
。 request报文首部:
<method><URL><vsersion>
<HEADERS>(name:value)
<request body>
。 response报文首部:
<vsrsion><status><reson-phrase>
<HEADERS>
<body>
Method:
GET,HEAD,POST,PUT,DELETE,TRACE(跟踪资源经过的代理服务器),OPTIONS(返回服务器对资源支持使用的method)status:
。 1xx 信息类
。2xx 成功类
。 3xx 重定向类;
。 4xx 客户端错误
。 5xx 服务器端错误常用状态玛:
。200 请求成功;OK
。301 永久重定向;Moved Permanently
。302 临时重定向;Found
。304 请求资源未发生改变;Not Modified
。401 输入账号密码后才能访问资源;Unauthorized
。403 请求被禁止;Forbidden
。404 服务器找不到客户端请求的资源;Not Found
。500 服务器内部错误;Internal Server Error
。502 代理服务器从后端服务器收到一条伪响应;Bad Gateway
。504 超时
。499 Nginx自定义状态码;客户端向Nginx服务器发请求,服务端还未处理完成,响应还没完成。客户端就主动断开了;
HEADER:
通用首部:
请求首部:
条件式请求首部:IF-Modified-Since,If-None-Match
响应首部:
实体首部:
扩展首部:通用首部:既可以用在请求报文中又可以用在响应报文中
Date:报文的创建时间
Connection:连接方式,如keep-alive,Close
Via:显示报文经过的中间节点
Cache-Control:控制缓存的生效机制
Pragma:兼容Http 1.0,缓存相关请求首部
Accept:通知服务器自己可以接受的媒体类型
Accept-Charset:可以接受的字符集
Accept-Encoding:通知服务器自己接受的编码格式,如gzip
Accept-Language:接受的语言
Client-IP:客户端IP
Host:请求的服务器名称和端口号
Referer:包含当前正在请求资源的上一级资源
User-Agent:客户端代理条件式请求首部
Expect 期望服务器端发送什么类型信息
If-Modified-Since 自从指定的时间之后,请求的资源是否发生过修改
If-Unmodfied-Since 自从指定的时间之后,请求的资源是否没有修改
If-None-Match 缓存中存储的文档ETag标签是否与服务器端文档Etag不匹配安全请求首部
Authorization 向服务器发送认证信息
Cookie/Cookie2 客户端向服务器发送Cookie代理请求首部
Proxy-Authorization:向代理服务器认证响应首部:
。信息性
Age:响应持续时长
Server:服务器程序软件名称和版本协商首部:某资源有多种表示方法时使用
Accept-Ranges:服务器可接受的请求范围类型
Vary:服务器查看的其他首部列表,服务器根据首部内容挑选出最合适的资源版本发送给客户端(当代理服务器收到了客户端的请求时候,如果请求首部字段的值与?Vary?的值相同,才会从代理服务器的缓存中返回请求,反之就会向源服务器重新发送请求)安全响应首部
Set-Cookie:向客户端设置Cookie
Set-Cookie2
WWW-Authenticate:来自服务器的对客户端的质询认证表单实体首部
。 Allow 列出对此实体可使用的请求方法
。 Location 告诉客户端真正的实体位于何处
。Content-Encoding 内容的编码格式
。Content-Language 内容的使用语言
。 Content-Length 主体的长度
。 Content-Location 实体真正所处位置
。 Content-type 主体的对象类型缓存相关
。 Etag 实体的扩展标签
。 Expires 实体的过期时间
。 Last-Modified 最后一次修改的时间
- Web页面:
。一个页面由多个资源组成;
。PV:page view 入口页面被视为一个pv
。UV:user view 每个独立的ip地址被视为一个uv;
认证:
。基于ip认证:
。基于用户认证:basic,digest资源映射:
。 Alias
。 DocumentRoothttpd:MPM
。prefork:一个主进程,生成多个子进程,每个子进程处理一个请求;
。 worker:一个主进程,生成多个子进程,每个子进程生成多个线程,每个线程处理一个请求;
。 event:一个主进程,生成多个子进程,每个子进程处理多个请求;-
I/O类型:
同步和异步:
--关注的是消息通知机制:被调用者的状态
。同步:调用发出之后不会立即返回,但一旦返回,则返回既是最终结果;
。异步:调用发出之后,被调用方立即返回消息,但返回的并非是最终结果:被调用者通过状态,通知机制等来通知调用者,或通过回掉函数来处理结果;阻塞和非阻塞:block,nonblock
-- 关注的是调用者等待被调用者返回调用结果使得状态;
。 阻塞:调用结果返回之前,调用者会被挂起;调用者只有在得到返回结果之后才能继续;
。非阻塞:调用者在结果返回之前,不会被挂起,即调用不会阻塞调用者;
I/O模型:
。 blocking IO 阻塞式IO
。 nonblocking IO 非阻塞式I/O
。 IO multiplexing 复用型IO
。 signal dirven IO 事件驱动式IO
。 asynchronous IO 异步IO