http学习笔记
一、TCP
1.1 TCP/IP 的分层管理
TCP/IP 协议族按层次分别分为以下 4 层:应用层、传输层、网络层和数据链路层。
应用层
应用层决定了向用户提供应用服务时通讯的活动。有FTP,DNS服务和HTTP协议。
传输层
传输层对上层应用层,提供网络连接中的两台计算机之间的数据传输。
有两个协议,TCP(传输控制协议)和UDP(用户数据报协议)
网络层
网络层用来处理在网络上流通的数据包。该层规定了通过怎样的路径到达对方计算机,并把数据包给对方。
数据链路层
用来处理连接网络的硬件部分。
TCP/IP通讯传输流
1.2 TCP三次握手
不同协议的通讯过程
二、HTTP报文
用于 HTTP 协议交互的信息被称为 HTTP 报文。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。
HTTP 报文大致可分为报文首部和报文主体两块。两者由最初出现的空行(CR+LF)来划分。
2.1 报文结构
- 请求行
包含用于请求的方法,请求 URI 和 HTTP 版本。 - 状态行
包含响应结果的状态码,原因短语和HTTP版本。 - 首部字段
包含表示请求和响应的各种条件和属性的各类首部。
一般有 4 种首部,分别是:通用首部、请求首部、响应首部和实体首部。 - 其他
可能包含 HTTP 的 RFC 里未定义的首部(Cookie 等)。
2.2 HTTP状态码
- 2XX 成功
200 OK
204 No Content 返回的响应报文中不含实体的主体部分。
206 Partial Content 该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。 - 3XX 重定向
301 Moved Permanently 永久性重定向
302 Found 临时性重定向
303 See Other 303 状态码明确表示客户端应当采用 GET 方法获取资源,这点与 302 状态码有区别。
304 Not Modified 服务器端资源未改变,可直接使用客户端未过期的缓存 - 4XX 客户端错误
4XX 的响应结果表明客户端是发生错误的原因所在。
400 Bad Request 该状态码表示请求报文中存在语法错误
401 Unauthorized 该状态码表示发送的请求需要有通过 HTTP 认证
403 Forbidden 未获得文件系统的访问授权
404 Not Found 该状态码表明服务器上无法找到请求的资源 - 5XX 服务器错误
500 Internal Server Error 表明服务器端在执行请求时发生了错误
503 Service Unavailable 表明服务器暂时处于超负载或正在进行停机维护
三、HTTP首部
3.1 4 种 HTTP 首部字段类型
- 通用首部字段(General Header Fields)
请求报文和响应报文两方都会使用的首部。 - 请求首部字段(Request Header Fields)
从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。 - 响应首部字段(Response Header Fields)
从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。 - 实体首部字段(Entity Header Fields)
针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。
3.2 HTTP/1.1 首部字段一览
- 通用首部字段
Cache-Control 控制缓存的行为
Connection 逐跳首部、连接的管理
Upgrade 升级为其他协议 - 请求首部字段
Accept 用户代理可处理的媒体类型
Accept-Charset 优先的字符集
Accept-Encoding 优先的内容编码
Accept-Language 优先的语言(自然语言)
If-Match 比较实体标记(ETag)
If-None-Match 比较实体标记(与 If-Match 相反)
If-Modified-Since 比较资源的更新时间
If-Unmodified-Since 比较资源的更新时间(与 If-Modified-Since 相反)
User-Agent HTTP 客户端程序的信息 - 响应首部字段
ETag 资源的匹配信息
Location 令客户端重定向至指定 URI - 实体首部字段
Content-Type 实体主体的媒体类型
Expires 实体主体过期的日期时间
Last-Modified 资源的最后修改日期时间
3.3 通用首部字段
3.3.1 cache-control 缓存控制
no-cache 无 强制向源服务器再次验证
no-store 无 不缓存请求或响应的任何内容
3.3.2 Connection
- 控制代理不再转发的首部字段
- 管理持久连接
- 控制代理不再转发的首部字段
3.3.3 Upgrade
指定一个完全不同的通信协议。
3.4 请求首部字段
3.4.1 Accept
Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。
- 文本文件
text/html, text/plain, text/css ...
application/xhtml+xml, application/xml ... - 图片文件
image/jpeg, image/gif, image/png ... - 视频文件
video/mpeg, video/quicktime .
3.4.2 If-Match
形如 If-xxx 这种样式的请求首部字段,都可称为条件请求。服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。
If-Match 与 ETag 一致,服务器才接受请求。If-None-Match 则相反
3.4.3 If-Modified-Since
如果在 If-Modified-Since 字段指定的日期时间后,资源发生了更新,服务器会接受请求
If-Unmodified-Since 则相反
3.4.4 User-Agent
首部字段 User-Agent 会将创建请求的浏览器和用户代理名称等信息传达给服务器。
3.5 响应首部字段
3.5.1 ETag
首部字段 ETag 能告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的 ETag 值。
3.5.2 Location
使用首部字段 Location 可以将响应接收方引导至某个与请求 URI 位置不同的资源。
该字段会配合 3xx :Redirection 的响应,提供重定向的 URI。
3.5.2 Server
首部字段 Server 告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息。
3.6 实体首部字段
3.6.1 Content-Type
首部字段 Content-Type 说明了实体主体内对象的媒体类型。
3.6.2 Expires
首部字段 Expires 会将资源失效的日期告知客户端。
3.6.3 Last-Modified
首部字段 Last-Modified 指明资源最终修改的时间。
3.6.4 Set-Cookie
当服务器准备开始管理客户端的状态时,会事先告知各种信息。
3.6.5 Cookie
首部字段 Cookie 会告知服务器,当客户端想获得 HTTP 状态管理支持时,就会在请求中包含从服务器接收到的 Cookie。
3.6.6 X-XSS-Protection
首部字段 X-XSS-Protection 属于 HTTP 响应首部,它是针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器 XSS 防护机制的开关。
四、HTTP VS HTTPS
4.1、HTTP的缺点
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
4.2 HTTPS的缺点
- HTTPS 比 HTTP 要慢 2 到 100 倍;
- 需要购买证书
五、web的攻击技术
5.1 跨站脚本攻击
- 特点:
能注入恶意的HTML/JavaScript代码到用户浏览的网页上,从而达到Cookie资料窃取、会话劫持、钓鱼欺骗等攻击。 - 原因:
a:Web浏览器本身的设计不安全。浏览器能解析和执行JS等代码,但是不会判断该数据和程序代码是否恶意。
b:输入和输出是Web应用程序最基本的交互,而且网站的交互功能越来越丰富。如果在这过程中没有做好安全防护,很容易会出现XSS漏洞。 - 防御XSS攻击
HttpOnly 浏览器禁止页面的JS访问带有HttpOnly属性的Cookie。
输入检查 XSS Filter 对输入内容做格式检查,类似“白名单”,可以让一些基于特殊字符的攻击失效。
输出检查 在变量输出到html页面时,可以使用编码或转义的方式来防御XSS攻击
XSS的本质是“HTML注入”
5.2 CSRF攻击跨站请求伪造
本质:重要操作的所有参数都是可以被攻击者猜测到的。攻击者预测出URL的所有参数与参数值,才能成功地构造一个伪造的请求。
- 防御
验证 HTTP Referer 字段
在请求地址中添加 token 并验证