热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:网络爬虫基础之HTTP基本原理(附相关HTTPS知识)

篇首语:本文由编程笔记#小编为大家整理,主要介绍了网络爬虫基础之HTTP基本原理(附相关HTTPS知识)相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了网络爬虫基础之HTTP基本原理(附相关HTTPS知识)相关的知识,希望对你有一定的参考价值。






ins @bbc_travle


前言


本文旨在通过讲解HTTP的原理来为后续的网络爬虫实践打下基础,其中HTTP图文来源于[1]。


随着越来越多的网站向HTTPS发展,了解HTTPS的相关知识也是很有必要的,所以在本文的最后部分补充了相关HTTPS知识。


目录



  • URI 和 URL


  • 超文本


  • HTTP 和 HTTPS


  • HTTP 请求过程


  • 请求



    • 请求方法


    • 请求的网址


    • 请求头


    • 请求体



  • 响应



    • 响应状态码


    • 响应头


    • 响应体



  • HTTPS相关知识



    • 概念转换


    • 数字证书


    • CA


    • CA工作流程


    • SSL协议


    • HTTPS请求流程






HTTP相关知识撞库了,参看文末左下方阅读链接即可。


直接进入到HTTPS知识。


HTTPS相关知识


概念转换


为方便下面相关概念理解,先参考图9。



网络爬虫基础之HTTP基本原理(附相关HTTPS知识)

图9. 概念转换


数字证书


数字证书(digital certificate)是指在互联网通讯中标志通讯各方身份信息的一个数字认证,人们可以在网上用它来识别对方的身份。


数字证书包含拥有者的身份信息,颁发机构的签名,公钥和私钥。身份信息用于证明证书持有者的身份;颁发机构的签名用于保证身份的真实性;公钥和私钥用于通信过程中加解密,从而保证通讯信息的安全性。


CA


CA是 Certificate Authority 的缩写,也叫“证书授权中心”。它是负责管理和签发证书的第三方机构,作用是检查证书持有者身份的合法性,并签发证书,以防证书被伪造或篡改。


所以,CA实际上是一个机构,负责“证件”印制核发。就像负责颁发身份证的公安局、负责发放行驶证、驾驶证的车管所。


CA工作流程


CA是基于非对称加密算法来工作的,Bob会先把自己的 public key(和一些其他信息)交给CA。CA用自己的 private key 加密这些数据,加密完的数据称为Bob的数字证书。


现在Bob要向Alice传递 public key,Bob传递的是CA加密之后的数字证书。Alice收到以后,会通过CA发布的CA证书(包含了CA的public key),来解密Bob的数字证书,从而获得Bob的public key


此外,CA把自己的CA证书集成在了浏览器和操作系统里面。Alice拿到浏览器或者操作系统的时候,已经有了CA证书,没有必要通过网络获取,这有效避免了中间人劫持的问题。




图10. CA工作流程


SSL协议


SSL协议(Secure Sockets Layer 安全套接字协议),位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:


SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。


SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。




图10. 安全机制


HTTPS请求流程





  • 用户向web服务器发起一个安全连接的请求;



  • 服务器返回经过CA认证的数字证书,证书里面包含了服务器的
    public key



  • 用户拿到数字证书,用自己浏览器内置的CA证书解密得到服务器的
    public key



  • 用户用服务器的
    public key  加密一个用于接下来的对称加密算法的密钥,传给web服务器;



  • 因为只有服务器有
    private key  可以解密,所以不用担心中间人拦截这个加密的密钥;



  • 服务器拿到这个加密的密钥,解密获取密钥,再使用
    对称加密算法,和用户完成接下来的网络通信;


参考资料


[1] Python3网络爬虫开发实战


[2] 浅谈SSL/TLS工作原理


[3] 数字证书、CA、CA证书,傻傻分不清楚?这一篇看懂!




推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有