【Python】【有趣的模块】【requests】【一】HTTP头信息总结
【HTTP请求 == 请求行 + 消息报头 + 请求正文 】
请求行:Method Request-URL HTTP-Version CRLF
HTTP协议定义了许多与服务器交互的方法
① PUT:请求服务器存储一个资源,并用Request-URL作为其标识。
【备注】1. 相对于POST是安全和幂等的(当操作没达到预期,我们可以不断重试,而不会对资源产生副作用。)
2. 创建操作可以使用POST,也可以使用PUT,区别在于POST是作用于一个集合资源之上(/articles)的,而PUT操作是作用在一个具体资源之上(/articles/123),再通俗点说,如果URL在客户端确定,就用PUT,如果在服务器端确定,用POST,比如说很多资源使用数据库自增主键作为标识信息,而创建的资源的标识信息到底是什么要服务端提供,这时就必须用POST。
② POST:在Request-URL所标识的资源后附加新的数据。
③ GET:请求由Request-URL所标识的资源。
④ HEAD:请求由Request-URL所标识资源的响应消息报头。
⑤ DELETE:请求服务器删除由Request-URL所标识的资源。
⑥ TRACE:请求服务器回送收到的请求信息,主要用于测试和诊断。
⑦ CONNECT:保留将来使用。
⑧ OPTIONS:请求查询服务器的性能,或查询与资源相关的选项和需求。
Request-URL :统一资源标识。
HTTP-Version:HTTP的版本。
CRLF:回车换行。(/r/n)
【HTTP响应 == 状态行 + 消息报头 + 响应正文】
状态行 == HTTP-Version(协议版本) Status-Code(返回码) Reason-Phrase(状态描述) CRLF
状态码
- 1xx:指示信息--表示请求已接收,继续处理。
- 2xx:成功--表示请求已被成功接收、理解、接受。
- 3xx:重定向--要完成请求必须进行更进一步的操作。
- 4xx:客户端错误--请求由语法错误或请求无法实现。
- 5xx:服务器端错误--服务器未能实现合法的请求。
详细
200 OK 客户端请求成功
400 Bad Request 客户端请求有语法错误
403 Forbidden 服务器收到请求,但拒绝提供服务。服务器通常会在响应正文中给出原因
404 Not Found 请求的资源不存在。例如,输入了错误的URL
500 Internal Server Error 服务器发生不可预期的错误
503 Service Unavaliable 服务器当前不能处理客户端请求,一段时间后,服务器可能会恢复正常。
消息报头 : 包括通用报头、请求报头、响应报头、实体报头
通用报头:
1. Cache-Control:指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置并不会修改另一个消息处理过程中的缓存处理机制。请求时包含no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应时包含public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。
no-cache:指示请求或响应消息不能缓存,实际上是可以存储在本地缓存区中的,只是在与原始服务器进行新鲜度验证之前,缓存不能将其提供给客户端使用。
no-store:缓存应该尽快从存储器中删除文档的所有痕迹,因为其中可能会包含敏感信息。
max-age:缓存无法返回缓存时间长于max-age规定秒的文档,若不超规定秒浏览器将不会发送对应的请求到服务器,数据由缓存直接返回;超过这一时间段才进一步由服务器决定是返回新数据还是仍由缓存提供。若同时还发送了max-stale指令,则使用期可能会超过其过期时间。
min-fresh:至少在未来规定秒内文档要保持新鲜,接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象。
max-stale:指示客户端可以接收过期响应消息,如果指定max-stale消息的值,那么客户端可以接收过期但在指定值之内的响应消息。
only-if-cached:只有当缓存中有副本存在时,客户端才会获得一份副本。
Public:指示响应可被任何缓存区缓存,可以用缓存内容回应任何用户。
Private:指示对于单个用户的整个或部分响应消息,不能被共享缓存处理,只能用缓存内容回应先前请求该内容的那个用户。
2. Pragma:实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
3.Connection:是否需要持久连接。
close:告诉Web服务器或代理服务器,完成本次请求的响应后,断开连接,不要等待本次连接的后续请求。
Keepalive:告诉Web服务器或代理服务器,完成本次请求的响应后,保持连接,等待本次连接的后续请求。
Keep-Alive:如果浏览器请求保持连接,则该报头表明希望Web服务器保持连接多长时间(秒)
4. Date:消息发送时间。
5. Transfer-Encoding:Web服务器表明自己对本响应消息体(不是消息体里面的对象)作了怎样的编码,比如是否分块(chunked)
6. Via:列出从客户端到OCS或者相反方向的响应经过了哪些代理服务器,他们用什么协议(和版本)发送的请求。
当客户端请求到达第一个代理服务器时,该服务器会在自己发出的请求里面添加 Via 头部,并填上自己的相关信息,当下一个代理服务器 收到第一个代理服务器的请求时, 会在自己发出的请求里面复制前一个代理服务器的请求的Via头部,并把自己的相关信息加到后面,以此类推,当 OCS 收到最后一个代理服务器的请求时,检查 Via 头部, 就知道该请求所经过的路由。例如:Via:1.0 236-81.D07071953.sina.com.cn:80 (squid/2.6.STABLE13)
HTTP请求头 :对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。
1. Accept:告诉Web服务器自己接受什么介质类型,*/*表示任何类型。
2.Accept-Charset:浏览器告诉服务器自己能接收的字符集。
3.Accept-Encoding:浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)
4.Accept-Language:浏览器申明自己接收的语言。语言与字符集的区别:中文是语言,中文有多种字符集,比如big5、gb2312、gbk等
5.Authorization:当客户端接收来自Web服务器的WWW-Authenticate响应时,用该头部回应自己的身份验证信息给Web服务器。
6.If-Match:如果对象的Etag没有改变,其实也就意味着对象没有改变,才执行请求的动作,获取文档。
7.If-None-Match:如果对象的ETag改变了,其实也就意味着对象改变了,才执行请求的动作,获取文档。
8.If-Modified-Since:如果请求的对象在头部指定的时间之后修改了,才执行请求的动作(比如返回对象),否则返回代码304,告诉浏览器对象没有被改变。
9.If-Unmodified-Since:如果请求的对象在头部指定的时间之后没被修改过,才执行请求的动作。
10.If-Range:浏览器告诉Web服务器,如果我请求的对象没被改变,就把我缺少的部分给我,如果对象变了,就把整个对象给我。浏览器通过发送请求对象的ETag或者自己所知道的最后修改时间给Web服务器,让其判断对象是否改变了。总是跟Range头部一起用。
11.Range:浏览器(比如Flashget多线程下载时)告诉Web服务器自己想取对象的哪部分。例如:Range:bytes=1173546
12.Proxy-Authenticate:代理服务器响应浏览器,要求提供代理身份验证信息。
13.Proxy-Authorization:浏览器响应代理服务器的身份验证请求,提供自己的身份信息。
14.Host:客户端指定自己想访问Web服务器的域名/IP地址和端口号
15.Referer:浏览器向Web服务器表明自己是从哪个网页URL获得当前请求中的网址/URL
16.User-Agent:浏览器表明自己的身份(是哪种浏览器)。例如:User-Agent:Mozilla/5.0(Window;U;Windows NT5.1;zh-CN;rv:1.8.1.14)Gecko/20080404 Firefox/2.0.0.14
HTTP响应头 :对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。
1. Age:当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过了多长时间
2.Server:Web服务器表明自己是什么软件及版本等信息。例如:Server:Apache/2.0.61(Unix)
3.Accept-Ranges:Web服务器表明自己是否接受获取其某个实体的一部分(比如文件的一部分)的请求。Bytes:表示接受,none:表示不接受
4.Vary:Web服务器用该头部的内容告诉Cache服务器,在什么条件下才能用本响应返回的对象响应后续的请求。假如源Web服务器在接到第一个请求消息时,其响应消息的头部为:Content-Encoding:gzip:Vary:Content-Encoding,那么Cache服务器会分析后续请求消息的头部,检查其Accept-Encoding,是否跟先前响应的Vary头部值一致,即是否使用相同的内容编码方法,这样就可防止Cache服务器用自己Cache里面压缩后的实体响应给不具备解压能力的浏览器。
5. WWW-Authenticate:这个响应报头域必须被包含在401(未授权)响应消息中,当客户端收到401响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了Authorization报头域的请求,例如:WWW-Authenticate:Basic realm = "Basic Auth Test",从这个响应头域,可知服务器端对我们请求的资源采用的是基本验证机制。
6. X-Frame-Options: 有三个值: DENY 表示该页面不允许在 frame 中展示, 即便是在相同域名的页面
中嵌套也不允许。 SAMEORIGIN 表示该页面可以在相同域名页面的 frame 中展示。 ALLOW-FROM uri 表示
该页面可以在指定来源的 frame 中展示
HTTP实体头 :响应消息和请求消息都可以包含实体信息。
1. Allow:服务器支持哪些请求方法。(如GET、POST等)
2. Location:表示客户应当去哪里提取文档,用于将接收端定位到资源的位置(URL)上。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302
3. Content-Base:解析主体中的相对URL时使用的基础URL
4. Content-Encoding:Web服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。
5. Content-Language:Web服务器告诉浏览器理解主体时最适宜的自然语言
6. Content-Length
7. Content-Location:资源实际所处的位置
8.Content-MD5:主体的MD5校验和
9. Content-Range:实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式: Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth。例如,传送头500个字节次字段的形式:Content-Range:bytes0- 499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。
10.Content-Type:Web服务器告诉浏览器自己响应的对象的类型。例如:Content-Type:application/xml Content-Type:text/html;char
【详细分类】
http://tool.oschina.net/commons/
http://www.cnblogs.com/52fhy/p/5436673.html
http://www.cnblogs.com/xiaozong/p/5732332.html
11.Etag:就是一个对象(比如URL)的标志值,就一个对象而言,比如一个html文件,如果被修改了,其ETag也会被修改,所以,ETag的作用跟Last-Modified的作用差不多,主要供Web服务器判断一个对象是否改变了。比如前一次请求某个HTML文件时,获得了其ETag,当这次又请求这个文件时,浏览器就会把先前获得ETag值发给Web服务器,然后Web服务器会把这个ETag跟该文件的当前ETag进行对比,然后就知道这个文件有没有改变了
12. Expires:Web服务器表明该实体将在什么时候过期,对于过期了的对象,只有在跟Web服务器验证了其有效性后,才能用来响应客户请求。
13. Last-Modified:Web服务器认为对象的最后修改时间,比如文件的最后修改时间,动态页面的最后产生时间等等。
MIME
全称Multipurpose Internet Mail Extensions,比较确切的中文名称为“多用途互联网邮件扩展”,设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持后,意义更为显著。使得HTTP传输的不仅是普通的文本,而变得丰富多彩。
超文本标记语言文本 .html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 .jpeg , .jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra,.ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
Internet中有一个专门组织IANA来确认标准的MIME类型,但Internet发展的太快,很多应用程序等不及IANA来确认使用的MIME类型为标准类型。因此以x-开头来标识这个类别还没有成为标准。只要客户端和服务器共同承认这个MIME类型,即使不是标准的类型也没关系,客户端就能根据MIME类型,采用具体的处理手段来处理数据。而Web服务器和浏览器(包括操作系统)中,缺省都设置了标准的和常见的MIME类型,只有对于不常见的MIME类型,才需要同时设置服务器和客户浏览器,以进行识别。
由于MIME类型与文档的后缀相关,因此服务器使用文档的后缀来区分不同文件的MIME类型,服务器中必须定义文档后缀 和MIME类型之间的对应关系。而客户程序从服务器上接收数据的时候,它只是从服务器接受数据流,并不了解文档的名字,因此服务器必须使用附加信息来告诉 客户程序数据的MIME类型。服务器在发送真正的数据之前,就要先发送标志数据的MIME类型的信息,这个信息使用Content-type关键字进行定 义,例如对于HTML文档,服务器将首先发送以下两行MIME标识信息,这个标识并不是真正的数据文件的一部分。
Content-type: text/html
注意,第二行为一个空行,这是必须的,使用这个空行的目的是将MIME信息与真正的数据内容分隔开。
转载于:https://www.cnblogs.com/suren2017/p/7553225.html
【Python】【有趣的模块】【requests】【一】HTTP头信息总结相关推荐
- Python中第三方模块requests解析
一.简述 Requests HTTP Library 二.模块框架 '''__version___internal_utilsadaptersapiauthcertscompatcookiesexce ...
- Python [9] optparse模块生成命令行帮助信息
起初,最先接触python命令行传参是sys模块的argv方法,此方法功能简单,稍微增加一些需求,就不难满足需要了 那么今天就和大家聊聊optparse模块来替换sys模块的argv方法 一.optp ...
- 使用 Python 的 itchat 模块爬取微信好友信息
偶然间听闻 itchat 模块可以用于实现微信好友信息采集.消息收发管理,于是闲来无事玩一玩,只是简单实现了好友性别统计.地域分布统计.个性签名爬取展示以及头像的爬取拼接,还有很多更强大的功能,有兴趣 ...
- 【Python】ffmpeg模块处理视频、音频信息
多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能.视频格式转换.视频抓图.给视频加水印等. 这里主要介绍一下FFmpeg的一些常用参数,并且主要功能:截取视频.视频格式转换.视频分辨率转 ...
- 【Python】ffmpeg模块查询视频、音频信息
FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案. 它包含了非常先进的音频/视频编解码库 ...
- 基于python 使用tk模块和mysql实现学生信息管理系统
学生信息管理系统 好久没有发文啦,经过一段时间的学习,有所收获,写了个小项目,记录一下学习过程.好啦,废话不多说,我们直接说实现,看效果. 首先系统是有三个视图,一个管理员,一个教师,一个学生,运行效 ...
- Python实战案例,requests模块,Python实现获取动态图表
前言 利用Python实现获取动态图表,废话不多说~ 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: re模块: requests模块: urllib模块: pandas模 ...
- python requests_Python爬虫之requests模块
# requests模块 知识点: 掌握 headers参数的使用 掌握 发送带参数的请求 掌握 headers中携带cookie 掌握 cookies参数的使用 掌握 cookieJar的转换方法 ...
- python网络爬虫之requests模块
什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在爬虫领域中占据着半壁江山的地位. 因为在使用ur ...
- 数据采集与清洗基础习题(二)Python爬虫常用模块,头歌参考答案
数据采集习题参考答案,会持续更新,点个关注防丢失.为了方便查找,已按照头歌重新排版,朋友们按照头歌所属门类查找实训哦,该篇为Python爬虫常用模块. 创作不易,一键三连给博主一个支持呗. 文章目录 ...
最新文章
- 求合体电脑版_SCP CB 电脑移植版测评
- 程序员别只顾着敲代码了,看看吧
- Java获取当前时间前几个月、季度
- java rmi 超时_java RMI服务超时
- unity随机方向的代码_ECCV 2020 目前用于车辆重识别(vehicle reID)中最大的合成车辆数据集(代码开源)...
- MFC导出对话框类DLL的实现
- 最大值_Leetcode2 | 滑动窗口最大值(Q239)
- Linux基础(firewalld防火墙配置管理工具的图形用户界面)
- thinkphp手机版小说网站源码
- webstorm编辑器,Ctrl+Alt+L格式化JS代码或格式化Vue代码后,单引号变成双引号,以及添加分号设置问题
- kafka指定分区消费
- 分享思路:Python+Spark爬虫音乐推荐系统 音乐数据分析可视化 音乐推荐app 音乐网站 大数据毕业设计(app+web+爬虫+spark+可视化)
- 克隆硬盘后进不去系统_Win10怎么快速复制磁盘或克隆磁盘到另一个磁盘上 - 分区助手教程...
- 在MAC下如何显示隐藏文件夹
- linux 清除dns缓存
- 窥尽大数据背后被遮掩起来的财富
- 高德地图上画图!和3D绘制区域
- python win10 桌面_实战 | Python批量提取Win10锁屏壁纸
- PDF分割与合并(充分利用Spire的bug实现操作PDF)
- 狂神。Mybatis学习。
热门文章
- 微信小程序教程笔记4
- pandas如何往mysql追加数据
- 为什么是GCN(转)
- 【论文笔记】基于2-channel network的图片相似度判别-CVPR 2015
- mysql死锁自动处理方法_19. 死锁的产生和 MySQL 自动处理方式
- yy神曲url解析php_用PHP如何实现解析抖音无水印视频
- python和其它语言混合编程_C++和Python混合编程 - python嵌入C++
- 英语 没有听懂对方说什么 怎么说
- python读取目录里所有txt文件转excel
- 【django】 model_to_dict ‘QuerySet‘ object has no attribute ‘_meta‘