- User-Ageht:产生请求的浏览器类型
- Accept:客户端可识别的内容类型列表
- Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
3、空行
最后一个请求头之后是一个空行,发送回车符合换行符,通知服务器以下不再有请求头,请求头部结束,接下来为请求正文,这一行非常重要,必不可少。
4、请求数据(可选部分)
请求数据不再GET方法中使用,而是在POST方法中使用,POST方法适用于需要客户填写表单的场合,与请求数据相关的最常使用的请求头是Content-Type和Content-Length。
(二)HTTP响应报文
HTTP响应报文也由三个部分组成,分别是:状态行、响应头部、响应正文。
1、状态行
由3部分组成,分别为:协议版本,状态码,状态码描述,之间由空格分隔。
HTTP中常见的状态码:
- 1xx:信息性状态码,表示服务器已接收了客户端请求,客户端可继续发送请求。
100 Continue
101 Switching Protocols
- 2xx:成功状态码,表示服务器已成功接收到请求并进行处理。
200 OK 表示客户端请求成功
204 No Content 成功,但不返回任何实体的主体部分
206 Partial Content 成功执行了一个范围(Range)请求
- 3xx:重定向状态码,表示服务器要求客户端重定向,重定向到其他资源位置。
301 Moved Permanently 永久性重定向,响应报文的Location首部应该有该资源的新URL
302 Found 临时性重定向,响应报文的Location首部给出的URL用来临时定位资源
303 See Other 请求的资源存在着另一个URI,客户端应使用GET方法定向获取请求的资源
304 Not Modified 服务器内容没有更新,可以直接读取浏览器缓存
307 Temporary Redirect 临时重定向。与302 Found含义一样。302禁止POST变换为GET,但实际使用时并不一定,307则更多浏览器可能会遵循这一标准,但也依赖于浏览器具体实现
- 4xx:客户端错误状态码,表示客户端的请求报文有误,服务器无法处理。
400 Bad Request 表示客户端请求有语法错误,不能被服务器所理解
401 Unauthonzed 表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用
403 Forbidden 表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因
404 Not Found 请求的资源不存在,例如,输入了错误的URL
- 5xx:服务器错误状态码,表示服务器未能正常处理客户端的请求而出现内部错误。
500 Internel Server Error 表示服务器发生不可预期的错误,导致无法完成客户端的请求
503 Service Unavailable 表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常
2、响应头部
与请求头部类似,为响应报文添加了一些附加信息。
HTTP中常见的响应头:
(三)常见的首部字段
1、通用首部字段:
HTTP请求报文和响应报文都包含的字段
- Date:创建报文的时间
- Connection:连接的管理
- Cache-Control:缓存的控制
- Transfer-Encoding:传输编码控制
2、请求首部字段:
HTTP请求报文的常用首部字段
- HOST:请求资源所在的服务器
- Accept:可处理的媒体类型
- Accept-Charset:可接收的字符集
- Accept-Encoding:可接收的内容编码
- Accept-Language:可接收的自然语言
3、响应首部字段:
HTTP响应报文的常用首部字段
- Accept-Range:可接收的字节范围
- Location:令客户端重定向的URI
- Server:HTTP服务器的安装信息
4、实体首部字段:
请求报文和响应报文的实体部分的常用首部字段
- Allow:资源可支持的HTTP方法
- Content-Type:实体类型(例文本、图像、视频……)
- Content-Encoding:实体适用的编码方式
- Content-Language:实体的自然语言
- Content-Length:实体主体的字节数
- Content-Range:实体主体的范围
二、HTTP和HTTPS
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而诞生了HTTPS。
1、区别
(1)证书申请方式不同:HTTP协议可以免费申请,而HTTPS协议需要到CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,需要一定费用。
(2)传输信息安全性不同:HTTP是超文本传输协议,信息是明文传输,如果攻击者截取了Web浏览器和网站服务器之间的传输接文,就可以直接读懂其中的信息。HTTPS则是具有安全性的SSL加密传输协议,为浏览器和服务器之间的通信加密,确保数据传输的安全。
(3)端口不同:HTTP协议使用的是80端口,HTTPS协议使用的是443端口。
(4)连接方式不同:HTTP的连接很简单,是无状态的,HTTPS协议是由SSL+HTTP协议构建的可进行假面传输、身份认证的网络协议,比HTTP协议安全。(无状态的意思是其数据包的发送、传输和接受都是独立的,无连接的意思是指通信双方都不长久的维持对方的任何信息)。
2、HTTPS的工作原理
(1)cilent_hello
客户端发起请求,以明文传输请求信息,包含版本信息、加密套件候选列表、压缩算法候选列表、随机数、扩展字段等信息。
- 支持的最高TSL协议版本verision。
- 客户端支持的加密套件列表,每个加密套件对应TLS原理中的四个功能的组合:认证算法、密钥交换算法(密钥协商)、对称加密算法(信息加密)、信息摘要(完成行校验)。
- 支持的压缩算法列表,用户后续的信息压缩传输。
- 随机数random_C,用于后续的密钥的生成。
- 扩展字段,支持协议与算法的相关参数以及其他辅助信息。
(2)server_hello+server_certificate+sever_hello_done
- server_hello:服务端返回协商的信息结果,包括选择使用的协议版本version、选择的加密套件、选择的压缩算法、随机数random_S等,其中随机数用于后续的密钥协商;
- server_certificates:服务端配置对应的证书链,用于身份验证与密钥交换;
- server_hello_done:通知客户端server_hello信息发送结束;
证书制作过程:
对于CA机构来说,其也有两个密钥,我们暂且称之为CA私钥和CA公钥,CA机构先将服务端的公钥用数字摘要算法生成摘要。然后使用CA私钥将这个摘要进行加密处理,生成数字签名。服务端将数字签名和公钥绑定在一起形成数字证书,发送给客户端。
(4)客户端验证数字证书的合法性(验证是公钥是不是相应的服务端发送过来的,防止中途被篡改)
浏览器用内置的CA公钥对数字证书的数字签名进行解密,并用数字摘要算法对数字证书中的公钥进行处理生成本地的数字签名,然后与CA解密后的数字签名进行匹配,确认数字证书的有效性。如有问题,则提示风险。
(5)客户端生成随机数Pre-master,并用公钥加密发送给服务端。
此时客户端已经获取全部的计算协商密钥需要的信息:两个明文随机数random_C和random_S与计算产生的Pre_mastrer,计算得到协商密钥。
enc_key=Fuc(random_C, random_S, Pre-Master)
客户端通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信。
encrypted_handshake_message,结合之前所有通信参数的 hash 值与其它相关信息生成一段数据,采用协商密钥 session secret 与算法进行加密,然后发送给服务器用于数据与握手验证;
(6)服务端用自己的私钥进行解密得到随机数,生成通信密钥。
服务器用私钥解密后得到Pre-master 数据,基于之前交换的两个明文随机数random_C和random_S,计算得到通信密钥
enc_key=Fuc(random_C, random_S, Pre-Master);
change_cipher_spec, 验证通过之后,服务器同样发送 change_cipher_spec 以告知客户端后续的通信都采用协商的密钥与算法进行加密通信;
(7)双方enc_key密钥进行通信。
个人认为:HTTPS通信的核心就是浏览器用非对称加密算法对密钥进行加密,服务端解密获得密钥后用该密钥进行传输。就是非对称加密算法+对称加密算法。而CA证书只有一个作用,因为非对称加密需要传送公钥,CA就是确保这个公钥中途没有被修改,是相应的服务端发过来的。
三、对称加密和非对称加密以及CA?
1、对称加密
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
,服务端解密获得密钥后用该密钥进行传输。就是非对称加密算法+对称加密算法。而CA证书只有一个作用,因为非对称加密需要传送公钥,CA就是确保这个公钥中途没有被修改,是相应的服务端发过来的。
三、对称加密和非对称加密以及CA?
1、对称加密
[外链图片转存中…(img-CeDrYfXL-1726133102737)]
[外链图片转存中…(img-P2zewWsp-1726133102738)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。