zoukankan      html  css  js  c++  java
  • 从头学习网络编程——网络编程学习笔记 :什么是HTTP与CGI?

    一直有在学习Python的网络爬虫,但是由于没有网络编程的基础,导致抓包过程及其漫长艰辛,于是痛定思痛,决定从今天开始好好学习网络编程。

    本日学习笔记内容来自:什么是http协议?//十分钟搞懂什么是CGI

    HTTP与CGI——电话线和电话机

    http协议用于客户端和服务器之间的数据传输通信,是一种通信传输规定。

    CGI则是位于服务器中的脚本文件,负责根据传输到服务器的数据执行输入/输出,因此几乎任何编程语言都能够实现CGI脚本,也正是将不同程序上线到服务器的主要方式。

    二者就想电话线和电话机的关系,在网络编程中缺一不可。

    当你点击URL时发生了什么

    注意HTTP是一种网络通信协议!什么是协议,就是一种规范和规定,不符合该规范的请求方式都是非法的,会被所有使用HTTP协议的服务器拒绝访问。

    在http的规范下,一切网络通信才有意义,因此CGI脚本的编写方法也顺从http协议。

    HTTP基本的通信规范步骤

    浏览器发起http请求:

      输入URL:

         URL的输入方式被http严格规范,无论是在地址栏输入还是点击链接访问,本质是一样的。

         http规范让我们能够以通用的方式访问几乎所有网站,比如我知道百度的URL是www.baidu.com,因此就知道博客园的地址是www.cn-blog.com而不是qqq+cn-blog+com.

      发起http请求:

        学习爬虫的人都应该懂得分析爬取网页,当我们点击F12打开控制台时,点击Network就能看到在所有请求的URL中各种的Request Header(注意访问一个网页不代表访问了一个URL,而是可能访问了

        很多URL,包括CSS文件、js文件等等)。

        而http请求包括三个部分,请求行/请求头/请求体。

        请求行包括GET和POST方式,相当于告诉服务器你要干什么,两者对应的请求行格式不同,但均为字符串样式,参考POST和GET的区别

        请求头相当于告诉服务器关于你的信息,即告诉服务器你是谁,包括Cookie、浏览器信息等,爬虫伪装常常使用构造header实现欺骗服务器从而模拟浏览器。

        请求体是POST方法所特有的(如果GET带上请求体的话会被大多数服务器忽略),相当于你想向服务器传递什么信息,常用于文本输入(比如我在写博客)、登录密码等。

      服务器处理http请求:

        首先是检查你说话说的对不对。也许听起来很好笑,但是要注意,http是严格的协议,而其规定了URL中是不能携带汉字等不符合规范的字符的。

        但是我们在百度的搜索栏、在URL的地址栏都能直接输入文字并正常访问,这是为什么呢?原因就是使用了编码,而编码准确来说是信息还未传出你的电脑时进行的(本地编码)。

        编码主要有浏览器编码和js编码,具体情况请参考URL编码的混乱局势,注意不同编码方式的实现结果不同

        其次是进入服务器进行处理,在这里我们讨论调用CGI脚本的情况。

        当调用CGI脚本时(比如使用POST提交信息或者请求下载文件时),CGI通过读取符合HTTP协议规范的字符串来知道你需要它处理什么数据,从而实现CGI脚本的输入。

        注意CGI实质上就是一个程序,输入、输出,就是这样的黑箱。

        CGI的编程规范请参考Python的CGI编程,基本对所有编程语言都是 从请求中读取数据——处理——以符合http规范的方式返回数据

        CGI处于服务器范围,能够通过对请求的信息对服务器数据进行处理(比如用户上传文件,CGI则读取并保存在服务器)并以合适方式返回处理信息(比如用户请求下载数据,CGI找到数据并返回)。

      服务器的响应请求:

        响应分为响应码/响应头/响应体

        响应码就是我们所熟悉的404和405等等,其反映了服务器响应情况,相当于服务器告诉你你的请求被处理的状态。

        响应头反映服务器的状态,包括服务器是否启用压缩、程序所用服务端的语言,还可以定义缓存情况。

        响应体就是服务器返回的信息,通常情况下都是html代码,也可以是其他代表信息的代码(json等)。

  • 相关阅读:
    POJ 3630 Phone List/POJ 1056 【字典树】
    HDU 1074 Doing Homework【状态压缩DP】
    POJ 1077 Eight【八数码问题】
    状态压缩 POJ 1185 炮兵阵地【状态压缩DP】
    POJ 1806 Manhattan 2025
    POJ 3667 Hotel【经典的线段树】
    状态压缩 POJ 3254 Corn Fields【dp 状态压缩】
    ZOJ 3468 Dice War【PD求概率】
    POJ 2479 Maximum sum【求两个不重叠的连续子串的最大和】
    POJ 3735 Training little cats【矩阵的快速求幂】
  • 原文地址:https://www.cnblogs.com/Nortonary/p/12857348.html
Copyright © 2011-2022 走看看