Http、Https网络请求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Http、Https网络请求相关的知识,希望对你有一定的参考价值。
参考技术A HTTP协议通常承载于TCP协议之上;有时也承载于TLS或SSL协议层之上,也就是我们常说的HTTPS。大部分网站采用HTTP协议进行交互,目前仍有大量的客户端采用HTTP协议进行交互。但是随着安全等级的提升,这些交互逐渐被HTTPS协议取代;
一次HTTP操作称为一个事务,其工作过程可分为五步:
所有流程,均由HTTP请求自动完成。如果在以上过程中的某一步出现错误,那么产生错误的信息将返回,客户端做对应处理。可以是客户端直接与服务器进行交互,也可能在请求中间增加代理。
HTTP基于传输层TCP协议,而TCP是一个端到端的面向连接的协议。所谓的端到端可以理解为进程到进程之间的通信。所以HTTP在开始传输之前,首先需要建立TCP连接,而TCP连接的过程需要所谓的“三次握手”。盗用下图所示TCP连接的三次握手:
由于服务器的IP或者域名都是相对固定的,而客户端可能经常发生变化,因此HTTP协议似乎永远是客户端(Client)发起请求,服务器(Server)返回响应,Request和Response成对出现。同时,如果客户端没有主动请求,很难实现由服务端向客户端推送数据。
HTTP协议的主要特点可概括如下:
1、支持客户端/服务器模式,支持基本认证和安全认证。
2、简单快速
3、灵活
4、可以持续连接
5、无状态
URL(Uniform Resource Locator)格式, http://www.xxxxxx.com/images/icon.png ;
地址用于描述一个网络上的资源,使用协议+host+path的方式,基本格式如下:
Accept
Accept-Encoding
Accept-Language
Accept-Charset
User-Agent
Content-Type
Referer
Connection:
Host
Cookie
Content-Length
Authorization
UA-Pixels,UA-Color,UA-OS,UA-CPU
Range
HTTP/1.1协议,共定义了八种方法,用来表明Request-URI指定的资源的不同操作方式:
GET
POST
PUT
DELETE
OPTIONS
HEAD
TRACE
CONNECT
PATCH
方法名称区分大小写。当某个请求所针对的资源不支持对应的请求方法的时候,服务器返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。
包含:状态行、消息报头、响应正文。
每一次请求,都会产生一个响应。一般使用状态码,粗略区分请求是否成功。如果一切正常,一个标准网页会收到一条200的状态码;错误有对应的错误码,常见的有403、404、500等。
下面列出所有错误码:
发现了一个趣味状态码图,喜欢可以点击: https://www.toutiao.com/i6628119994469204484/
Allow
Date
Expires
P3P
Set-Cookie
ETag
Last-Modified
Content-Type
IANA(The Internet Assigned Numbers Authority,互联网数字分配机构)定义了8个大类的媒体类型,分别是:
Content-Range
Content-Length
Content-Encoding
Content-Language
Server
X-AspNet-Version
例如: X-AspNet-Version: 4.0.30319
X-Powered-By
Connection
Location
Refresh
HTTPS
SSL
TLS
对称加密
非对称加密
证书包括内容:
客户端在接受到服务端发来的SSL证书时,会对证书的真伪进行校验,以浏览器为例说明如下:
所以通过发送SSL证书的形式,既解决了公钥获取问题,又解决了黑客冒充问题,一箭双雕,HTTPS加密过程也就此形成
所以相比HTTP,HTTPS 传输更加安全
HTTPS 缺点:
综上所述,相比 HTTP 协议,HTTPS 协议增加了很多交互、加密解密等流程,保证数据传输的安全,很大程度上避免了黑客的攻击。
以上是关于Http、Https网络请求的主要内容,如果未能解决你的问题,请参考以下文章
完美解决Android 9.0以上HTTP网络请求被限制问题
FlutterHTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )