HTTP 和 HTTPS

134 阅读5分钟

HTTP 和 HTTPS

HTTP 介绍

HTTP 协议也被称为超文本传输协议,是一种无状态的协议。是基于 TCP/IP 协议的一种,位于网络架构当中的应用层。

HTTP URL

HTTP URL 包含了用于查找某个资源的详细信息,URL 的组成如下:

协议 + 主机名 + 端口号 + 资源路径 + 查询参数

例如:

http://www.baidu.com:80/index.html?name=zhangsan&age=18

查询参数和资源路径使用?来进行拼接,查询参数为键值对的形式,键值之间使用=进行拼接,多个查询参数使用&来进行拼接。

HTTP 请求与响应

  • HTTP 请求 HTTP 请求包含了客户端发送给服务端的数据,包含了请求方法、请求 URL、HTTP 协议的版本、请求首部(请求附属的属性与条件)、请求体。 HTTP 请求的格式如下:

    起始行<方法>、、<版本>
    首部<请求首部>
    请求体
  • HTTP 响应 HTTP 响应包括服务端返回给客户端的数据,包含:HTTP 版本、响应状态码、原语短语、响应首部(响应报文附属的属性与条件)、响应资源。

    起始行<版本>、<响应状态码>、<原因短语>
    首部<响应首部>
    请求体<响应资源>

HTTP 请求方法

  • GET

    一般用于检索与获取,是 HTTP 请求的默认方法。请求参数一般放在 URL 当中,浏览器一般会对 URL 的大小进行限制,不同的浏览器限制的大小不一样,chrome 是 2MB。

  • POST

    一般用于创建/更新数据,请求参数存放在请求主体当中。浏览器也会对请求主体进行限制,但是一般的请求是够用的。

  • PUT

    从客户端向服务器传送的数据取代指定的文档的内容。

  • DELETE

    请求服务器删除指定的页面。

  • GET 与 POST 的区别

    • GET 是请求资源,请求资源的数据会被返回给客户端,而 POST 是向服务器提交数据,服务器会根据请求参数进行处理,并返回处理结果。

    • 我们在网页当中收藏页面,收藏的其实是将 URL 和参数、资源一起缓存起来,到时候再打开网页,会直接从缓存当中读取资源,并且会向服务器发送请求询问缓存是否过期,如果过期,则会向服务器发送请求,获取最新的资源。而 POST 请求一般不会做缓存。

HTTP 状态码

状态码原因短语例子
2xx请求成功200 请求成功,请求的资源已经成功返回。
3xx重定向304 可以使用缓存内容
4xx客户端错误404 被服务器拒绝,或找不到请求资源
5xx服务器错误500 表示服务器内部发生错误或者故障

持久和非持久连接

HTTP 0.9 和 HTTP 1.0 是非持久连接,而 HTTP1.1 是持久连接。非持久连接表示发送完一个请求之后,会断开 TCP 连接,下一次发送请求会重新进行 TCP 的链接。

持久化连接则是发送完一次请求后,TCP 连接在一段时间内不会断开,下一次请求还是使用这个 TCP 连接。如果没有需要发送的请求了,客户端会发送Connection: close,表示不再需要这个连接。

TCP 的三次握手和四次挥手

  • IP 地址:端口号 = 套接字 Socket

  • 三次握手

    • 第一次握手 客户端发送随机生成的序列号和 SYN(数据同步)请求给服务端 qIf4S.png
    • 第二次握手 服务端根据客户端发送的序列号生成确认号,确认号为服务端发送的序列号 + 1,然后根据 IP 地址与端口号使用算法生成服务端序列号,然后发送确认号和服务端序列号和 ASK(数据请求)给客户端. qIicR.png
    • 第三次握手 客户端收到服务端传过来的序列号和确认号,对序列哈和确认号都 + 1 然后发送给服务端ASK qIrSi.png
  • 四次挥手

    客户端向服务端发送FIN + ACK表示断开 TCP 连接,服务端收到以后,向客户端回复ACK表示确认收到,然后服务端会将没有传输完成的资源传输完,然后向客户端发送FIN + ACK表示断开 TCP 连接,客户端收到后,向服务端回复ACK表示收到,连接断开。 qI8iv.png

HTTP 和 HTTPS 的区别

  • HTTPS

    HTTPS 是基于 HTTP 协议的加密协议,它在 HTTP 的基础上使用 SSL/TLS 进行加密。

  • SSL/TLS

    SSL 是 TLS 的前身,他们都是加密协议,但现在绝大部分浏览器都不支持 SSL 了而支持 TLS。

  • 对称加密

    发送方和接收方使用同样的算法进行加密/解密。也就是说,同一个密钥可以进行加密/解密。

    在对称加密中,数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。接收方收到密文后,若想解读原文,则需要使用加密密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密。

常用的对称加密算法有:DES\3DES\TDEA\IDEA

  • 非对称加密 对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

常用非对称加密算法:RSA\DSA\ECDSA