① 计算机网络-Http/Https基础
一、前言
主要包括:1、http基础:TCP/IP,TCP协议,IP协议,DNS协议,URI与URL;
2、http协议:http报文,http方法,http状态码,常见问题
名词解释:
(1)HTTP(HyperText Transfer Protocol)超文本传输协议
(2)URL(Uniform Resource Locator)统一资源定位符
(3)URI(Uniform Resource Identifer)统一资源标识符
(4)TCP(Transmission Control Protocol)传输控制协议
(5)IP(Internet Protocol)网际协议
(6)UDP(User Data Protocol)用户数据报协议
(7)MAC地址(Media Access Control)媒体访问控制地址/物理地址/硬件地址
(8)ARP协议(Address Resolution Protocol)地址解析协议
二、HTTP基础
2.1TCP/IP
TCP/IP是互联网相关的各类协议族的总称,而http是TCP/IP协议族中的一个子集。
TCP/IP协议族可以分为四层:
(1)应用层:决定向用户提供 应用服务时通信的活动 ,TCP/IP协议族内预存了各类通用的应用服务,如:http,ftp,dns等。
(2)传输层:提供处于网络连接中的两台计算机之间的 数据传输 ,包含两个协议:tcp,udp。
(3)网络层:用来处理 网络上流动的数据包 ,在众多的选项中选择一条传输线路,将数据包传送到对方计算机。包含的协议:IP协议。
(4)数据链路层:用来 处理连接网络的硬件 部分。
2.2 IP协议
IP协议属于网络层,负责处理网络上流动的数据包。为了保证传送成功,需要满足各类条件,其中两个重要的条件时IP地址和MAC地址。
(1)IP地址,指明了节点被分配到的地址;
(2)MAC地址,指网卡所属的固定地址;
(3)IP地址可以和MAC地址进行配对,IP地址可以变换,但是MAC地址基本上不会更改;
(4)使用ARP地址解析协议可以根据通信方的IP地址反查出对应的MAC地址
2.3 TCP协议
TCP协议位于传输层,提供 可靠的字节流服务 (也就是说,将大数据分隔成以报文段为单位的数据包进行管理)。
为了确保数据准确无误的到达目标处,TCP协议通常采用三次握手策略。
如果在握手的过程中某一个阶段莫名的 中断 了, TCP协议会再次以相同的顺序发送相同的数据包 。
2.4DNS协议
DNS协议位于应用层,提供域名到IP地址之间的解析服务。
2.5 URI和URL
URI是某一个协议方案表示的 资源的定位标识符 ,协议方案是指访问资源所使用的协议类型,如:http,ftp,file等。
URL用字符串标识某一个互联网资源 ,而 URL表示资源的地点,URL是URI的子集。
2.6 HTTP协议
HTTP协议用于客户端和服务器端之间的通信。请求必定由客户端发出,而服务器端回复响应。
HTTP协议不保存状态,为 无状态协议 。这是为了更快的处理大量事务,确保协议的可伸缩性而特意设计的。
但是随着Web的不断发展,这一特性也引发了一些问题,如:如何保持登录状态、如何记录用户信息等,为了解决这一问题,引入了Cookie技术。
2.6.1常见状态码
2XX 成功
200 OK,表示从客户端发来的请求在服务器端被正确处理
204 No content,表示请求成功,但响应报文不含实体的主体部分
205 Reset Content,表示请求成功,但响应报文不含实体的主体部分,但是与 204 响应不同在于要求请求方重置内容
206 Partial Content,进行范围请求
3XX 重定向
301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
302 found,临时性重定向,表示资源临时被分配了新的 URL
303 see other,表示资源存在着另一个 URL,应使用 GET 方法获取资源
304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
307 temporary redirect,临时重定向,和302含义类似,但是期望客户端保持请求方法不变向新的地址发出请求
4XX 客户端错误
400 bad request,请求报文存在语法错误
401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
403 forbidden,表示对请求资源的访问被服务器拒绝
404 not found,表示在服务器上没有找到请求的资源
5XX 服务器错误
500 internal sever error,表示服务器端在执行请求时发生了错误
501 Not Implemented,表示服务器不支持当前请求所需要的某个功能
503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求
2.6.2HTTP报文头部(HTTP首部)
| 通用字段 | ** 作用** |
| Cache-Control | 控制缓存的行为 |
| Connection | 浏览器想要优先使用的连接类型,比如:keep-alive |
| Date | 创建报文时间 |
| Pragma | 报文指令 |
| Via | 代理服务器相关信息 |
| Transfer-Encoding | 传输编码方式 |
| Upgrade | 要求客户端升级协议 |
| Warning | 在内容中可能存在错误 |
| ** 请求字段** | ** 作用** |
| Accept | 能正确接收的媒体类型 |
| Accept-Charset | 能正确接收的字符集 |
| Accept-Encoding | 能正确接收的编码格式列表 |
| Accept-Language | 能正确接收的语言列表 |
| Expect | 期待服务端的指定行为 |
| From | 请求方邮箱地址 |
| Host | 服务器的域名 |
| If-Match | 两端资源标记比较 |
| If-Modified-Since | 本地资源未修改返回 304(比较时间) |
| If-None-Match | 本地资源未修改返回 304(比较标记) |
| User-Agent | 客户端信息 |
| Max-Forwards | 限制可被代理及网关转发的次数 |
| Proxy-Authorization | 向代理服务器发送验证信息 |
| Range | 请求某个内容的一部分 |
| Referer | 示浏览器所访问的前一个页面 |
| TE | 传输编码方式 |
| 响应字段 | 作用 |
| Accept-Ranges | 是否支持某些种类的范围 |
| Age | 资源在代理缓存中存在的时间 |
| ETag | 资源标识 |
| Location | 客户端重定向到某个 URL |
| Proxy-Authenticate | 向代理服务器发送验证信息 |
| Server | 服务器名字 |
| WWW-Authenticate | 获取资源需要的验证信息 |
| 实体字段 | 作用 |
| Allow | 资源的正确请求方式 |
| Content-Encoding | 内容的编码格式 |
| Content-Language | 内容使用的语言 |
| Content-Length | request body 长度 |
| Content-Location | 返回数据的备用地址 |
| Content-MD5 | Base64加密格式的内容 MD5检验值 |
| Content-Range | 内容的位置范围 |
| Content-Type | 内容的媒体类型 |
| Expires | 内容的过期时间 |
| Last_modified | 内容的最后修改时间 |
2.6.3 HTTP方法
三****、HTTPS基础
HTTPS 还是通过了 HTTP 来传输信息,但是信息通过 TLS 协议进行了加密。
3.1 TLS
TLS 协议位于传输层之上,应用层之下。首次进行 TLS 协议传输需要两个 RTT ,接下来可以通过 Session Resumption 减少到一个 RTT。(RTT表示发送端发送数据到接收到对端数据所需的往返时间)
在 TLS 中使用了两种加密技术,分别为:对称加密和非对称加密。
对称加密:
对称加密就是两边拥有相同的秘钥,两边都知道如何将密文加密解密。
非对称加密:
有公钥私钥之分,公钥所有人都可以知道,可以将数据用公钥加密,但是将数据解密必须使用私钥解密,私钥只有分发公钥的一方才知道。
3.2 TLS 握手过程如下图:
(1)客户端发送一个随机值,需要的协议和加密方式
(2)服务端收到客户端的随机值,自己也产生一个随机值,并根据客户端需求的协议和加密方式来使用对应的方式,发送自己的证书(如果需要验证客户端证书需要说明)
(3)客户端收到服务端的证书并验证是否有效,验证通过会再生成一个随机值,通过服务端证书的公钥去加密这个随机值并发送给服务端,如果服务端需要验证客户端证书的话会附带证书
(4)服务端收到加密过的随机值并使用私钥解密获得第三个随机值,这时候两端都拥有了三个随机值,可以通过这三个随机值按照之前约定的加密方式生成密钥,接下来的通信就可以通过该密钥来加密解密
通过以上步骤可知,在 TLS 握手阶段,两端使用非对称加密的方式来通信,但是因为非对称加密损耗的性能比对称加密大,所以在 正式传输数据 时,两端使用 对称加密 的方式通信。
PS:以上说明的都是 TLS 1.2 协议的握手情况 ,在 1.3 协议中,首次建立连接只需要一个 RTT,后面恢复连接不需要 RTT 了。
四、GET和POST的区别
从技术上说:
1、get请求能缓存,post不能;
2、post相对于get来说,安全一点点,因为get请求都会包含在URL里,会被浏览器保存历史记录,post不会,但是在抓包的情况是一样的。
3、post可以request body来传递比get更多的数据,get米有这个技术。
4、url长度有限制,会影响get请求,长度限制是浏览器限制规定的,不是rfc(互联网通信协议)规定的。
5、post支持更多的 编码类型 且不对 数据类型 限制
② 手机上网连接类型HTTP是指什么
TTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。HTTP协议的主要特点可概括如下:1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。2.2 HTTP协议的几个重要概念1.连接(Connection):一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间。2.消息(Message):HTTP通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。3.请求(Request):一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号4.响应(Response):一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如“成功”或“没找到”)和文档的MIME类型。5.资源(Resource):由URI标识的网络数据对象或服务。6.实体(Entity):数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。7.客户机(Client):一个为发送请求目的而建立连接的应用程序。8.用户代理(User agent):初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。9.服务器(Server):一个接受连接并对请求返回信息的应用程序。10.源服务器(Origin server):是一个给定资源可以在其上驻留或被创建的服务器。11.代理(Proxy):一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前,必须解释并且如果可能重写它。代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。12.网关(Gateway):一个作为其它服务器中间缺颤媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。13.通道(Tunnel):是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于HTTP通讯,尽管通道可能是被一个HTTP请求初始化的。当被中继的连接两端关闭时,通道便消失。当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道闷扮散被经常使用。14.缓存(Cache):反应信息的局域存储。2.3 HTTP协议的运作方式HTTP协议是基于请求/响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是 MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应蚂氏信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。许多HTTP通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理(UA)和源服务器(O)之间通过一个单独的连接来完成(见图2-1)。图2-1当一个或多个中介出现在请求/响应链中时,情况就变得复杂一些。中介由三种:代理(Proxy)、网关(Gateway)和通道(Tunnel)。一个代理根据URI的绝对格式来接受请求,重写全部或部分消息,通过URI的标识把已格式化过的请求发送到服务器。网关是一个接收代理,作为一些其它服务器的上层,并且如果必须的话,可以把请求翻译给下层的服务器协议。一个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介(例如:防火墙等)或者是中介不能识别消息的内容时,通道经常被使用。图2-2上面的图2-2表明了在用户代理(UA)和源服务器(O)之间有三个中介(A,B和C)。一个通过整个链的请求或响应消息必须经过四个连接段。这个区别是重要的,因为一些HTTP通讯选择可能应用于最近的连接、没有通道的邻居,应用于链的终点或应用于沿链的所有连接。尽管图2-2是线性的,每个参与者都可能从事多重的、并发的通讯。例如,B可能从许多客户机接收请求而不通过A,并且/或者不通过C把请求送到A,在同时它还可能处理A的请求。任何针对不作为通道的汇聚可能为处理请求启用一个内部缓存。缓存的效果是请求/响应链被缩短,条件是沿链的参与者之一具有一个缓存的响应作用于那个请求。下图说明结果链,其条件是针对一个未被UA或A加缓存的请求,B有一个经过C来自O的一个前期响应的缓存拷贝。图2-3在Internet上,HTTP通讯通常发生在TCP/IP连接之上。缺省端口是TCP 80,但其它的端口也是可用的。但这并不预示着HTTP协议在Internet或其它网络的其它协议之上才能完成。HTTP只预示着一个可靠的传输。以上简要介绍了HTTP协议的宏观运作方式,下面介绍一下HTTP协议的内部操作过程。首先,简单介绍基于HTTP协议的客户/服务器模式的信息交换过程,如图2-4所示,它分四个过程,建立连接、发送请求信息、发送响应信息、关闭连接。图2-4在WWW中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。WWW服务器运行时,一直在TCP80端口(WWW的缺省端口)监听,等待连接的出现。下面,讨论HTTP协议下客户/服务器模式中信息交换的实现。 1.建立连接 连接的建立是通过申请套接字(Socket)实现的。客户打开一个套接字并把它约束在一个端口上,如果成功,就相当于建立了一个虚拟文件。以后就可以在该虚拟文件上写数据并通过网络向外传送。2.发送请求打开一个连接后,客户机把请求消息送到服务器的停留端口上,完成提出请求动作。HTTP/1.0 请求消息的格式为:请求消息=请求行(通用信息|请求头|实体头) CRLF[实体内容]请求 行=方法 请求URL HTTP版本号 CRLF方 法=GET|HEAD|POST|扩展方法U R L=协议名称+宿主名+目录与文件名请求行中的方法描述指定资源中应该执行的动作,常用的方法有GET、HEAD和POST。不同的请求对象对应GET的结果是不同的,对应关系如下:对象 GET的结果文件 文件的内容程序 该程序的执行结果数据库查询 查询结果HEAD——要求服务器查找某对象的元信息,而不是对象本身。POST——从客户机向服务器传送数据,在要求服务器和CGI做进一步处理时会用到POST方法。POST主要用于发送HTML文本中FORM的内容,让CGI程序处理。一个请求的例子为:GET http://networking.zju.e.cn/zju/index.htm HTTP/1.0头信息又称为元信息,即信息的信息,利用元信息可以实现有条件的请求或应答。请求头——告诉服务器怎样解释本次请求,主要包括用户可以接受的数据类型、压缩方法和语言等。实体头——实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。实体——请求或应答对象本身。3.发送响应服务器在处理完客户的请求之后,要向客户机发送响应消息。HTTP/1.0的响应消息格式如下:响应消息=状态行(通用信息头|响应头|实体头) CRLF 〔实体内容〕状 态 行=HTTP版本号 状态码 原因叙述状态码表示响应类型1×× 保留2×× 表示请求成功地接收3×× 为完成请求客户需进一步细化请求4×× 客户错误5×× 服务器错误响应头的信息包括:服务程序名,通知客户请求的URL需要认证,请求的资源何时能使用。4.关闭连接客户和服务器双方都可以通过关闭套接字来结束TCP/IP对话