前端修仙之路

HTTP学习笔记

2019-10-09  本文已影响0人  月上秦少

HTTP学习笔记

HTTP

1. web与网络基础

1.1使用HTTP协议访问Web

客户端(client, 浏览器browser)通过url访问服务器(server),服务器把指定资源(resource)传递给客户端,从而显示web页面。这一过程,web使用了一种名为HTTP(HyperText Transfer Protocol,超文本传输(转移)协议)的协议作为约定(规范),完成从客户端到服务器等一系列的信息交互。即,web是建立在HTTP协议上的通信。

1.2 HTTP的历史

HTTP协议的出现主要是为了解决文本传输的难题。随着HTTP的发展,HTTP协议已经超出了WEB这个框架的局限,被运用到了各种场景里。

1.3 TCP/IP协议

HTTP协议是建立在TCP/IP上的,要想更好地理解HTTP,我们需要先了解TCP/IP。

1.4 IP、TCP和DNS

1.4.1.负责传输的IP协议

按层次分,IP(Internet Protocol)网际协议位于网络层。IP协议的作用是根据IP地址(节点被分配到的地址,可以改变)和MAC地址(Media Access Control Address,网卡所属的固定地址,基本不会变)把数据包准确地传递给目标。

一般通信双方不在同一个局域网(LAN)下,通常会经过许多中转设备才能连接到对方。在中转时,会借助下一站中转设备的MAC地址来搜索下一个中转目标,这一过程会采用ARP协议(Address Resolution Protocol)。

ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。

1.4.2.确保可靠性的TCP协议

按层次分,TCP位于传输层,提供可靠的字节流服务(Byte System Service,将大块数据分割以报文段segment为单位的数据包进行管理)。TCP协议为了更容易传输大数据将数据分割,且TCP协议能够确认数据最终是否送达对方。

那么,TCP怎么确保数据能够送达目标呢?

若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。

当然,除了上述三次握手,TCP协议还有其他各种手断来保证通信的可靠信。


TCP三次握手

1.5 负责域名解析的DNS服务

DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议。提供域名到IP地址之间的解析服务。IP地址(如:196.168.0.1)由一组纯数字组成,不便于记忆,用户一般使用主机名或域名(字母和数字组合,便于记忆和识别)来访问目标计算机。

但是计算机只认识IP地址,它不认识主机名或域名,于是DNS服务应运而生。DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。

1.6 各种协议与HTTP协议的关系

思考:在浏览器输入url,按下回车的过程,经历了什么?

浏览器输入url并按下回车的过程

1.7 URI和URL

URL(Uniform Resource Locator,统一资源定位符)。URL 正是使用Web 浏览器等访问。Web 页面时需要输入的网页地址。

URL(Uniform Resource Identifier)统一资源标识符。由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称(比如,采用HTTP协议时,协议方案就是http)。

URI 用字符串标识某一互联网资源,而URL 表示资源的地点(互
联网上所处的位置)。可见URL 是URI 的子集。

URI的格式

2. HTTP协议

2.1 HTTP协议用于客户端和IP服务器端之间的通信。

HTTP请求与响应

2.2 HTTP协议是无状态协议(stateless)

2.3 HTTP 协议使用URI 定位互联网上的资源

HTTP协议使用URI定位资源

当客户端请求访问资源而发送请求时,URI 需要将作为请求报文中的请求URI 包含在内。除此之外,如果不是访问特定资源而是对服务器本身发起请求,可以用一个* 来代替请求URI。

GET http://hackr.jp/index.htm HTTP/1.1

OPTIONS * HTTP/1.1

2.5 HTTP 方法

HTTP/1.1 中可使用的方法,如:GET、POST、PUT等。如:REST(REpresentational State Transfer,表征状态转移)标准。

HTTP 方法 意图
GET 获取资源
POST 传输实体主体
PUT 传输文件
HEAD 获得报文首部
DELETE 删除文件
OPTIONS 询问支持的方法
TRACE 追踪路径
CONNECT 要求用隧道协议连接代理

2.6 持久连接和管线化

2.7 Cookie技术实现状态管理

HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。

无状态协议有它的优点,由于不必保存状态,自然可减少服务器的CPU 及内存资源的消耗。

保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入了Cookie 技术。Cookie 技术通过在请求和响应报文中写入Cookie 信息来控制客户端的状态。

Cookie 会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie 值后发送出去。

①请求报文(没有Cookie 信息的状态)

GET /reader/ HTTP/1.1
Host: hackr.jp
*首部字段内没有Cookie的相关信息

②响应报文(服务器端生成Cookie 信息)

HTTP/1.1 200 OK
Date: Thu, 12 Jul 2012 07:12:20 GMT
Server: Apache
<Set-Cookie: sid=1342077140226724; path=/; expires=Wed,
10-Oct-12 07:12:20 GMT>
Content-Type: text/plain; charset=UTF-8

③请求报文(自动发送保存着的Cookie 信息)

GET /image/ HTTP/1.1
Host: hackr.jp
Cookie: sid=1342077140226724

服务器端发现客户端发送过来的Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

3. HTTP报文信息

3.1 HTTP报文

3.2 编码提升传输速率

HTTP 报文的主体用于传输请求或响应的实体主体。通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。

3.3 发送多种数据的多部分对象集合

在HTTP 报文中使用多部分对象集合时,需要在首部字段里加上Content-type

3.4 获取部分内容的范围请求

指定范围发送的请求叫做范围请求(Range Request)。即可以只请求部分内容。

执行范围请求时,会用到首部字段Range 来指定资源的byte 范围。例如:对一份10 000 字节大小的资源,如果使用范围请求,可以只请求5001~10 000 字节内的资源。

Range: bytes=5001-10000

3.4 内容协商返回最合适的内容

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。

涉及的首部字段有:AcceptAccept-CharsetAccept-EncodingAccept-LanguageContent-Language

3.5 小结

通过HTTP报文,我们可以:

4. HTTP响应状态代码(Response Status Codes)

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果,告知客户端响应成功或失败的信息。

响应分为五类:信息响应(100199),成功响应(200299),重定向(300399),客户端错误(400499)和服务器错误 (500599)

查看这里:MDN HTTP响应代码

5. HTTP首部(Header)

HTTP 协议的请求和响应报文中必定包含HTTP 首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。

HTTP 请求报文由方法、URI、HTTP 版本、HTTP 首部字段等部分构成。

HTTP 响应报文由HTTP 版本、状态码(数字和原因短语)、HTTP 首部字段3 部分构成。

首部字段查看这里:MDN HTTP首部

6. HTTPS协议

6.1 HTTP协议的存在的问题

6.2 HTTP+ 加密+ 认证+ 完整性保护=HTTPS

HTTP 协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP 的通信内容。

SSL 不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定方。

与SSL 组合使用的HTTP 被称为HTTPS(HTTP Secure,超文本传输安全协议)或HTTP over SSL。

HTTP与HTTPS

HTTPS 并非是应用层的一种新协议。只是HTTP 通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。

6.3 HTTPS安全通信过程

HTTPS通信过程

6.4 HTTPS的缺点

既然HTTPS 那么安全可靠,那为何所有的Web 网站不一直使用HTTPS ?

因此,如果是非敏感信息则使用HTTP 通信,只有在包含个人信息等敏感数据时,才利用HTTPS 加密通信。

7. HTTP认证

某些Web 页面只想让特定的人浏览,或者干脆仅本人可见。为达到这个目标,必不可少的就是认证功能。

7.1 认证方式

日常认证方式有:

HTTP认证方式:

由于使用上的便利性及安全性问题,HTTP 协议标准提供的BASIC认证和DIGEST 认证几乎不怎么使用。另外,SSL 客户端认证虽然具有高度的安全等级,但因为导入及维持费用等问题,还尚未普及。目前,Web 网站的认证大都为基于表单认证。

7.2 Session 管理及Cookie 应用

基于表单认证本身是通过服务器端的Web 应用,将客户端发送过来的用户ID 和密码与之前注册过(登陆过)的信息做匹配来进行认证的。

但鉴于HTTP 是无状态协议,之前已认证成功的用户状态无法通过协议层面保存下来,即,无法实现状态管理。于是我们会使用Cookie 来管理Session,以弥补HTTP 协议中不存在的状态管理功能。


二次登陆下:Session和Cookie

彻底理解cookie,session,token

8. WEB安全简析

8.1 针对Web 的攻击技术

8.2 因输出值转义不完全引发的安全漏洞

8.2.1.XSS跨站脚本攻击:

跨站脚本攻击(Cross-Site ScriptingXSS)是指通过存在安全漏洞的Web 网站注册用户的浏览器内运行非法的HTML 标签或JavaScript进行的一种攻击。

跨站脚本攻击有可能造成以下影响:

XSS 是攻击者利用预先设置的陷阱触发的被动攻击。分类:

8.2.2.SQL 注入攻击:

SQL 注入(SQL Injection)是指针对Web 应用使用的数据库,通过运行非法的SQL 而产生的攻击。

SELECT * FROM User WHERE userName = '张三 '-- and flag = 1; (-- 后面被注释了)

SQL 注入攻击有可能会造成以下等影响:

8.2.3 OS 命令注入攻击

OS 命令注入攻击(OS Command Injection)是指通过Web 应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell 函数的地方就有存在被攻击的风险。

8.2.4 HTTP 首部注入攻击

HTTP 首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击模式。

HTTP 首部注入攻击有可能会造成以下一些影响:

8.2.5 针对措施

8.3 因会话管理疏忽引发的安全漏洞

8.3.1 会话劫持

会话劫持(Session Hijack)是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID 伪装成用户,达到攻击的目的。

下面列举了几种攻击者可获得会话ID 的途径:

8.3.2 会话固定攻击

对以窃取目标会话ID 为主动攻击手段的会话劫持而言,会话固定攻击(Session Fixation)攻击会强制用户使用攻击者指定的会话ID,属于被动攻击。

8.3.3 跨站点请求伪造CSRF

跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。

跨站点请求伪造有可能会造成以下等影响:

8.4 其他安全漏洞

上一篇 下一篇

猜你喜欢

热点阅读