一、网络传输基础
1. 套接字:两类
1) Unix Sock: 一种本地文件系统
2) Socket: IP port (IP:port或IP.port)
2. 传输层协议:
1) 有链接的协议:TCP
2) 无连接的协议: UDP
3. 套接字类型:
1) TCP 套接字
2) UDP 套接字
3) raw 套接字
4. C/S(client / server)模型:包含以下两部分
1) 通信子网:传输层协议
2) 应用层协议: 如:http, https, smtp, pop, imap, ftp, ldap
二、 HTTP协议介绍:
1. http: hypertext transport protocol (超文本传输协议,最早用来传输html文档)
2. html: hypertext mark language (超文本标记语言)
3. Client: Browser
4. Server: http Server
5. html格式的文件和CSS(Cascading Style Sheet)样式表
<html> <head> <title></title> </head> <body> <h1></h1> <p></p> <h2></h2> <p></p> </body> </html>
6. 关于动态页面: 需要在服务器端或者客户端运行脚本
7. 一个页面中:可能会包含多个页面对象,使用URL和URI标记
1) URI: Uniform Resource Indentifier
2) URL: Uniform Resource Locator
三、 关于HTTP协议与服务;
1. 协议版本
http/0.9: 1991, 仅用于传输html文档
http/1.0: 支持多媒体数据的处理,使用keep-alive机制,有缓存功能
http/1.1: 拥有更多请求方法,更加精细的缓存控制,拥有持久连接
2. http协议特点:
是一种无状态协议(stateless)协议 ,一次HTTP驶入结束后,连接即行断开
加速方式:
并行请求
持久连接
四、 HTTP报文:
1. HTTP事务:一次请求以及与其对应的响应
2. HTTP方法:GET, PUT, HEAD, POST(递交表单),DELETE
3. HTTP请求: request
HTTP请求报文:
报文格式:
<method><request-URL><version> <headers> ## 空两行 <entity-body>
HTTP响应:response
HTTP响应报文:
报文格式:
<version><status><reason-phrase> <headers> ## 空两行 <entity-body>
4. 各元素的含义:
<method>: 请求方法, 希望服务器端执行的动作,如GET、HEAD、POST等
<request-url>: 请求的资源,可以是相对路径,也是完整的URL
<version>:协议版本,格式HTTP/<major>.<minor>,如http/1.0
<headers>:HTTP首部
<status>: 状态码
<reason-phrase>:原因短语,数字状态码易读信息
<entity-body>: 主体部分
5. 首部
1) 通用首部:请求和响应都可以使用的首部
2) 请求首部
Client-IP: 客户端IP, 此时是应用层,所以还需要指
Host: 请求的主机名和端口号,虚拟主机环境下用于不同的虚拟主机
Referer: 请求当前资源的上一级URL
User-Agent: 用户代理,使用什么工具发出的请求
Accept请求首部: 用户表明客户自己更倾向于支持的能力
Accept: 指明服务器能发送的媒体类型
Accept-Charset: 支持使用的字符集
Accept-Encoding: 支持使用的编码方式
Accept-Language: 支持使用的语言
条件请求首部:
Expect:
If-Modified-Since: 是否在指定时间以来修改过此资源
If-None-Match: 与扩展标签相关
跟安全相关的请求首部:
Authorization: 客户端提交给服务端认证数据,如账号和密码
Cookie/Cookie2: 客户端发送给服务器端的身份标识
3) 响应首部
Age: 响应持续的时间
Server: 服务器向客户端表明,服务器程序名称版本
协商相关响应首部:
Accept-Ranges: 对当前资源来说,服务器所能够接受的范围类型
Vary: 首部列表,服务器会根据列表中内容挑选出最适合的版本发给客户端
跟安全相关的响应首部;
Set-Cookie/Set-Cookie2: 服务器端在某客户端第一次请求时,发给的的令牌
WWW-Authentication: 质询,要求客户端提供账号和密码
4) 实体首部:用于指定实体属性
Location: 资源的新位置
Allow: 允许对此实体请求的方法 (回应options请求)
内容相关实体首部:
Content-Encoding: 编码格式
Content-Language: 编码语言
Content-Length: 长度
Content-Location: 资源重定向时候使用
Content-Range: 内容范围
Content-Type: 类型
缓存相关内容首部:
ETag: 实体标签
Expires: 过期期限
Last-Modifed: 上一次的修改时间
5) 扩展首部:非标准首部,可能是由程序开发者创建
6. HTTP请求方法:
GET: 请求获取一个资源,需要服务器发送
HEAD: 跟GET 形似,但其不需要服务器发送资源,只传回响应首部即可
POST: 支持HTML表单提交,表单中包含用户填入的数据,这些数据会发送到服务器端,由服务器存储至某个位置(例如发送处理程序)
PUT:与GET相反,向服务器写入文档, 例如发布系统
DELETE: 请求删除URL指向的资源
OPTIONS: 探测服务器端对某自愿所支持的请求方法
TRACE:跟踪请求要经过的防火墙,代理或者网关
7. HTTP状态码:
1xx: 信息性状态码
2xx:成功状态码
200: OK
201: Created
3xx:重定向状态码
301:Moved Permanently, 在响应报文中使用首部“Location: URL”指定资源现在所处的位置;
302:Found, 在响应报文中使用首部“Location: URL”指定临时资源位置;
304:Not Modified, 条件式请求中使用;
4xx:客户端类的错误
403:Forbidden,请求被服务器拒绝
404:Not Found,服务器无法找到请求的URL
405:Method Not Allowed,不允许使用此方法请求相应的URL
5xx:服务器类的错误
500:Internal Server Error,服务器内部错误;
502:Bad Gateway,代理服务器从上游收到了一条伪响应;
503:Service Unavailable,服务器此时无法提供服务,但将来可能可用;
五、一次web请求的基本过程
1. 建立连接
2. 接收请求
3. 处理请求
4. 访问资源
5. 构建响应
6. 发送响应
7. 记录日志
六、Web服务器输入/输出结构:
1. 单线程I/O结构
2. 多线程I/O结构
3. 复用的I/O结构:单个线程响应多个请求
4. 复用多线程I/O结构:多个线程,每个线程响应多个请求
原创文章,作者:以马内利,如若转载,请注明出处:http://www.178linux.com/3718
评论列表(1条)
赞,tcp/ip数据流分析吊爆了