HTTP 协议,即超文本传输协议,是 Web 系统最核心的内容,用于从 Web 服务器传输数据到客户端。
- text/html:HTML 格式的文本文档。
- image/jpeg:JPEG 格式的图片。
- image/png:PNG 格式的图片。
- image/webp:无损格式的图片。
- image/gif:GIF 格式的图片。
- text/plain:普通的 ASCII 文本文档。
- application/json:JSON 格式的内容。
- video/mp4:MP4 格式的视频。
- video/quicktime:Apple 的 QuickTime 视频(MOV 格式的视频)。
- video/x-msvideo:AVI 格式的视频。
- video/x-flv:FLV 格式的视频。
HTTP 是应用层协议,其数据在网络中传输需要依赖于 TCP/IP 协议
TCP(Transmission Control Protocol),即传输控制协议,用于保证数据在两台主机之间传输的可靠性
TCP 实行“顺序控制”(数据会按照发送的顺序到达)和“重发控制”(传输数据时,为每个数据包启动一个超时定时器,如果定时器在超时之前,接收方确认了信息,则释放数据包占用的缓存区,否则,发送方就重新发送这个数据包)。
IP(Internet Protocol),即网际协议,负责将数据包从源发送到最终的目标计算机,但不提供可靠性传输,也不具备“重发控制”。
TCP/IP 协议通常被认为是具有 4 个层次的系统
- 应用层:该层位于计算机网络体系结构的最上层,其他三层为其服务。日常开发以及使用的应用软件便处于应用层,如使用浏览器访问网页。TCP/IP 协议的应用架构多采用客户端/服务端(Client/Server)模型,即客户端(如浏览器)向服务端(服务器)发送请求,服务端向客户端传送数据。因此,可以看出HTTP 协议处于应用层。
- 传送层:该层用于保证客户端与服务端之间的数据传输。
- 网络层:该层用于选择合适的网间路由和交换节点,处理网络中流动的数据包(数据传输的最小单位)。
- 数据链路层:该层又称为网络接口层,用于处理连接网络的硬件部分,包括操作系统、硬件驱动设备、网卡和光纤等。
在进行网络通信前,需要通过 URL 建立客户端与服务器之间的连接。
- 统一资源定位符,是统一资源标识符 URI(UniformResource Identifier)的子集
- 描述了请求资源在某个特定服务器的位置信息。基于 URL,可以精确地定位到网络资源。
- 协议:该 URL 使用的协议为 HTTP,在 HTTP 后面跟“://”。有很多网站,从安全角度考虑,使用的是安全超文本传输协议(HyperText Transfer ProtocolSecure,HTTPS)。
- HTTPS 在 HTTP 的基础上加入了安全套接层(Secure SocketsLayer,SSL)。SSL 主要用于客户端与服务器之间的身份认证和数据加密传输,其支持使用 X509 数字认证。如使用 HttpClient 处理一些 HTTPS 对应的 URL时,需要创建定制的 SSL 连接
- 端口:位于域名的后面,域名和端口采用“:”分隔。如果使用默认端口号 80, URL 可以省略端口信息
- 域名:没有域名,则必须有客户端可以访问到的主机 IP 地址
- 路径:由多个“/”隔开的字符串组成,表示主机上的一个目录或文件地址。
- 参数:以“?”开始,采用 name=value 的格式。URL 中的参数可以有多个,参数之间用一个“&”隔开。
浏览器(客户端)获取服务器资源的详细步骤
- 浏览器从输入的URL中解析出服务器的域名和端口号(如果没有端口号,则为 80)。
- 浏览器将服务器的域名转化为服务器的 IP 地址。
- 基于服务器的 IP 地址及端口号,建立浏览器与服务器的 TCP 连接。
- 浏览器向服务器发送 HTTP 请求报文。
- 基于浏览器请求内容,服务器向浏览器返回相应的 HTTP 响应报文。
- 浏览器获取响应报文并解析报文。
- 关闭连接。
报文是指以一定格式组织起来的数据
- 请求报文包括请求方法、请求的 URL、版本协议以及请求头信息。请求头信息包括Host、User-Agent 和 Accept 等。
- 响应报文包括请求协议、响应状态码、响应头信息和响应内容。响应头信息包括 Cache-Control、Content-Type 和 Content-Encoding 等
HTTP 请求方法
- 客户端向服务器发送请求时,需要确定使用的请求方法(也称为动作)。
- 请求方法表明了对 URL 指定资源的操作方式,服务器会根据不同的请求方法进行不同的响应。
- 不同的请求方法 常用放大GET和POST
- GET:发送请求获取服务器上的某特定资源。例如,HTML 文档、PDF 和图片等。GET 是相对常见的 请求方法,但安全性较低。大多数网络爬虫,都采用GET 获取网络资源。
- POST:向服务器提交数据,请求服务器进行处理。在通常情况下,表单提交操作需要使用 POST。
- HEAD:与 GET 类似,只会从服务器获取资源的头信息,不能获取响应内容。
- PUT:使用客户端向服务器传送的数据取代指定的内容。
- DELETE:请求服务器删除指定资源。
- CONNECT:在客户端配置代理的情况下,使用 CONNECT 建立客户端与服务器之间的联系。
- OPTIONS:询问服务器支持的请求方法,允许客户端查看服务器的性能。
- TRACE:对可能经过代理服务器传送到服务器上的报文进行追踪。
HTTP 状态码
HTTP 状态码由 3 位数字组成,描述了客户端向服务器请求过程中发生的状况。
状态码的第一个数字描述了状况类型(成功、重定向等)
image.png
- 200:表示客户端发送的请求已被服务器正常处理。
- 204:表示客户端发送的请求已被服务器正常处理,但在返回的响应报文中不包含实体的主体部分。
- 301:永久性重定向,表示请求资源已被分配到新的 URL。
- 302:临时性重定向,表示请求资源已被临时分配到新的 URL,希望用户能使用新的 URL 访问,如用户登录某网站后会通过 302 跳转到登录后的主页
- 303:临时重定向,告知客户端请求的资源存在另一个 URL,应使用 GET 方法定向获取请求资源。
- 403:表示客户端的请求被服务器拒绝,一般不说明拒绝的原因。使用网络爬虫短时间内获取大量数据时,会被服务器认定为攻击行为,服务器可能产生拒绝行为,同时本机的 IP 也会被封。
- 404:表示服务器无法找到 URL 对应的资源。通常服务器会返回一个实体,以便在客户端展示给用户
- 500:表示服务器在执行请求时发生了错误,也有可能是 Web 应用存在 bug或临时故障。
- 503:表示服务器暂时处于超负载或正在进行停机维护状态,无法处理请求。
通用头
通用头既可以在请求信息中出现也可以在响应信息中出现,其提供了与报文相关的基本信息
image.png
-
Cache-Control:指令可按请求和响应分类。请求消息中的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh 和 only-if-cached 等,响应消息中的指令包括 public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate 和 max-age 等
image.png -
Connection:主要指令有 Upgrade、keep-alive、close。Upgrade 用于检测协议是否可以使用更高版本连接控制不在转发给代理头字段。HTTP/1.1 版本的请求默认使用持久连接,当服务器想断开连接时,则 Connection 指定为 close。HTTP/1.1 之前的 HTTP 版本默认使用非持久连接,当客户端想要保持网络连
接打开时,则 Connection 指定为 keep-alive。
image.png
书籍参考:《网路数据采集技术—Java网络爬虫与实战》
网友评论