1. web及网络基础
与HTTP密切相关的几个协议
1. IP
网络层协议
作用:把各种数据包传送给对方,需要IP地址和MAC地址。
涉及到ARP协议:是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。
2. TCP
传输层协议,提供可靠的字节流服务
字节流服务:为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理.
可靠的传输服务:TCP三次握手确保数据传输
三次握手过程:
1. 客户端首先向服务器发送一个SYN(Synchronize)标记的包,告诉服务器请求建立连接;
> 一个SYN包就是将SYN标记设为1的TCP包。只有当服务器收到客户端发来的SYN包,才可建立连接;
2. 服务器收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确认,并继续握手操作;
> SYN/ACK包是将SYN和ACK标记为1的包
3. 客户端收到SYN/ACK后,客户端发送一个确认包(ACK),通知服务器连接已建立。
至此,三次握手完成,一个TCP连接完成。
3. DNS
应用层协议,域名和IP地址之间相互解析服务
2. 简单的HTTP协议
2.1 HTTP/1.1中可使用的方法
- GET:获取资源(查)
- POST:传输实体主体(改)
虽说POST功能与GET很相似,但POST的主要目的并不是获取响应的主体内容 - PUT:传输文件(增)
要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。 - DELETE:删除文件(删)
- HEAD:获得报文首部
与GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。 - OPTIONS:询问支持的方法
用来查询针对请求URI指定的资源支持的方法。 - TRACE:追踪路径(不常用,容易引发XST攻击)
让web服务器端将之前的请求通信环回给客户端的方法。 - CONNECT:要求用隧道协议连接代理
要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TSL协议把通信内容加密后经网络隧道传输。
格式:CONNECT 代理服务器名:端口号 HTTP版本
2.2 持久连接节省通信通信量
- 持久连接
持久连接旨在建立1次TCP连接后进行多次请求和响应的交互 - 管线化
以前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。
2.3 使用cookie的状态管理
HTTP是无状态协议,它不对之前发生过的请求和响应的状态进行管理。
于是引入cookie技术。
cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态。
cookie会根据从服务器发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
3. HTTP报文中的HTTP信息
3.1 请求/响应报文的结构
请求行:包含用于请求的方法,请求URI和HTTP版本
状态行:包含表明响应结果的状态码,原因短语和HTTP版本
首部字段:包含表示请求和响应的各种哦条件和属性的各类首部
一般有4中首部:通用首部,请求首部,响应首部和实体首部
其他:可能包含Cookie等
4. HTTP状态码
4.1 状态码的类别
状态码 | 类别 | 原因短语 |
---|---|---|
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
4.2 2XX 成功
- 200 OK:从客户端发来的请求在服务器端被正常处理了
- 204 No Content:服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。
- 206 Partial Content:客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。
4.3 3XX 重定向
- 301 Moved Permanently:永久性重定向。请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。
- 302 Found:临时性重定向。请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。
- 303 See Other:由于请求对于的资源存在另一个URI,应使用GET方法定向获取请求的资源。
与302的区别:303明确表示客户端应当采用GET方法获取资源。 - 304 Not Modified:客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发送请求未满足条件的情况后,直接返回304Not Modified(服务器端资源未改变,可直接使用客户端未过期的缓存)。304状态码返回时,不包含任何响应的主体部分。
- 307 Temporary Redirect:临时重定向,与302 Found有相同的含义。
4.4 4XX 客户端错误
- 400 Bad Request:表示请求报文中存在语法错误。
- 401 Unauthorized:表示发送的请求需要有通过HTTP认证的认证信息。另外,若之前已进行过1次请求,则表示用户认证失败。当浏览器初次接收到401响应,会弹出认证用的对话窗口。
- 403 Forbidden:表明对请求资源的访问被服务器拒绝了
- 404 Not Found:表明服务器上无法找到请求的资源。
4.5 5XX服务器错误
- 500 Internal Server Error:表明服务器端在执行请求时发生了错误。
- 503 Service Unavailable:表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。