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可以进行状态管理

  1. 客户端请求报文(此时无Cookie信息的状态)
  2. 响应报文(服务器端生成Cookie信息)
  3. 请求报文(客户端自动发送保存的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存在的问题

  1. 通信速度慢
  2. 处理速度慢(加密、解密)
    但是随着网络带宽、处理性能的大幅提升,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!!!