网页基础
网页基础,图解http
Web页面,根据Web浏览器中制定的url,从Web服务器端获得文件资源,从而显示出Web页面。
Web使用一种HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到
服务器端的一系列流程。Web是建立在HTTP协议上通信的。
目前已经提出的三项WWW构建技术,作为页面的文本标记语言的HTML(HyperText Markup Language,超文本标记语言)
作为文档传递协议的HTTP;
作为文档所在地址的URL(Uniform Resource Locator,统一资源定位符)
html1.0在1993年被提出来,html2.0在1994年提出。之后交由W3C指定标准,一直到2012年的html5;
http的历史,基于tcp协议:
https,早在1994年,由网景公司提出,安全层由ssl到如今的tls;与http的区别:
与http相关的网络协议,http是运行在应用层的,按四层结构划分,依赖传输层---TCP,网络层---IP,
物理层---以太网。
在IP进行路由选择的时候,会利用MAC地址进行搜索,这时,会采用CRP协议,通过IP反解析出MAC地址。
因为IP地址,在每个局域网可能是重复的,但是MAC地址是不会重复的。
在查找服务器的IP地址时,我们需要DNS域名解析协议,来实现域名到IP地址的转换。
HTTP协议是基于C、S模式的,但是http协议不区分客户端和服务器端,发出请求的是客户端,发出响应的作为服务器。
http也是不保存状态的协议,只是简单的返回内容。由于登录信息的增多,http1.1引入了Cookies技术,来保存用户的状态。
HTTP协议中的几种请求:
1) Get,获取资源,
2) POST,传输实体主体,也可以使用Get,但一般用的不多。
3) PUT,传输文件,由于http1.1不支持身份验证,这个安全性很低,一般用的很少。
4) HEAD,获得响应报文首部,用来确认url的有效性和资源更新日期时间。
5) DELETE,删除文件,与put相反。
在http的初始版本中,每进行一次HTTP通信就要断开一次TCP连接,这是因为当时网络的吞吐量和访问量都很少。
目前, http1.1和http1.0都支持持久连接(keep-alive),默认的方式也是keep-alive,只要任意一端没有提出
断开连接,就保持TCP的连接状态。
管线化技术:做到同时并行的发送多个请求,不需要一个个等待响应,再一个个顺序的发送。
HTTP报文,用于HTTP协议交互的信息都被称为HTTP报文,分为请求端的HTTP请求报文和相应端的HTTP响应报文。
HTTP报文大致分为报文首部和报文主体,
报文主体和实体主体,在传输中进行编码操作时,实体内容发生变化,才能导致报文主体和实体主体产生差异。
报文主体进行压缩常见的方式有:
1) gzip (GUN zip)
2) compress(unix 压缩标准)
3) deflate(zlib)
4) identity(不进行编码)
在HTTP通信过程中,常常把数据分割为多块,让浏览器逐步显示页面,这种把实体主体分块的功能称为分块传输编码。
http1.1中存在一种称为传输编码(Transfer Coding)的机制,可以在通信时按某种编码方式传输,
只定义在分块传输编码中。
HTTP中的多部分对象集合(Multipart)的方法,来支持同一个报文主体中可包含多类型实体。(文本,图片,视频)
HTTP中含有多部分对象集合时,需要在首部加上Content-type
HTTP中的部分内容范围请求,在首部字段中,加入Range,来指定需要的byte长度。
响应报文中,加入Content-Type 标明multipart/byteranges。
HTTP中的内容协商(Content Negotiation),服务器与客户端就响应的资源内容进行交涉,提供给客户端最为合适的资源。
一般的协商内容有,语言,字符集,编码方式等。
首部字段包括:Accept,Accept-Charset,Accept-Encoding,Accept-Language,Content-Language
HTTP的响应状态码:
Web服务器:HTTP1.1允许一台HTTP服务器搭建多个Web站点,可以以每位客户持有的域名运行各自不同的网站。
利用了虚拟主机(Virtual Host)的功能,这时客户端的请求需要加入HOST的首部,来指明需要访问的网址。
还可以实现网络中的代理,网关,隧道。 将应用程序和服务器的请求进行转发。
网页中的身份认证:通常提供身份认证的载体有:1)密码;2)动态令牌;3)数字证书;4)生物认证;5)IC卡。
HTTP1.1中使用的认证方式有:1) Basic认证;2) Digest 认证; 3) SSL客户端认证; 4) FormBase认证(基于表单认证)
Basic认证,用户输入用户名和密码,浏览器完成Base64编码,仅仅是编码处理,加密操作都没有,窃听破解的可能性很大。
Digest认证,采用的是质询,响应的认证方式,比较的是hash的结果。
质询,响应的认证方式,一方先发送认证要求给另一方,使用另一方那接收到的质询码计算生成响应码,将响应码返回给对方进行认证。
SSL认证,客户端必须还有认证证书,走HTTPS的路线。
一般采用双因素认证,SSL证书,认证客户机的合法性,密码,认证操作者的合法性。
但是SSL认证的成本较高。银行一般会采用该认证方式。
表单认证,不是HTTP协议中规定的方法,根绝Web应用程序的实际安装,提供的用户界面和认证方式也不同。
Web服务器如何保存用户提交的密码等登录信息也没有标准化,一种安全的保存方法是,先利用给密码加salt,
的方式增加额外信息,在使用散列函数计算出散列值后保存。防止被脱库。
HTTP协议本身是无状态的,session的管理,使用过cookie来实现的,
sessionid是不允许被第三方盗走的,sessionid应该使用难以推测的字符串,并有有效期管理。
传输通道最好使用https传输。
HTTP协议中并不支持密码学的支持,
通信内容是全明文的,内容会被窃听;
不进行通信双方的身份验证;
无法验证报文的完整性;
通信的加密,目前通过和SSL,TLS的组合使用,加密HTTP的通信内容。
HTTPS可以实现HTTP传输加上加密处理,认证技术,完整性保护。HTTPS使用混合加密机制,
在密钥交换阶段,使用非对称的算法,在数据交互过程中,使用交互后的对称密钥。
混合加密机制中,需要数字证书认证机构来认证公开密钥的正确性。威瑞信(VeriSign)就是一家
非常有名的数字证书认证机构。
证书的另一个作用是证明服务器背后运营企业的真实性。该类证书叫做EV SSL证书。
python中的http操作模块,requests,支持http所有的请求类型,GET,PUT,DELETE,OPTIONS
import requests
r = requests.get('http://......') 类似的请求还有post,put,delete,head,options。
如果需要为url传递参数,自定义请求头,可以加param = pyload,pyload为自己定义的hash结构。
响应内容r可以通过context和text来拿到其内部的值,
r.text是通过python内部的encoding的格式来展示的,可以先通过r.encoding = 'utf-8'这样来设置格式。
r.content,可以以字节的形式访问返回值r,requests会自动解压gzip和deflate的编码。
requests内部也有一个JSON解码器,可以处理JSON数据。
r.json() 返回就是json类型的数据。
如果需要访问http的原始套接字的相应,可以通过访问r.raw来拿到。
如果需要拿到状态响应码,通过r.status_code来拿到。
查看服务器响应头,
cookies的发送和响应:
重定向设置,有些网址会自动将http的请求,重定向到https上,这时可以通过resp.hisory来处理,内部有一个request列表
从最老到最近的请求进行排序。
timeout的设置:只对连接过程有效,对响应体的下载无关。