HTTP复习

HTTP 复习

协议是计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。HTTP协议是一种详细规定了浏览器和万维网服务器之间相互通信的规则,通过因特网传送万维网文档和数据的协议。HTTP协议可以使浏览器更加高效的运行,使网络的传输效率更高。它不仅保证计算机快速正确的传输超文本文档,还确定哪一部分先显示。

HTTP由于其灵活简单快速的特点,应用非常广泛。浏览器网页是HTTP主要的应用,但其不只是用于网页浏览。只要通信的双方都使用他就可以通信。比如QQ软件就用到了HTTP协议。

HTTP工作流程

在网路的七层模型中,HTTP在应用层也就是传输层以上,其基于TCP协议。

HTTP的默认端口号为80, 而HTTPS的默认端口号是443

HTTP是基于传输层的TCP协议,而TCP是一个端到端面向连接的协议。所谓的端到端可以理解为进程到进程的通信,所以HTTP在开始传输之前,首先要建立TCP连接,而TCP连接的过程需要三次握手。在TCP的三次握手后,建立了TCP连接。此时HTTP就可以进行传输了。一个HTTP操作称为一个事务,可以分为以下几步:

  1. 首先客户机与服务器需要建立连接。只要单机某个超级链接,HTTP工作即开始
  2. 建立连接后,客户机发送一个请求给服务器,请求的格式为:同一资源标识符(URL),协议版本号,后面是MIME信息,包括(请求修饰符、客户机信息和可能的内容)
  3. 服务器接到请求后,给与一个相应的响应信息,其格式为一个状态行、包括信息的协议版本号、一个成功或错误的状态码、后面是MIME信息(服务器信息、实体信息、可能的内容)
  4. 客户端接受服务器返回的信息通过浏览器返回在用户显示屏上,然后客户机与服务器断开连接。

如果上述几步中某一步出现错误,那么产生的错误信息返回客户端,由显示屏输出。HTTP协议永远都是客户端发起请求,服务器响应。

HTTP 协议结构

HTTP 协议无论是请求报文还是回应报文,都包含以下四个部分。

  1. 报文头: GET http://www.baidu.com HTTP/1.1
  2. 0个或多个请求头 Accept-Language: en
  3. 空行
  4. 可选的消息体

HTTP协议是基于行的协议,每一行以\r\n 为分隔符。报文头通常表明报文的类型,且报文头只占一行;请求头附带一些特殊信息,每一个请求头占一行 name:value

HTTP请求方法

HTTP/1.1 协议中定了 9 种方法来表明Request-URL 指定资源的不同的操作方式

  1. OPTIONS 返回服务器针对特定资源的HTTP请求方法
  2. HEAD 向服务器索要与GET请求一致的相应,而响应体不会被返回
  3. GET 向特定资源发出请求(GET可能会被爬虫随意访问)
  4. POST 向指定资源提交数据处理的请求(提交表单、上传文件)数据被包含在请求体中。POST可能会导致新建资源或已有资源的修改
  5. PUT 向指定资源上传最新内容
  6. DELETE 请求服务器删除 REQUEST_URL 所标识的资源
  7. TRACE 回显服务器收到的请求
  8. CONNECT 预留给连接方式改为管道的代理服务器
  9. PATCH 局部修改某一资源

当请求的资源不支持请求方法时, 服务器返回405(Method Not Allowed)服务器不认识或不支持方法时, 返回501(Not Implemented)

常见的请求头

Host:(发送请求,请求头是必须的)主要用于执行被请求资源的Internet主机和端口号,它从HTTP的URL中提取出来,

Connection: 它的值通常有两个,keep-alive 和close。 HTTP 是一个请求响应模式的典型范例,即客户端向服务器发送一个请求信息,服务器来响应这个信息。在之前的HTTP版本中,每个请求被创建一个新的到服务器端的连接,在这个连接上发送请求,然后接受请求。keep-alive被用来解决效率了低的问题。keep-alive 使客户端到服务端的连接持续有效,当出现了后续请求时, keep-alive避免了建立或者重新建立。对于市面上大部分服务器keep-alive都被支持,但是对于负担较重的网站,保留的客户端会影响性能。

Accept:浏览器可以接受的MIME类型。 Accept:text/html, 如果不能接受将返回406错误

Cache-control: 指定请求和响应遵循缓存机制。缓存指令是单向的,且独立。

Accept-Encoding:浏览器生命可接受的编码方法,通常说明是否支持压缩。

Accept-Language:浏览器声明接受语言

Accept-Charset:浏览器可以接受的字符集,默认任何字符集都可以接收

User-agent:用于告诉HTTP服务器,客户端使用操作系统浏览器的名称和版本。

HTTP回应报文

第一行是报头,第一个字段表明HTTP协议版本们可以直接以请求报文为准;第二个字段是status code, 也就是返回码,相当于请求结果

HTTPS

在网络上,两个实体间的通信容易被窃听。

当你学习网络安全后、你发现网络再也不安全了

初级的防御手段,是双方都约定一个加密的算法,把加密后的数据进行传输,收到数据方再进行解密。这里涉及一个概念,对称加密和非对称加密

  1. 对称加密:对称加密是指加密秘钥和解密秘钥是一样的,通常有AES和TEA加密算法,它的特点是计算量小,有又一定的破解门槛。
  2. 非对称加密:加密的秘钥和解密的秘钥不一样,秘钥成对出现。加密解密使用不同的秘钥(公钥加密需要私钥解密,私钥加密需要公钥加密)它的特点是计算量大,常用的有RSA、ECC等算法。基于性能考虑,一般使用非对称加密得到秘钥, 再用对称秘钥进行加密。

HTTP协议可以轻松抓包并获取协议,是不安全的协议。而HTTPS是安全为目标的HTTP通道,简单来说是HTTP的安全版。

TLS

TLS协议可用于保护运行于TCP之上的任何协议通信,如HTTP、FTP 等更高级的协议。最常见的是通过TLS来保护HTTP通信。

1550403200729

主要过程如下所述

  1. 客户端浏览器向服务器传送TLS协议的版本号、加密算法种类、产生的随机数以及其他信息
  2. 服务器向客户端传送TLS版本号、加密算法的种类、随机数及其他信息
  3. 客户端利用服务器传送的信息验证服务器的合法性,服务器的合法性包括:整数过期、CA是否可靠、发型整数是否能解开数字签名,如果验证不能通过,服务将断开;否则继续下一步
  4. 用户随机产生一个对称密码,然后用公钥进行加密,并传给服务器
  5. 【A】如果服务器要求客户端验证身份,用户生成一个随机数并签名一起传送
  6. 【A】如果服务器要求验证客户端身份,服务器检验客户整数和签名随机数的合法性。
  7. 服务器和客户端使用相同的主密码,即“通话密码”。
  8. 客户端向服务器发送信息,指明后续的通话使用7中的密码为对称秘钥
  9. 服务器相客户端发送信息,指明7中的密码为对称秘钥,握手结束

这样TLS的握手就结束了,TLS的安全通道数据通信开始,客户和服务器开始使用相同的秘钥进行通信。

这样基于TLS的HTTPS也有了这样的特点1。 客户端产生的秘钥只有客户端和服务器能得到 2 加密的数据只有客户端和服务器能得到明文 3 客户端到服务器的通信是安全的。

HTTP和HTTPS有以下区别

  1. HTTPS协议需要CA申请证书,需要交费
  2. HTTP是超文本传输协议,明文传输, HTTPS是ssl加密传输
  3. 80 和443
  4. HTTP连接很简单,无状态, HTTPS经过SSL+HTTP协议构建的,加密传输、身份认证。
  5. HTTPS耗性能,安全性要求低用HTTP

CGI

CGI 是HTTP 中重要的技术之一,有着不可替代的作用。CGI是一个web服务器的标注接口。通过CGI接口Web服务器就能获取客户端提交的信息转交给服务器端的CGI程序处理,最后结果返回给客户端。

1550404398950

服务器和客户端之间的通信,是浏览器和服务端web服务器的HTTP通信,所以只需知道浏览器执行哪个CGI程序即可。