一个非常好的学习HTTP的网站:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP
第一部分
- HTTP:超文本传输协议
2.URL:统一资源定位符。
URI:统一资源标识符。
URL < URI
3.1995年IE浏览器,2004年Mozilla发布Firefox
4.TCP/IP(从高往下)
应用层:如FTP,DNS,HTTP
传输层:TCP,UDP
网络层:处理流动的数据包,IP协议
数据链路层:处理连接网络的硬件,如操作系统,网卡,光纤
每经过一层,都会增加一个首部,如TCP首部
5.IP协议将数据传到对方需要2个条件,IP地址(会变)和MAC地址
6.APP协议:中转时,下一站中转设备的MAC地址是用来搜索的目标。
7.路由选择
TCP的三次握手策略,为的是准确无误的奖数据送达
握手过程使用TCP的标记(flag)----SYN和ACK
三次握手:其实指的是三次数据传输,发送端2次,接收端一次
1)发生端发生标有SYN的数据包
2)接收端收到后,回复标有SYN/ACK的数据包表示确认
3)发送端发送带有ACK的数据包
8.DBS域名解析:指的是域名到IP的解析。
9.各协议的职责:
DNS:解析域名
Http:生成报文,解析报文
TCP:切割http报文,传输数据,3次握手
IP:搜索地址,路由转发
10.URI格式:协议方案,登录信息,地址端口,路径,查询
第二部分
1.请求报文的组成:请求URI,协议版本,可选请求头部字段,内容实体
2.响应报文组成:协议版本、状态码、解释状态码短语、可选响应首部字段、响应实体
3.HTTP: 无状态协议,不做持久化处理
4.HTTP/1.1引入了cookie技术,实现保持状态
5.HTTP的方法:
GET: 获取资源
POST:传输实体主体
PUT:传输文件
DELETE:删除资源
OPTIONS: 访问支持的方法
TRACE:追踪路径
CONNECT:要求使用隧道协议连接代理
6.以前是每次请求,TCP都会短开,但是现在的网页图片多,请求多,增加了通信量的开销。所以在HTTP/1.1中增加了keep-alive,任意一端没明确断开,就保持TCP连接状态。
7.管线化:一个请求没响应就可以发生下一个请求,也就是同时并行发送多个请求。
8.Cookie技术
在没有Cookie的时候发送请求,服务端会在响应的的报文内增加一个:set-cookie头部字段信息。
客户端会根据这个字段信息将内容保存到cookie。
再次请求的时候,就会带着这个cookie。
所以说,其实一次会话,虽然session是保存在服务端,但是和cookie还是有关系的。所以要做路由转发的类似功能,需要从这里下手(个人理解)。
第三部分
1.HTTP报文内的HTTP信息
请求报文: 报文首部(请求行:请求方法+URL,请求首部字段,通用首部字段、实体首部),报文主体
响应报文:报文首部(状态行:状态码+短语,响应首部,通用首部,实体首部),报文主体
首部字段主要为通用、请求、响应、实体,其他也有,比如cookie。
2.传输的内容会进行压缩,如gzip
3.Http协议也采纳了多部分对象集合,发生的报文包含多类型实体
多部分对象集合:multipart/form-data
4.获取部分内容的范围请求:
Range:bytes=5001-10000:下载5001到10000字节,这是个首部字段
5.内容协商返回最合适内容,比如返回的是英文还是中文(浏览器的语言)
字段:Accept,Accept-charset,Accept-Encoding,Accept-Language,Content-Language
第四部分
1.状态码类别
1XX: 请求正在处理,信息性
2XX:成功。200:OK,204:没有主体,206:响应报文范围内容
3XX:重定向。301:永久,302:临时,303:请求另一个url,304,307:禁止post转get
4XX:客户端错误,400:bad request。401:认证问题,403,不允许访问,404:not found
5XX: 服务端错误,500,error,503:服务器超载
第五部分
与Http协作的web服务器
1.因为DNS会将域名映射为IP,所以当请求到服务器时候,已经是IP形式
2.通信数据转发程序:代理(转发功能),网关(转发其他服务器通信数据的服务器),隧道(相隔甚远的客户端与服务器之间中转通信的程序)
3.代理:
不改变请求URI,直接转发
代理转发请求时,会追加写入via首部信息,分为2类:是否使用缓存,是否修改报文
缓存带来会预先将资源缓存在代理服务器
透明代理不对报文做任何修改
4.网关:与代理十分相似,但网关可以提供非HTTP协议服务,如网关可以连接数据库
5.隧道,一条通信线路
第六部分
1.HTTP报文首部
HTTP请求报文首部报文是由方法、URI、HTTP版本、首部字段组成
HTTP响应报文首部是由HTTP版本,状态码(数字或短语)、首部字段组成。
2.HTTP首部字段传递重要信息,结构为: 字段名:字段值。如content-Type:text/html
3.首部字段分为通用、请求、响应、实体4类。
通用首部字段:
Cache-control: 控制缓存行为;
connection:逐跳首部,连接的管理
Date:创建报文的日期
pragma: 报文指令
Trailer:报文末端首部一览
Transfer-Encoding:指定报文主体的传输编码方式
upgrade:升级其他协议
via:代理服务器相关信息
waring:错误通知
请求首部字段:
Accept: 用户代理可处理模型
Accept-charset:优先字符集
Accept-Encoding:有限的内容编码
Accept-Language:优先的语言
Authorization: web认证信息
Except:期待服务器的行为
From:用户的电子邮件
Host:请求服务器地址
If-Match:比较实体标记,相反的是If-None-Match
If-Modified-Since,If-Unmodified-Since:比较资源更新时间
If-Range:资源来更新时byte的范围
Max-Forwards:最大的传输逐跳数
Proxy-Authorization:代理服务器要求的认证信息
Range:实体字节范围请求
Refer:对请求中的URI原始获取方
User-Agent: http客户端信息
响应首部字段:
Accept-Ranges:是否接受字节范围请求
Age:推算资源创建时间
EAge:资源匹配时间
Location:另客户端重定向指定的URI
Proxy-Authenticate:代理服务器对客户端认证信息
Server: Http服务器
vary:代理服务器缓存的管理信息
www-Authenticate:服务器对客户端认证信息
实体首部:
Allow: 资源支持的Http方法
Content-Encoding: 实体主题适用编码
Content-Length:实体主体大小
Content-Location:替代对应资源的uri
Content-MD5:实体报文摘要
Content-Range: 实体报文位置范围
Content-Type: 媒体类型
Expires:过期时间
Last-Modified:最后修改时间
4.非HTTP/1.1首部字段
如Cookie,set-Cookie, Content-isposition等
4.End-to-End首部:端到端首部,必须保存在魂村生成的响应,且必须转发
5.Hop-by-Hop首部:逐跳首部,支队单词转发有效,会因为通过缓存或者代理不再转发
Connection,keep-Alive, Proxy-Authenticate, Proxy-Authorization, Trailer, TE, Transfer-Encoding, upgrade都是逐跳首部
6.常用的一些首部和取值
6.1 Cache-Control: 操作缓存的机制,如:private, max-age=0, no-cache
取值:public: 其他用户也可采用缓存,no-cache:防止返回过期资源,no-store:含机密信息,max-age:缓存时间,min-fresh, max-state
6.2 connection: 控制不再转发给代理的首部,管理持久连接
如: connection: upgrade, 删除upgrade在转发
close:关闭长连接,keep-alive:长连接
6.3 Date: 报文创建时间
6.4 pragma: 历史遗留字段
6.5 Trailer: 事先说明在报文主体后记录了哪些主体
6.6 Transfer-Encoding: 报文主体采用的编码格式,如chuked: 分块传输
6.7 upgrade: 用于检测是否可用版本通信,使用时,额外指定connection: upgrade
6.8 via: 处理网关时加上内容
6.9 warning: http/1.0 Retry-After演变的,一些警告
请求首部:
Accept: 可处理的媒体类型,多个用逗号隔开
文本文件: text/html, text/plain, text/css, application/xml 等等
图片: image/jpeg/gif/png等
视频文件:video/mpeg
应用程序使用的二进制文件: application/octet-stream/zip ...
Accept-Charset: 通知服务器用户字符集,多个逗号隔开,如iso-8859-5
Accept-Encoding: 用户代理支持内容编码,多个逗号隔开,如gzip,deflate
Accept-Language: zh-en, en-us,处理的语言
Authorization: 代理认证信息值
Except: 期望某种特定行为
Max-Forwards: 最多转发次数
Refer:告知请求的原始URI
- Cookie服务的首部字段
Set-Cookie: 响应、开始状态所使用的的cookie信息
cookie: 轻汽油服务器接收到的cookie信息
set-Cookie的字段属性:
Name=value: 赋予cookie的值
expires=Date: cookie的有效期
path=Path: 目录
domain:域名
secure: 仅在https才发生cookie
HttpOnly: 使cookie不能被js访问
其他首部:
首部字段可以自己扩展,比如下载时候的文件名
X-Frame-Options: 控制web的frame信息
X-XSS-Protection:针对XSS跨站脚本攻击策略
DNT: 拒绝个人信息被收集
P3P: 保护隐私的
第七部分 HTTPS
窃听、抓包或嗅探器,如wireshark,拆包攻击
SSL与TLS组合使用
https是身披SSL外壳的HTTP
HTTPS采用共享秘钥和公开秘钥两者并用的混合加密机制
使用SSL会带来通信慢和大量CPU与内存消耗
第八部分
确认访问用户身份认证
常用的核对信息:密码,动态令牌,数字证书,生物证人,IC卡号
HTTP认证,BASIC认证, SSL客户端, FORM BASE认证, DIGEST认证
使用cookie来管理session
第九部分
基于HTTPS功能追加协议
google发布:消除http瓶颈的SPDY
AJAX的解决方案是拉取
Comet解决方案,通过延迟应答实现推送功能
然后到SPDY再有了websocket
第十部分
web攻击方法
主动攻击:直接对服务器资源攻击,如SQL注入,OS命令攻击
被动攻击:诱导进入陷阱
跨站脚本攻击(XSS)
邮件首部注入攻击
目录遍历攻击
远程文件包含漏洞
会话劫持,会话固定攻击