
🌟HTTP与HTTPS
📘超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议。它运行在IOS七层网络模型的第七层:应用层,其底层传输层协议是TCP,常用端口是80端口。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。(关于MIME,它是一种扩展类型,经常被用在POP3邮局协议中,用于扩展邮件文本格式。最初的POP协议中也只支持ACSII格式信息传递。)
📘超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种透过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。现在常用的网站都是需要通过HTTPS协议来访问,主要原因就是使用它传输数据更安全、可控。
🌰GET请求报文解析
范例:
- GET表示请求方法为Get请求。
- /d?dn=80c…表示请求URL。其中的GET请求的URL中包含请求参数Query Parameter。
- HTTP/1.1表示HTTP协议以及版本。
- Host表示发送请求报文的主机地址。
- User-Agent表示浏览器标识、操作系统、加密等级等。
- Connection表示连接状态。keep-live为长连接。close为断开断开连接。
🌰POST请求报文解析
再提供一个POST请求报文供学习使用。
🌰响应报文解析
范例:
- HTTP/1.1表示HTTP协议版本
- 200表示响应状态码。200是OK,请求成功,实体的主体部分包含了所请求的资源。关于状态码可在该博客查看详细信息。下面的字段为响应头内容。
- Server表示响应服务器类型以及版本。
- Date表示响应回复时间。
- Content-Type表示响应头类型以及编码格式
- Transfer-Encoding表示传输编码格式
- Connection表示连接状态。keep-live为长连接。close为断开断开连接。
- 下面的字段应该为响应体,主要是请求返回的数据
🌟协议场景模拟
🌆情景:
主机A (ip = 192.168.42.21)打开浏览器,输入URL:https://www.baidu.com/,浏览器显示出URL对应的HTML网页。
解析:
- 主机A输入URL。URL先要转换为对应Web服务器的IP地址,需要先通过DNS(Domain Name System)域名解析系统,将域名映射为对应的IP地址。
- DNS服务器通过递归或者层次查询,将URL对应的Web服务器IP地址返回给主机A。
- 主机A通过返回的IP地址,向对应的Web服务器发出TCP连接请求,因为HTTP协议是基于TCP传输协议建立的。(PS:由于这里的主机使用的局域网IP地址,所以还需要经过NAT协议,将局域网IP转换为公网IP。)
- Web服务器返回TCP响应连接报文。主机A在第三次握手时就可以正式发送HTTP请求报文给Web服务器。
- Web服务器解析该请求报文,生成HTTP响应报文,将数据作为响应体返回给主机A。
- 浏览器显示返回数据,就是对应的HTML网页。
下图可作为参考。
🌟HTTP两种请求方法区别
-
GET 从指定的资源请求数据。必要时,可以将查询字符串参数追加到URL的末尾,以便将信息发送给服务器。GET因为参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有限制的,不同的浏览器和服务器不同,一般限制在 2~8K 之间,更加常见的是 1k 以内;
-
POST 向指定的资源提交要被处理的数据。POST请求应该把数据作为请求的主体提交,请求主体(body)可以包括非常多的数据,且数据格式不限。POST请求是没有的长度限制,请求数据是放在body中。
阅读HTTP协议(二),学习如何利用QT实现HTTP请求获取Web服务器数据。