URI, URL 与 URN
URI
* URI: 全称 Uniform Resource Identifier, 即统一资源标识符, 用来在互联网上唯一的标识某一特定的资源
* URI包含两个子集: URL 和 URN
URN
* URN: 全称 Universal Resource Name, 即统一资源名称, 只描述资源的名称, 而不定位 (很少使用)
例如: urn:isbn:0451450523 指定了一本书的ISBN, 可以唯一标识一本书, 但不能定位这本书的资源
URL
* URL: 全称Universal Resource Locator, 即统一资源定位符, 用来在互联网上唯一的定位某一特定的资源
例如: https://github.com/favicon.ico 定位到
URL的结构
scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment]
* scheme: 协议, 常见协议有http, https, ftp等
* username, password: 用户名和密码, 有些URL需要指定用户名和密码才能访问
* hostname: 主机地址, 可以是域名或IP地址, 用于在网络中唯一标识一台主机
* port: 端口, 用于在一台主机上唯一标识一个程序
http协议默认端口80, https协议默认端口443
* path: 路径, 即指定的资源在服务器上的目录地址
* parameter: 参数, 用来指定访问某个资源是的附加信息 (很少使用)
* query: 查询, 用来携带查询相关数据, 是现在常用的携带get请求参数的方式
query以键值对的形式出现, 多个键值对以&分隔, 例如: ?wd=nba&ie=utf-8
* fragment: 片段, 是对资源描述的部分补充, 可以用作单页面路由, 也可以用作HTML锚点
HTTP与HTTPS
HTTP
HTTP全称 Hypertext Transfer Protocol, 即超文本传输协议, 规定了服务端和浏览器之间交换数据的格式和规则
HTTP版本及特点
版本 | 产生事件 | 主要特点 | 发展现状 |
---|
HTTP0.9 | 1991年 | 不涉及数据报传输, 规定通信格式, 只能使用GET请求 | 没有作为正式标准 | HTTP1.0 | 1996年 | 内容格式不限, 增加PUT, PATCH, HEAD, OPTIONS, DELETE | 作为正式标准 | HTTP1.1 | 1997年 | 持久连接, 节约带宽, HOST域, 管道机制, 分块传输编码 | 正式作为标准并广泛应用 | HTTP2.0 | 2015年 | 多路复用, 服务器推送, 头信息压缩, 二进制协议等 | 逐渐覆盖市场 |
HTTPS
* HTTPS: 全称 Hypertext Transfer Protocol over Secure Socket Layer, 是建立在SSL层基础之上的安全版的HTTP协议
* 该协议传输的内容都是经过SSL加密的
* SSL会建立一个信息安全通道, 保证数据传输的安全性
* SSL可以确认网站的真实性
HTTP请求
HTTP请求格式
* 请求首行(HTTP协议版本信息, 当前请求方式, URL等)\r\n
* 请求头(键值对)\r\n
* \r\n
* 请求体(get请求体为空, post请求为提交的数据)\r\n
请求方式
请求及描述
方法 | 描述 |
---|
GET | 请求页面并返回页面内容 | HEAD | 类似于GET请求, 但没有响应的内容, 用于获取报头 | POST | 用于提交表单或上传文件, 数据包含在请求体中 | PUT | 用客户端发送的数据替代文档中的内容 | DELETE | 请求服务器删除指定页面 | CONNECT | 让服务器代替客户端访问其它网页 | OPTIONS | 允许客户端查看服务器性能 | TRACE | 回显服务器收到的请求, 用于测试或诊断 |
常用请求方式
* 常见的请求方式有: GET请求 和 POST请求
* 在浏览器地址栏输入网址并按回车, 就会发送一个GET请求
* 在登录页面填写用户名密码, 并点击登录按钮, 就会发送一个POST请求
GET请求与POST请求的区别
* GET请求的参数包含在URL中, 可以在地址栏看到, POST请求的参数包含在请求体中, 无法直接看到
* GET请求提交的数据最多1024字节, POST请求提交的数据没有大小限制
常见的请求头信息
* Accept: 指定客户端可以接受哪些类型的信息
* Accept-Langluage: 指定客户端可以接受的语言类型
* Accept-Encoding: 指定客户端可以接受的编码
* Host: 被请求的主机的IP和端口号, 即服务器或网管的位置
* Cookie: 服务器发送过来, 存储在浏览器本地的状态信息, 用于判断用户状态
* Referer: 标识请求是从哪个页面发过来的, 用于来源统计和防盗链
* User-Agent: 客户端使用的操作系统版本, 浏览器版本等信息, 通常是最简单的反爬机制
* Content-Type: POST请求携带的数据的类型
Content-Type与POST请求提交数据数据
Content-Type | POST提交数据的方式 |
---|
application/x-www-form-urlencoded | 表单数据 | multipart/form-data | 表单文件上传 | application/json | json数据 | text/html | XML数据 |
HTTP响应
HTTP响应格式
* 响应首行(HTTP协议版本信息, 响应状态码)\r\n
* 响应头(键值对)\r\n
* \r\n
* 相应体(与请求对应的HTML页面)\r\n
响应状态码
状态码 | 说明 | 详情 |
---|
100 | 继续 | 服务器已接收到请求的一部分, 正在等待其余部分 | 101 | 切换协议 | 请求者要求服务器切换协议, 服务器已确认并准备切换 | 200 | 成功 | 服务器已唱功处理了请求 | 201 | 已创建 | 请求成功, 并且服务器创建了新的资源 | 202 | 已接收 | 服务器已接收请求, 但尚未处理 | 203 | 非授权信息 | 服务器成功处理了请求, 但返回的信息可能来自另一个源 | 204 | 无内容 | 服务器处理了请求, 但没有返回内容 | 205 | 充值内容 | 服务器成功处理了请求, 内容被重置 | 206 | 部分内容 | 服务器成功处理了部分请求 | 300 | 多种选择 | 针对请求, 服务器可执行多种操作 | 301 | 永久移动 | 请求的网页已永久移动到新位置, 即永久重定向 | 302 | 临时移动 | 请求的网页暂时跳转到其它页面, 即暂时重定向 | 303 | 查看其它位置 | 如果原来的请求时POST, 重定向目标文档应该通过GET提取 | 304 | 未修改 | 此次请求返回的网页未经修改, 继续使用上次的资源 | 305 | 使用代理 | 请求这应该使用代理访问该网页 | 307 | 临时重定向 | 临时从其它位置响应请求的资源 | 400 | 错误请求 | 服务器无法解析该请求 | 401 | 未授权 | 请求没有进行身份验证或验证未通过 | 403 | 禁止访问 | 服务器拒绝此请求 | 404 | 未找到 | 服务器找不到请求的网页 | 405 | 方法禁用 | 服务器禁用了请求中指定的方法 | 406 | 不接收 | 无法使用请求的内容响应请求的网页 | 407 | 需要代理授权 | 请求者需要使用代理授权 | 408 | 请求超时 | 服务器请求超时 | 409 | 冲突 | 服务器在完成请求时发生冲突 | 410 | 已删除 | 请求的资源已永久删除 | 411 | 需要有效长度 | 服务器不接收不含有效内容长度标头字段的请求 | 412 | 未满足前提条件 | 服务器未满足请求者在请求中设置的某一个前提条件 | 413 | 请求实体过大 | 请求实体过大, 超出服务器的处理能力 | 414 | 请求URI过长 | 请求网址过长, 服务器无法处理 | 415 | 不支持类型 | 请求格式不被请求页面支持 | 416 | 请求范围不符 | 页面无法提供请求的范围 | 417 | 未满足期望值 | 服务器未满足期望请求标头字段的要求 | 500 | 服务器内部错误 | 服务器遇到错误, 无法完成请求 | 501 | 未实现 | 服务器不具备完成请求的能力 | 502 | 错误网关 | 服务器作为网关或代理, 接收到上游服务器的无效响应 | 503 | 服务不可用 | 服务器目前无法使用 | 504 | 网关超时 | 服务器作为网关或代理, 没有及时从上游服务器接收到响应 | 505 | HTTP版本不支持 | 服务器不支持请求中使用的HTTP协议版本 |
常见响应头信息
响应头包含了服务器对请求的应答信息, 常见响应头信息如下:
* Date: 响应产生的日期
* Last-Modified: 响应资源的最后修改时间
* Content-Encoding: 响应内容使用的编码
* Server: 服务器信息, 如名称, 版本号等
* Content-Type: 响应文档的类型, 比如text/html表示HTML文档, application/x-javascript表示JavaScript文件, Image/jpeg表示图片文件
* Set-Cookie: 告诉浏览器将此内容保存在本地Cookie中, 下次请求时带上此Cookie信息
* Expires: 过期时间
响应体
响应体是服务器依据请求返回给浏览器的真正的内容信息, 是爬虫爬取的目标, 其内容可能是HTML文档, json数据, 或其它多媒体文档等
HTTP相关书籍推荐
- 《计算机网络》
- 《图解HTTP》
- 《HTTP权威指南》
|