HTTP基础

Posted by 胡伟煌 on 2018-09-20

1. web及网络基础

1.1. 通过HTTP访问web[C/S]

1.2. TCP/IP四层模型

1.2.1. 数据包的封装

1.3. TCP/IP协议族

1.3.1. 负责传输的IP协议

使用ARP协议凭借MAC地址通信

1.3.2. 确保可靠的TCP协议

1.3.3. 负责域名解析的DNS服务

1.3.4. 各协议与HTTP的关系

1.4. URI与URL

  • URI(Uniform Resource Identifier):统一资源标识符
  • URL(Uniform Resource Locator):统一资源定位符;URL是URI的子集

1.4.1. URI的格式

字段 说明
协议 http/https
登录信息(认证) user:pass@(一般没有)
服务器地址 域名或IP
服务器端口号 服务端口号,省略则取默认端口号
带层次的文件路径 指定服务器上的文件路径来定位特指的资源
查询字符串 使用查询字符串传入参数
片段标识符 标记以获取资源中的子资源(文档内的某个位置)

1.4.2. URI的示例

2. HTTP协议

2.1. 通过请求和响应的交换达成通信

2.1.1. 请求报文

2.1.2. 响应报文

2.2. HTTP请求方法

2.2.1. GET:获取资源

2.2.2. POST:传输实体主体

2.2.3. PUT:传输文件

PUT方法用来传输文件,像FTP协议一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。

因为自身不带验证机制,有安全问题,因此一般不采用。若配合验证机制或者REST标准则可使用。

2.2.4. HEAD:获取报文头部

HEAD和GET一样但不返回报文主体部分,用于确认URI的有效性及资源的更新时间等。

2.2.5. DELETE:删除文件

DELETE与PUT作用相反,但不带安全验证机制一般不采用。

2.2.6. OPTIONS:询问支持的方法

OPTIONS用来查询针对请求URI指定的资源支持的方法

2.2.7. TRACE:追踪路径

TRACE用来查询发送出去的请求是怎样被加工修改/篡改的,因为易引发XST(跨站追踪)攻击,一般不使用。

2.2.8. CONNECT:要求用隧道协议连接代理

CONNECT要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(Source Sockets Layer:安全套接字)和TLS(Transport Layer Security:传输层安全)协议把通信内容加密后经网络隧道传输。

方法格式如下:

2.3. 持久连接

2.3.1. keep-alive

为解决每进行一次HTTP通信就要断开一次TCP连接,增加了通信量的开销,HTTP/1.1通过keep-alive持久连接,只要任意一端没有明确提出断开连接,则保持TCP连接状态。

持久连接减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

2.3.2. 管线化

持续连接使得多数请求以管线化(pipelining)方式发送成为可能。管线化即同时并行发送多个请求,而不需要一个接一个等待响应。管线化技术比持续连接速度快,请求数越多越明显。

2.3.3. 使用cookie的状态管理

HTTP是无状态协议,不对之前发生过的请求和响应的状态进行管理,即无法根据之前的状态进行本次的请求处理。无状态协议的优点在于不必保存状态,减少服务器CPU及内存资源的消耗。

cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态。cookie会根据从服务端发送的响应报文内的一个叫做Set-Cookie的首部字段通知客户端保存Cookie;当客户端再往服务端发送请求时,客户端自动在请求报文中加入Cookie值后发送出去。服务器发现Cookie后会检查从哪个客户端发送来的连接请求,对比服务器上的记录,最后得到之前的状态信息。

参考:

  • 《图解HTTP》


支付宝打赏 微信打赏

赞赏一下