《52讲轻松搞定网络爬虫》读书笔记 —— HTTP基本原理
URI 和 URL
URI :Uniform Resource Identifier,即统一资源标志符,
URL :Universal Resource Locator,即统一资源定位符。
举栗子,加深理解
链接https://github.com/favicon.ico,它是一个URI也是一个URL,唯一指向一个图标资源,可以通过URI/URL在互联网上找到它
URL和URI的关系
URL 是 URI 的子集,也就是说每个 URL 都是 URI,但不是每个 URI 都是 URL;URI还包括一个子类叫做URN(Uniform Resource Name),即统一资源名称
URN的作用
URN 只命名资源而不指定如何定位资源
举栗子
比如 urn:isbn:0451450523 指定了一本书的 ISBN,可以唯一标识这本书,但是没有指定到哪里定位这本书
URI、URL、URN的关系图

总结
但是在目前的互联网,URN 的使用非常少,几乎所有的 URI 都是 URL,所以一般的网页链接我们可以称之为 URL,也可以称之为 URI
HTTP协议
超文本
我们在浏览器里看到的网页就是超文本解析而成的,其网页源代码是一系列 HTML 代码,而这些可称为超文本
HTTP 和 HTTPS
HTTP:超文本传输协议
HTTP作用:从网络传输超文本内容到本地浏览器的协议,保证高效准确的传送超文本内容;最常用1.1版本
HTTPS:HTTP的安全版,在HTTP协议的基础上加了一层SSL协议,SSL属于安全协议
HTTPS的作用
- 建立一个安全传输通道,保证数据传输的安全性
- 确认网站的真实性,在浏览器可通过网站的证书查看它认证后的真实信息,也可以通过CA机构颁发的安全签章来查询
HTTP请求过程

在客户端(PC电脑或者手机)输入URL,回车后即可看到页面内容,那这个过程的原理是啥呢?
- 客户端发送请求到服务器
- 服务器接收请求,处理和解析请求
- 服务器返回对应的响应给浏览器
通过浏览器开发者工具的network看请求信息

- Name:请求名称,一般截取URL的最后一部分内容当名称
- Status:响应状态码
- Type:请求的文档类型
- Initiator:请求源,标记请求是由哪个对象或进程发起的
- Size:有三种类型 memory cache、disk cache、资源本身大小
- Time:完成一个请求事务的所需时间(发起请求-处理请求-返回响应)
- Waterfa:页面请求过程的可视化瀑布
memory cache、disk cache区别
memory cache:字面意思就是内存缓存,代表这个资源直接从内存获取, 不经过服务器,当关闭当前页面时,这个资源就被释放掉了
disk cache:硬盘缓存,代表这个资源从本地硬盘获取,也不经过服务器,但不会因关闭当前页面会释放掉,下次打开该页面,该资源仍然显示disk cache
细品一个请求的正确组成

首先,请求的组成部分
Request从客户端向服务端发送,可以分为4部分:请求方法(Request Method),请求网址(Request URL),请求头(Request Headers),请求体(Request Body)
然后,看General部分
已经包含了刚刚说的请求方法和请求网址
status code:响应状态码
Remote Address:远程服务器的地址和端口
Referrer Policy:Referrer 判别策略
请求方法

请求头
用来说明服务器要使用的附加信息,比较重要的信息有:Cookie、Refer、User-Agent
- Accept:请求报头域,用于指定客户端可接受哪些类型的信息。
- Accept-Language:指定客户端可接受的语言类型。
- Accept-Encoding:指定客户端可接受的内容编码。
- origin:请求协议+请求域名
- referer:请求资源地址,标识这个请求是从哪个页面;作用:服务器拿到这信息做处理,如来源统计、防盗链处理
- user-agent:俗称 UA ,让服务器识别客户端的操作系统、系统版本、浏览器版本等信息。在做爬虫时需要加上此信息,伪装成浏览器
- Content-type:互联网媒体类型,也称MIME类型,一般叫请求的媒体类型信息;常见的有:text/html 代表 HTML 格式,image/gif 代表 GIF 图片,application/json 代表 JSON 类型
- Cookie:存储用户信息,一般搭配服务端的Session使用
请求体
Query String Paramter:请求URL后面跟的请求参数,一般是GET请求的数据
Request Playload:请求数据,一般是POST请求的数据
POST请求提交数据方式和Content-Type的关系

细品响应的组成
一般分为三部分:响应状态码(Response Status Code)、响应头(Response Headers)、响应体(Response Body)
响应状态码

响应头
- 包含了:服务器对请求的应答信息,如 Content-Type、Server、Set-Cookie 等
- 常见响应信息有
- Date:响应产生的时间
- Last-Modified:资源的最后修改时间
- Content-Encoding:响应内容的编码
- Content-Length:响应内容长度
- Server:包含服务器的信息,比如名称、版本
- Content-Type:响应内容的文档类型,如果是接口响应,通常为application/json,也可能会加charset=utf-8指定字符集
- Set-Cookie:设置 Cookies。响应头中的 Set-Cookie 告诉浏览器需要将此内容放在 Cookies 中,下次请求携带 Cookies 请求
- Expires:指定响应的过期时间,可以让客户端将加载的内容更新到缓存中,如果再次访问时,可以直接从缓存中加载,降低服务器负载,缩短压缩时间
响应体
响应返回的内容都在响应体中,比如请求网页时,它的响应体就是网页的 HTML 代码;请求一张图片时,它的响应体就是图片的二进制数据;请求一个查询接口时,它响应体就是json字符串
《52讲轻松搞定网络爬虫》读书笔记 —— HTTP基本原理的更多相关文章
- 《52讲轻松搞定网络爬虫》读书笔记 - Session和Cookie
为什么要用Session和Cookie? 简单一句话,因为Session和Cookie可以记录用户状态信息 嘶..这到底啥意思呢? 背景一:动态网页的出现 什么是静态网页 含义:一个网页的内容是HTM ...
- 【转】轻松搞定FTP之FlashFxp全攻略
转载网址:http://www.newhua.com/2008/0603/39163.shtml 轻松搞定FTP之FlashFxp全攻略 导读: FlashFXP是一款功能强大的FXP/FTP软件,融 ...
- 【微服务】之四:轻松搞定SpringCloud微服务-负载均衡Ribbon
对于任何一个高可用高负载的系统来说,负载均衡是一个必不可少的名称.在大型分布式计算体系中,某个服务在单例的情况下,很难应对各种突发情况.因此,负载均衡是为了让系统在性能出现瓶颈或者其中一些出现状态下可 ...
- 【微服务】之五:轻松搞定SpringCloud微服务-调用远程组件Feign
上一篇文章讲到了负载均衡在Spring Cloud体系中的体现,其实Spring Cloud是提供了多种客户端调用的组件,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使 ...
- Python高级特性: 12步轻松搞定Python装饰器
12步轻松搞定Python装饰器 通过 Python 装饰器实现DRY(不重复代码)原则: http://python.jobbole.com/84151/ 基本上一开始很难搞定python的装 ...
- 【微服务】之七:轻松搞定SpringCloud微服务-API权限控制
权限控制,是一个系统当中必须的重要功能.张三只能访问输入张三的特定功能,李四不能访问属于赵六的特定菜单.这就要求对整个体系做一个完善的权限控制体系.该体系应该具备针区分用户.权限.角色等各种必须的功能 ...
- AFNetworking3.0+MBProgressHUD二次封装,一句话搞定网络提示
对AFNetworking3.0+MBProgressHUD的二次封装,使用更方便,适用性非常强: 一句话搞定网络提示: 再也不用担心网络库更新后,工程要修改很多地方了!网络库更新了只需要更新这个封装 ...
- 轻松搞定javascript变量(闭包,预解析机制,变量在内存的分配 )
变量: 存储数据的容器 1.声明 var 2.作用域 全局变量. 局部变量. 闭包(相对的全局变量): 3.类型 a.基本类型(undefi ...
- Webcast / 技术小视频制作方法——自己动手录制video轻松搞定
Webcast / 技术小视频制作方法——自己动手录制video轻松搞定 http://blog.sina.com.cn/s/blog_67d387490100wdnh.html 最近申请加入MSP的 ...
随机推荐
- android翻译应用、地图轨迹、视频广告、React Native知乎日报、网络请求框架等源码
Android精选源码 android实现高德地图轨迹效果源码 使用React Native(Android和iOS)实现的 知乎日报效果源码 一款整合百度翻译api跟有道翻译api的翻译君 RxEa ...
- nodejs快速测试
对于一些js功能,可以通过nodejs快速搭建测试环境 1.这里我们先通过express脚手架快速搭建一个项目,或者init一个空项目 2.mkdir script 3.这里假设我们的场景是MQTT接 ...
- win10安装mudbox失败,怎么强力卸载删除注册表并重新安装
一些搞设计的朋友在win10系统下安装mudbox失败或提示已安装,也有时候想重新安装mudbox的时候会出现本电脑windows系统已安装mudbox,你要是不留意直接安装mudbox,只会安装mu ...
- DjangoModels
传智博客的python的笔记 数据库配置 ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换 ...
- 介绍vue-cli脚手架config目录下index.js配置文件
1.config/index.js var path = require('path') module.exports = { build: { // production 环境 env: requi ...
- SpringMVC学习笔记二:参数接受
该项目用来介绍SpringMVC对参数接受的方法: 项目目录树:在前一个项目上修改添加 新添加了Student类和Group类,用来测试整体参数接受 Student.java package com. ...
- 算法基本概念及常用算法Python实现
基础算法概念: 时间复杂度 时间复杂度是从其增速的角度度量的, 时间复杂度一般用大O法表示. 递归 递归指的是调用自己的函数. 如果使用循环,程序性能可能更高: 如果使用递归,程序可能更容易理解. ...
- 20. API概览 Schemas
能被机器所理解的概要, 描述了通过api可得到的资源, URL, 表示方式以及支持的操作. API概要在很多使用场景下都是有用的工具, 例如生成参考文档, 或者驱动可以与API交互的动态客户端库. r ...
- O2O疯狂烧钱路:止血还是放血好
在国内,无论是互联网巨头还是创业者,很多都将O2O领域当做下一个金矿.而对于很多O2O项目来说,市场规模.用户基数.发展潜力等传统指数依然被当做硬性指标.而为了抢夺用户,很多O2O项目都只能疯狂烧钱, ...
- Linux IO多路复用
监听文件描述符的状态来进行相应的读写操作,3个函数: 123 selectpollepoll 123456789 int (int nfds, fd_set *readfds, fd_set *wri ...