HTTP学习备忘
HTTP(HyperText Transfer Protocol)–>超文本传输协议
网络基础TCP/IP
通常使用的网络是在TCP/IP协议族的基础上运作的。HTTP属于其子集。
TCP/IP协议族按层次分为四层:应用层、传输层、网络层、数据链路层
各层作用如下:
- 应用层:预存各种通用的应用服务,包括:FTP、DNS、HTTP
- 传输层:提供数据传输,包括TCP(传输控制协议)、UDP(用户数据报协议)
- 网络层:选择传输线路
- 链路层:硬件
传输流程:
客户端 :HTTP客户端TCPIP网络IPTCPHTTP服务器: 服务器
IP和MAC地址
- IP地址:节点被分配到的地址 (可变)
- MAC地址:网卡所属的固定地址(基本不变)
IP和MAC可以互相配对
APR协议:解析地址,通过IP地址就可以反查出MAC地址。
简单的HTTP协议
请求实例
GET /index.html HTTP/1.1
Host: hackr.jp
- GET:表示请求访问服务器的类型,也成为方法(method)
- Host:主机名
这段实例的意思是:请求访问某台HTTP服务器上的/index.html页面资源
GET:获取资源
POST:传输实体主体
graph LR
请求报文-->请求方法
请求报文-->请求URI
请求报文-->协议版本
HTTP不保存状态,但利用Cookie可以进行状态管理
Cookie
发生Cookie交互的情景:
- 客户端请求报文(此时无Cookie信息的状态)
- 响应报文(服务器端生成Cookie信息)
- 请求报文(客户端自动发送保存的Cookie信息)
状态码
状态码是当客户端向服务器发送请求时,描述返回的请求结果。
类别如下 :
- 1XX:正在处理
- 2XX:处理成功
- 3XX:需要附加操作
- 4XX:服务器无法处理
- 5XX:请求处理出错
一般使用Cookie来管理Session(会话)
与HTTP协作的Web服务器
- 代理:主要作用是转发,他扮演了位于服务器和客户端“中间人”的角色。
- 网关:转发其他服务器通信数据的服务器。替代服务器返回资源的功能。
- 隧道:利用SSL等加密手段进行通信,保证访问安全。
HTTPS
HTTP由于不存在加密的功能,安全性不足。
HTTPS=HTTP+通信加密+认证+完整性保护
HTTPS=HTTP+SSH
SSH:一种加密手段。
HTTPS在使用HTTP传输Web数据时,会先使用SSH建立安全可靠的链接,以确保安全。
SSH使用两把密钥(公密,私密)加密。公密是可以随意公布的,对方使用你的公密对数据进行加密传输给你后,只有你的私密才能解开这段密文。
HTTPS存在的问题
- 通信速度慢
- 处理速度慢(加密、解密)
但是随着网络带宽、处理性能的大幅提升,HTTPS的性能劣势已经不值一提,HTTP /2.0将完全采用HTTPS。
用户认证
密码加盐(salt):服务器随机生成一个字符串。把他和密码字符串相连后,生成散列值。 这样做,可以使两个用户使用统一密码时,对应的散列值不同。减少密码特征,增加安全性。
CGI
CGI(Common Gateway Interface,通用网关接口)是指Web服务器在接收到客户端发送过来的请求后转发给程序的一组机制。
《图解HTTP》这本书暂时看完了。回过头来看,HTTP协议的基本内容也并不是很难,(或许是这本书太简单了,笑),看书的时候略过了HTTP首部字段的一些知识点。由于看HTTP协议主要是为了利用Flask进行Web开发,所以这些太过于底层的东西暂时也没有必要去了解。对HTTP有一个大概的认知就应该满足需求了。如果以后有需要,可以回过头来查阅。书中最后一部分的Web安全漏洞值得我去注意:扩展脚本攻击,SQL注入攻击,OS命令注入攻击……,互联网还真是充满了危险啊(无奈。另外,期待HTTP /2.0能够尽快普及,各种新特性真是让人期待啊。
通过这本书,我对Web中服务器与客户端如何传递信息,保存状态有了一个初步的了解,对于Web的整体框架有了更深入的总体,从原来的一头雾水,到了解了Web访问的大致过程。接下来的任务,就是正式开始利用《Flask Web开发》这本书,来详细的学习动态Web开发。其中可能会遇到的问题估计在CSS和HTML这些部分,开发网站所涉及的方方面面真的很庞杂。Keep Trying!!!