HTTP那些不得不说的事

Posted 聊点技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP那些不得不说的事相关的知识,希望对你有一定的参考价值。


HTTP

HTTP那些不得不说的事
1.
HTTP简介
HTTP是超文本传输协议,用于从万维网(www)服务器传输超文本到本地浏览器的传输协议。HTTP是一个基于请求与响应的建立在TCP上的无状态连接,默认使用80端口。
2.
统一资描述符URI

HTTP使用统一资源描述符(Uniform Resource Identifiers,简称URI)来传输数据和建立连接,URI用来唯一的标识资源。万维网上每种可用的资源都是用一个URI来定位,一般URI由三部组成:

  • 访问资源的命名机制;

  • 存放资源的主机名;

  • 资源自身的名称,由路径表示,着重强调于资源。

URL统一资源定位符

URL是用来描述信息资源的字符串,用来标识资源,并且指明了如何定位到该资源。URL利用统一的格式来描述资源,包括文件、服务器地址和目录等。URL一般由三部组成:
  • 协议;
  • 存有该资源的主机IP地址和端口号;
  • 主机资源的具体地址,目录和文件名等。
URN统一资源命名

HTTP那些不得不说的事

3.
HTTP工作原理

HTTP工作在浏览器/服务器(B/S)架构上,浏览器通过URL向HTTP服务端发送请求。Web服务器根据接收到的请求,向浏览器发送响应信息。

4.
HTTP特点
  • 无连接的:每次连接只处理一个请求,服务器处理客户的请求向浏览器发送响应,在收到客户的应答后,就会断开连接。
  • 媒体独立的:只要浏览器和服务器知道如何处理数据内容,任何类型的数据都能够通过HTTP传送。
  • 无状态的:同一个客户第二访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同,服务器并不记得曾经访问过的客户,也不记得为该客户曾经服务过多少次。

HTTP1.0版本中每一个请求和响应都会触发一次TCP的建立和断开,HTTP1.1增加了keep-alive机制,允许在一个TCP连接上发送多个请求和响应,极大的减少了TCP连接的建立和断开操作,提升效率。

5.
Cookie解决一次登陆多次使用
使用Cookie解决无状态问题。Cookie相当于注册了一个通行证,第一次访问时给客户端发送一个Cookie,当客户端再发起请求时,会将Cookie一起发送过去,服务器就知道这是"老用户"了。
6.
HTTP的请求消息和响应消息

HTTP有两类报文:请求报文和响应报文。客户端请求报文包括:请求行,请求头部和请求数据。

HTTP那些不得不说的事

请求行:请求方法,资源路径URL,协议版本;

请求头部:域名,用户代理,Cookie等信息;

请求数据:http请求的数据;

服务器响应报文包括:状态行,消息报头和响应正文

HTTP那些不得不说的事

状态行:协议版本,状态码,回应短语;
消息报头:搭建服务器的软件,发送响应的时间,回应数据的格式等信息;
响应正文:响应的具体数据。
7.
HTTP请求报文的一些方法
方   法
说   明
GET 请求URL所标识的信息。
POST 向服务器提交数据进行处理请求(如提交表单或上传文件)。
PUT
传输文件。在指定的URL下存储一个文档。
HEAD
请求读取由URL所标识的信息的首部。
DELETE
请求服务器删除指定的页面。
CONNECT
使用 SSL/TLS把通信内容加密后经网络隧道传输。
LINK
建立和资源之间的联系。
UNLINK
断开连接关系。
8.
HTTP响应报文状态码
当访问一个网页时,浏览器会向服务器发出请求。在浏览器接收并显示网页前,服务器会返回一个包含HTTP状态码的信息头来响应浏览器的请求。状态码都是三位数字,由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用,共有5种类型的状态码。
1** 指示信息,如请求收到了或正在进行处理。
2** 成功,成功接收并处理。
3** 重定向,要完成请求还需要进一步的操作,把请求访问的url重定向到其他目录。
4** 客户端错误,如请求中包含错误的语法或无法完成请求。
5** 服务器错误,服务器在处理请求时发生了错误。

常见的HTTP状态码:

200---请求成功 400---客户端请求存在语法错误
301---资源(网页等)被永久转移到其它URL 401---客户端请求没有经过授权
302---请求临时重定向 403---客户端的请求被服务器拒绝,一般为客户端没有访问权限
304---请求被重定向到客户端本地缓存 404---请求的资源(网页等)不存在
404---请求的资源(网页等)不存在 503---服务端发生临时错误。处于超负载,或正在停机维护,无法处理请求
9.
GET和POST方法比较
  • GET用于获取资源,POST用于传输实体主体;
  • GET参数以查询字符串出现在URL中,POST参数存储在报文体中;
  • GET方法是安全的,POST方法不安全;
  • GET方法可缓存,POST方法多数情况下不可缓存;
  • GET产生一个TCP数据包;POST产生两个TCP数据包。
  • GET提交的数据大小有限制(因浏览器对URL的长度有限制),POST方法提交的数据没有限制。
安全

安全的HTTP方法不会改变服务器状态,即方法只进行读取操作。GET方法是安全的,而POST不是,因POST是上传内容,上传成功后,服务器可能把上传的内容存储到数据库,因此状态也就发生了改变。安全的方法有:HEAD、OPTIONS等;不安全的方法有:PUT、DELETE等。

幂等性

幂等是指同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。所有的安全方法都是幂等的。GET、HEAD、PUT和DELETE都是幂等的,POST不是。
可缓存
如果要对响应进行缓存,需要满足以下条件:
  • 请求报文的HTTP方法本身是可缓存的,包括GET和HEAD,但PUT和DELETE不可缓存,POST在多数情况下不可缓存的;
  • 响应报文的状态码是可缓存的;
  • 响应报文的Cache-Control首部字段没有指定不进行缓存。

TCP数据包数量

GET请求,浏览器会把请求头部和请求数据一起发送出去,服务器响应200;POST请求,浏览器先发送请求头部,服务器响应100,然后浏览器再发送请求数据,服务器响应200。
10.
Cookie和Session
Cookie用来保存状态信息,是服务器发送到浏览器并保存在客户主机的一小块数据,它会在后续浏览器向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。由于后续的每次请求都会携带Cookie数据,会带来额外的性能开销。

Cookie用途

  • 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息);
  • 个性化设置(如用户自定义设置、主题等);
  • 浏览器行为跟踪(如跟踪分析用户行为等)。

创建过程

服务器发送的响应报文包含Set-Cookie首部字段,浏览器得到响应报文后把Cookie内容保存到本地。浏览器之后对同一个服务器发送请求时,会取出Cookie信息并将Cookie数据一并发送给服务器。

Cookie分类
  • 会话期Cookie:浏览器关闭之后会被自动删除,仅在会话期内有效。

  • 持久性Cookie:指定特定的过期时间或有效期后就成了持久性的Cookie。

Session

Session用于将用户信息存储在服务器,会更为安全。

Cookie与Session的区别
Cookie一般用来保存用户信息,数据保存在客户端,容易被恶意查看。
Session通过服务器记录用户状态。服务器给特定用户创建了Session后就可以标识该用户了,且数据保存在服务端会有更高的安全性,但会为服务器带来更大的开销。
11.
SSL和TLS

安全套接层(Secure Socket Layer,简称SSL)的提出是为了保障在互联网上安全的传输数据,利用加密技术,确保数据在传输过程中不会被截取。SSL位于TCP与各种应用层协议之间,为数据通讯提供安全支持。

传输层安全协议(Transport Layer Security,简称TLS)是SSL标准化之后的名称,可以将SSL和TLS视为处于不同阶段的一个东西。TLS位于HTTP和TCP之间,内部包含TLS握手协议、TLS记录协议。

12.
HTTPS
HTTPS是一种通过网络进行安全通信的传输协议,使用HTTP通信,利用SSL建立安全信道,加密数据。可以将HTTPS看作是身披SSL外壳的HTTP。使用HTTPS的目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。HTTPS使用SSL保证安全,主要提供传输内容加密和服务端的身份认证的安全。

直接使用HTTP会带来很大的安全性问题,主要是如下原因导致:

  • HTTP使用明文进行通信,内容可能会被窃听;

  • 不验证通信方的身份,通信方的身份有可能遭遇伪装;

  • 无法证明报文的完整性,报文有可能遭篡改。

HTTPS通过将HTTP和SSL通信,再用SSL和TCP通信实现了传输过程中的加密。通过使用SSL,HTTPS具有了加密(防窃听)、认证(放伪装)和完整性保护(防篡改)的功能。

13.
HTTP与HTTPS的区别
  • HTTP的URL以http://开头,HTTPS的URL以https://开头;
  • HTTP使用明文传输信息,HTTPS会对传输的数据进行加密;
  • HTTP使用80端口,HTTPS使用443标准;
  • HTTP不需要证书,HTTPS需要CA机构颁发的SSL证书。
14.
对称密钥加密
在对称加密算法中,加密和解密使用同一密钥,这种算法速度快,但无法安全的将密钥传输给通信方。常见的对称加密算法有DES和AES。
15.
非对称密钥加密
在非对称加密算法中,使用不同的密钥进行加密和解密,即使用公钥和私钥。其中所有人都可以获得公钥,公钥可以发给任何请求它的人,发送方得到接收方的公钥后,使用公钥加密,接收方使用私钥解密。而私钥只能由一方保管,不能外泄。
公钥加密的信息,只有私钥才能解密。同样的,私钥加密的信息,只有公钥才能解密。公钥是开放给所有人的,但私钥是需要保密的,存在于服务端。
非对称密钥除了实现加密功能,还能够进行签名。由于私钥无法被其他人获取,因此可以在发送方使用私钥进行加签名,接收方使用公钥解签名,就能判断这个签名是否正确。
非对称加密算法速度慢,但能够更安全的将公钥传输给通信发送方,RSA是常用的非对称加密算法。
16.
HTTPS使用混合加密机制

HTTPS中集合了对称加密和非对称加密,将对称密钥使用非对阵加密算法进行加密,保证传输对称密钥时的安全性,之后使用对称密钥加密解密进行通信来保证通信过程的效率。

17.
认证

HTTP那些不得不说的事

使用证书来认证通信方。
数字证书认证机构(CA)是客户端与服务器双方都信赖的第三方机构,服务端向CA提出公开密钥的申请,CA在验证了提出申请者的身份之后,向其颁发证书。证书中存有归属者的基本信息,证书过期时间、归属者的公钥,并由认证机构施加数字签名,表明某个认证机构认定该公钥的确属于此人。进行HTTPS通信时,服务器会把证书发送给客户端。客户端取得其中的公开密钥之后,先使用数字签名进行验证,如果验证通过,就可以开始通信了。

HTTP那些不得不说的事

如上图所示是客户端和服务器之间利用HTTPS通信的基本流程。但存在一种可能,客户端发送的连接请求被劫持,中间人利用假公钥替换了真公钥,后续客户端将会采取假的公钥进行加密,存在安全风险。在获取公钥的过程中,需要保证安全的获取公钥并确保公钥是安全的,这就需要SSL证书和CA机构了。
图中第2步服务器向客户端发送响应请求时,会将自己的SSL证书发给客户端,SSL证书中有证书的颁发机构、有效期、公钥、证书持有者、签名。证书通过第三方的校验保证了身份的合法,解决了公钥获取的安全性。
客户端收到证书后,会进行校验,校验过程如下:
  1. 浏览器读取证书中的证书所有者、有效期等信息;
  2. 查找操作系统中已内置的受信任的CA,与服务器发来的证书中的CA比对,校验证书是否为合法机构颁发;
  3. 如果找不到,浏览器会进行提示,指示服务器发来的证书是不可信任的;
  4. 如果找到,浏览器会取出操作系统中CA的公钥,然后将服务器发来的证书内包含的签名进行解密;
  5. 接着,浏览器使用hash算法(与服务器相同的hash算法)计算出服务器发来的证书的hash值,将这个计算的hash值与证书中解密后的签名进行对比;
  6. 对比结果一致,则证明服务器发来的证书合法,没有被劫持。浏览器可以读取证书中的公钥,用于后续加密;
  7. 客户端生成一个随机值当作密钥,然后用公钥加密该密钥,将该密钥传送给服务端;
  8. 服务端收到后,使用私钥解密得到客户端传来的用于对称加密的密钥。
18.
完整性保护
完整性保护主要是由SSL提供的报文摘要功能实现。
数字摘要:通过hash函数对要发送的数据进行哈希得到数字摘要A,利用私钥加密数字摘要A,将数字摘要和数据一起发送。接收方在收到数据后,利用同样的hash函数进行哈希,计算得到摘要B,然后利用公钥解密数字摘要A。比较摘要A和B,若相同则说明在传输过程中没有被修改过。



扫描二维码

获取更多精彩

聊点技术



以上是关于HTTP那些不得不说的事的主要内容,如果未能解决你的问题,请参考以下文章

CSDN记者专访:我与Netty那些不得不说的事

我与nginx那些不得不说的私密二三事!!!

Vue3之——和Vite不得不说的事

SQL开发实战技巧系列:关于SQL不得不说的那些事

高并发中,那些不得不说的线程池与ThreadPoolExecutor类

关于数据仓库不得不说的那些“事”