Python 爬虫 Request(请求头)和Response(响应头)的 内容详解 【爬虫资料二】

本文详细解析了Python爬虫中Request请求头和Response响应头的内容,包括请求行、请求方法(如GET、POST)、HTTP协议版本、请求头(如User-Agent、Accept)以及响应行、响应状态码、响应头中的Content-Type、Cache-Control等关键信息,讨论了HTTP缓存机制和Cookie的使用。

Resquest请求头【以访问知乎】为例(使用Fiddler抓的包)

请求行包含的信息:

                                 请求的方法(POST)  #其他的方法还有GET、HEAD、PUT、DELETE、OPTIONS、TRACE

                                 请求的路径(/aoi/v3/oauth/sign_in)

                                 请求的主机(www.zhihu.com)

                                 请求的协议 (HTTP/1.1)  #其他的方法还有HTTP/1.0、HTTP/2.0

【上面的列出来的请求方法不是所有的WEB SERVER都会被允许的】

请求方法:

  • GET】: 请求页面,并返回页面内容;
  • HEAD】:(获取响应头)和GET(获取资源)返回的内容基本一致:HEAD一般用于我们确认那个图片是否还存在,不需要返回图片
  • POST】:大多用于提交表单或上传文件,数据包含在请求体中;
  • PUT】:从客户端向服务器传送的数据取代指定文梢中的内容
  • DELETE】:请求服务器删除指定的页面
  • CONNECT】: 把服务器当作跳板,让服务器代替客户端访问其他网页
  • TRACE】(回显你的请求):比如说你想看服务器有没有修改的你的请求,服务器就会把最后收到的请求的信息返回给你(一般这种返回405,方法不被允许);主要用于诊断;
  • OPTIONS】:允许客户端查看服务器的性能

请求协议:

HTTP:超文本传输协议(Hyper Text Transfer Protocol )

  • HTTP 协议是用于从网络传输超文本数据到本地浏览器的传送协议,它能保证高效而准确地传送超文本文档

HTTPS:超文本传输协议(Hyper Text Transfer Protocol over Secure Socket Layer)

  • 即使:HTTP下加入SSL层加密
  • 建立一个信息安全通道来保证数据传输的安全
  • 确认网站的真实性,凡是使用了 HTTPS 的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过 CA 机构颁发的安全签章来查询

即HTTPS和HTTP也可统称为HTTP协议

HTTP协议HTTP/1.0  一次请求-响应,建立一个连接,用完关闭;每一个请求都要建立一个连接;

                         HTTP/1.1  Pipeling解决方式为,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞;

                        HTTP/2.0 多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行


HEADER请求头信息:(key:value)

  • User_Agent(客户端信息): Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0(客户端的信息:浏览器,操作系统,浏览起的版本)
  • Accept(请求报头域,用于指定客户端可接受哪些类型的信息):  text/html,application/xhtml+xml,application/xml;q=0.9 (客户端支持接受的信息类型:文本信息,q=0.9(表示权重))    # image/webp,image/apng,/;q=0.9(接受的图片信息)       */*(表示所有的信息)
  • Accept-Language(指定客户端可接受的语言类型):zh-CN,zh;q=0.9 (客户端支持接受的语言:中文,q:权重 以逗号隔开,zh-CN的优先级高于zh,zh的权重占0.9)   #  en-US,en,q=0.5 (英文的格式)
  •  Accept-Encoding(指定客户端可接受的内容编码):gzip, deflate, br (客户端支持的解码格式)   #服务器传输的时候会对内容进行压缩,解压的时候是客户端(浏览器)自动解压
  •  Accept-Length:712(客户端支持的数据长度)
  • Accept-Charset:gbk,utf-8;q=0.8 (客户端支持的字符集)
  • Content-Type(也叫互联网媒体类型( Internet Media Type )或者 MIME 类型,在 HTT 协议消息头中,它用来表示具体请求中的媒体类型信息):application/x-www-form-urlencoded (请求体的协议类型:表单形式的(POST)) # get请求这里是空的,post请求实在body中和数据一起发送的,
    • 【application/x-www-forrn-urlencoded】 : 表单数据
    • 【multi part/form-data】:表单文件上传
    • 【application/json】:序列化 JSON 数据,用这个类型需要参数本身就是json格式的数据,参数会被直接放到请求实体里,不进行任何处理。服务端/客户端会按json格式解析数据 
    • 【text/xml】:XML 数据

 

  •  Connectiong:keep-alive (此处的连接是指TCP(传输层)而不是HTTP)       #Keep-alive详细说明
  • HOST:用于指定请求资源的主机 IP 和端口号,其内容为请求 URL 的原始服务器或网关的位置,从HTTP1.1版本开始
  •  Cookie:也常用复数形式 Cookies ,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据 它的主要功能是维持当前访问会话 例如,我们输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时,会发现都是登录状态,这就是 Cookies 的功 Cookies 里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上 Cookies 并将其发送给服务器,服务器通过 Cookies 识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容、
  •  Referer(此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这 信息并做相应的处理,如做来源统计、防盗链处理等): https://segmentfault.com/q/1010000002578217/a-1020000002578576   (表示信息来源,可以做网站统计) 防盗链    #挺全的
  •   Cookic-Control:缓存机制  找了个详细的   #http请求头缓存j

我们再用Fiddler抓包(其他抓包工具)的时候都遇到过【304-未修改(取得时缓存,减轻服务器压力)】

我们第一次向服务请求的时候

Request

Response   【响应头会返回Last-Modified:图片的最后的修改的日期】

 

当我们第二次发送请求的时候

Request  【客户端给服务器,信息向服务器确认】

If -Modified-Since】:向服务器确认这个图片在这个时间之后又没有修改,如果在这个时间之后修改了请给我最新的

If-Modified-Match】:携带的第一次请求时候ResposeEtage,这是在服务器中生成的哈希值

                                       第二次在次服务器就会携带这个哈希值If -Modified-Since一同去匹配,如果改了,就给最新的;没有修改,就读取本地缓存

Response

响应头信息会显示 304 Not Modified

Last-Modified、Etag一同返回回来

 


Response请求头【以访问知乎】为例(使用Fiddler抓的包)

 

响应行信息:

  •   协议(HTTP/1.1)  #HTTP/1.0  #HTTP2.0已经在请求行信息的时候说明过了
    • 状态码(200:请求被服务器成功处理)  #还有其他  404(页面找不到)/304(未修改:取得是本地的缓存,服务器为修改)/  301/302(永久/临时重定向)/ 307(重定向中保持原有的数据请求)/ 500(服务器内部错误)/ 503(服务区暂时不可用)这些都是常见的状态码
  •  状态文字:ok    #一般是状态码和文字连用,状态码的进一步说明例如:304  : No  Modified
  •  Server:包含务器的信息 ,比如 、版本号等

响应头信息:

  •  Content-Type:applicatuon/json    #响应的信息类型和字符集  截图的例子中,只是响应的数据类型,没有字符集,这部分在Request中响应头信息的Contrnt-Type的类型是一样,这里就不多说了(可以看下Request种的请求头信息)
  •  Content-Length:231     #响应的内容长Re度
  • Connection:keep-alive   # 和Request中响应头信息的Connection是一样,这里就不多说了(可以看下Request种的请求头信息)
  • Date(标识响应产生的时间):Sun, 29 Mar 2020 04:26:40 GMT  #响应报文的时间
  •  Cache-Control:no-cache, no-store, must-revalidate, private, max-age=0  # 缓存机制  找了个详细的  #HTTP请求头的缓存
  •   Expires(指定响应过期时间, 可以使代理务器或浏览器将加载的内容更新到缓存中,如果再次访问时,就可直接从缓存中加载, 降低服务器负载,缩短 加载时间):Thu, 01 Jan 1970 08:00:00 CST   #缓存过期的日期的
  •   Set-Cookie(设置 Cookie 应头中的 Set Cook 告诉浏览器需要将此内容放在 Co kies中,下次请求携带Cookies请求):响应头中有Set-Cookie: username=JasonChi,那么浏览器会在当前页面所在域名设置cookie字符串。 # Set-Cookie:的解说说明
  • Last-Modified :指定资源 最后修改时间

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值