AI智能
改变未来

2 网页前端基础HTTP

2 网页前端基础

  • HTTP
  • 2.1 HTTP请求方式与过程
  • 1 请求方法
  • 2. 请求(request)与响应(response)
  • Request
  • Response
  • 2.2 常见HTTP状态码
    • 1.HTTP状态码种类
    • 2. 常见HTTP状态码
  • 2.3 HTTP头部信息
    • 1. HTTP头部类型
    • 2 常用的字段
  • 2.4 Cookie
    • 1. Cookie机制
    • 2. Cookie的存储方式
    • 3. Cookie的实现过程
  • Socket
  • 2.5 Python网络编程Socket库
    • 1. socket协议类型
    • 2. socket函数
  • 2.6 使用Socket进行TCP编程
    • 1. 服务器端TCP连接
    • 2. 客户端TCP连接
  • 2.7 使用Socket进行UDP编程
    • 1. 服务器端UDP连接
    • 2. 客户端UDP连接

    HTTP

    2.1 HTTP请求方式与过程

    爬虫在爬取数据时将会作为客户端模拟整个HTTP通信过程,该过程也需要通过HTTP协议实现。HTTP请求过程如下。
    由HTTP客户端向服务器发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。
    HTTP服务器从该端口监听客户端的请求。
    一旦收到请求,服务器会向客户端返回一个状态,比如“HTTP/1.1 200 OK”,以及返回的响应内容,如请求的文件、错误消息、或其它信息。

    1 请求方法

    在HTTP/1.1协议中共定义了8种方法(也叫“动作”)来以不同方式操作指定的资源,常用方法有GET、HEAD、POST等。

    直接可以获取到网页的源代码,一般使用GET方法

    需要通过客户端向服务器传输数据时,需要用到POST方法

    2. 请求(request)与响应(response)

    HTTP协议采用了请求/响应模型。

    • 客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。
    • 服务器以一个状态行作为响应,响应的内容包括协议的版本、响应状态、服务器信息、响应头部和响应数据。

    客户端与服务器间的请求与响应的具体步骤如下。

    • 连接Web服务器:由一个HTTP客户端发起连接,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
    • 发送HTTP请求:客户端经TCP套接字向Web服务器发送一个文本的请求报文。
      服务器接受请求并返回HTTP响应:Web服务器解析请求,定位该次的请求资源。之后将资源复本写至TCP套接字,由客户端进行读取。
    • 释放连接TCP连接:若连接的connection模式为close,则由服务器主动关闭TCP连接,客户端将被动关闭连接,释放TCP连接;若connection模式为keepalive,则该连接会保持一段时间。
    • 客户端解析HTML内容:客户端首先会对状态行进行解析,之后解析每一个响应头,最后读取响应数据。

    Request

    请求方式:主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等。
    请求URL:URL全称统一资源定位符,如一个网页文档、一张图片、一个视频等都可以用URL唯一确定。
    请求头:包含请求时的头部信息,如User-Agent、Host、Cookies等信息。
    请求体:请求时额外携带的数据,如表单提交时的表单数据

    Response

    响应状态:有多种响应状态,如200代表成功、301跳转、404找不到页面、502服务器错误
    响应头:如内容类型、内容长度、服务器信息、设置Cookie等等。
    响应体:最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等。

    2.2 常见HTTP状态码

    1.HTTP状态码种类

    HTTP状态码是用来表示网页服务器响应状态的3位数字代码,按首位数字分为5类状态码。

    2. 常见HTTP状态码

    2.3 HTTP头部信息

    HTTP头部信息(HTTP header fields)是指在超文本传输协议(HTTP)的请求和响应消息中的消息头部分。头部信息定义了一个超文本传输协议事务中的操作参数。在爬虫中需要使用头部信息向服务器发送模拟信息,通过发送模拟的头部信息将自己伪装成一般的客户端。

    1. HTTP头部类型

    HTTP头部类型按用途可分为:

    通用头,请求头,响应头,实体头


    通用头:既适用于客户端的请求头,也适用于服务端的响应头。与HTTP消息体内最终传输的数据是无关的,只适用于要发送的消息。
    请求头:提供更为精确的描述信息,其对象为所请求的资源或请求本身。新版HTTP增加的请求头不能在更低版本的HTTP中使用,但服务器和客户端若都能对相关头进行处理,则可以在请求中使用。
    响应头:为响应消息提供了更多信息。例如,关于资源位置的描述Location字段,以及关于服务器本身的描述使用Server字段等。与请求头类似,新版增加的响应头也不能在更低版本的HTTP版本中使用。
    实体头:提供了关于消息体的描述。如消息体的长度Content-Length,消息体的MIME类型Content-Type。新版的实体头可以在更低版本的HTTP版本中使用。

    2 常用的字段

    2.4 Cookie

    HTTP是一种无状态的协议,客户端与服务器建立连接并传输数据,在数据传输完成后,本次的连接将会关闭,并不会留存相关记录。
    服务器无法依据连接来跟踪会话,也无法从连接上知晓用户的历史操作。这严重阻碍了基于Web应用程序的交互,也影响用户的交互体验。
    某些网站需要用户登录才进一步操作,用户在输入账号密码登录后,才能浏览页面。对于服务器而言,由于HTTP的

    无状态性

    ,服务器并不知道用户有没有登录过,当用户退出当前页面访问其他页面时,又需重新再次输入账号及密码。

    1. Cookie机制

    为解决HTTP的无状态性带来的负面作用,Cookie机制应运而生。Cookie本质上是一段文本信息。
    当客户端请求服务器时,若服务器需要记录用户状态,就在响应用户请求时发送一段Cookie信息。
    客户端浏览器会保存该Cookie信息,当用户再次访问该网站时,浏览器会把Cookie做为请求信息的一部分提交给服务器。
    服务器对Cookie进行验证,以此来判断用户状态,当且仅当该Cookie合法且未过期时,用户才可直接登录网站。

    2. Cookie的存储方式

    Cookie由用户客户端浏览器进行保存,按其存储位置可分为

    内存式存储

    硬盘式存储


    内存式存储将Cookie保存在内存中,在

    浏览器关闭后就会消失,由于其存储时间较短

    ,因此也被称为非持久Cookie或会话Cookie。
    硬盘式存储将Cookie保存在硬盘中,其

    不会随浏览器的关闭而消失,除非用户手工清理或到了过期时间

    。由于硬盘式Cookie存储时间是长期的,因此也被称为持久Cookie。

    3. Cookie的实现过程

    客户端与服务器间的Cookie实现过程的具体步骤如下。

    • 客户端请求服务器:客户端请求网站页面
      服务器响应请求:Cookie是一种字符串,为key=value形式,服务器需要记录这个客户端请求的状态,在响应头中增加一个Set-Cookie字段。
    • 客户端再次请求服务器:
      客户端会对服务器响应的Set-Cookie头信息进行存储。
      当再次请求时,将会在请求头中包含服务器响应的Cookie信息。

    Socket

    2.5 Python网络编程Socket库

    • 套接字(socket)
      网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
      套接字是socket的通常叫法,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。
      Python中Socket库为操作系统的socket实现提供了一个Python接口。

    1. socket协议类型

    2. socket函数

    • 服务器端Socket函数:socket库中的服务器端函数仅供服务器使用。
    • 客户端Socket函数:socket库中的客户端函数仅供客户端使用。
    • 公共Socket函数:socket库中的公共函数即可在服务器端使用也可在客户端使用,为通用函数。

    2.6 使用Socket进行TCP编程

    TCP连接由客户端发起,服务器对连接进行响应。
    建立一个服务器,服务器进程需要绑定一个端口并监听来自其他客户端的连接。
    若有客户端发起连接请求,服务器就与该客户端建立Socket连接,随后的通信就通过此Socket连接进行。
    服务器依赖服务器地址,服务器端口,客户端地址,客户端端口这4项来唯一确定一个Socket连接。

    1. 服务器端TCP连接

    建立服务器端的TCP连接,具体步骤如下。
    在Python中创建一个基于IPv4和TCP协议的Socket。
    绑定监听的地址和端口,地址使用本机地址“127.0.0.1”或“local host”,使用大于1024的端口。
    调用listen方法开始监听端口,传入的参数指定等待连接的最大数量,设定为5。
    创建一个tcp函数,该函数在连接建立后,服务器端首先发出一条表示连接成功的消息,然后等待客户端数据,再加上欢迎信息发送给客户端。若客户端发送exit字符串,则直接关闭连接。
    通过一个循环接受来自客户端的连接,使用accept函数等待并返回一个客户端的连接,每个连接都分配一个新线程来处理。

    2. 客户端TCP连接

    在服务器端TCP连接建立后,建立客户端TCP连接进行测试,具体步骤如下。
    与服务器端的协议保持一致,也建立一个基于IPv4和TCP协议的Socket。
    与服务器端建立连接,连接的地址与端口需与服务器端保持一致。
    使用recv函数接受服务器提示信息,之后再使用send函数发送数据至服务器,可看到服务器返回的结果。

    2.7 使用Socket进行UDP编程

    TCP建立的连接可靠,通信双方以流的形式互相传送数据。相对TCP协议,UDP则是面向无连接的协议。
    使用UDP协议时,无需建立连接的过程,仅需知道对方的IP地址及端口号,便可直接发送数据包,但无法保证能顺利传达到。
    虽然用UDP传输数据不可靠,但其传输速度比TCP快,对于不要求可靠到达的数据,就可以使用UDP协议。
    UDP传输通常应用在通讯实时性要求更高于可靠性场景,例如网络游戏。

    1. 服务器端UDP连接

    UDP连接与TCP连接类似,也分为服务器端和客户端,不同的是UDP连接无需调用listen方法,直接接受来自任何客户端的数据。
    建立UDP连接,服务器端同样需要绑定地址与端口。
    使用recvfrom方法返回数据及客户端的地址与端口。
    当服务器收到数据后,直接调用sendto把数据用UDP发给客户端。

    2. 客户端UDP连接

    客户端使用UDP连接时同样需要先创建socket。
    之后无需使用connect方法,直接用sendto方法发送数据至服务器建立UDP连接,服务器端同样需要绑定地址与端口。
    UDP连接与TCP连接可同时使用同一端口互不冲突,两者使用的端口是独立绑定的。

    赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » 2 网页前端基础HTTP