HTTP概述:
HTTP(Hyper Text Transfer Protocol) 即超文本传输协议,是基于TCP协议之上的,用于从万维网(WWW.)服务器传输超文本到本地浏览器的传送协议。之所以说基于TCP协议,是因为每当浏览器需要从服务器获取网页数据时,都会发出一次Http请求 ,Http会通过TCP建立起一个到服务器的连接通道,当本次请求数据完毕后,Http会立即将TCP连接断开。由于此过程非常短,所以Http连接是一种短连接,是一种无状态连接。
HTTP 工作原理
HTTP协议工作于客户端-服务端架构(C/S)上。浏览器作为HTTP客户端通过URL(我们常说的网址)向HTTP服务端即WEB服务器发送所有请求。
HTTP特点:
- 支持客户端、服务器模式。
- 简单快速: 客户向服务器请求服务时,只需传送请求方法与路径。由于HTTP协议简单,使得HTTP服务器程序规模小,因而通信速度快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无连接:每次链接只处理一个请求。此方式能节省传输时间。
- 无状态:指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。反之,在服务器不需要先前信息时它的应答就较快。
URL:
URL指服务器上的某个具体资源,通常也被称作网址。
通用格式: scheme://host[:port]/path[?query-string][#fragment]
例如,在百度上搜索"C++":
名称 | 功能 | 对应字段 |
scheme | 访问服务器时使用的那种协议格式。(http、https、ftp等) | https |
host | http服务器的IP地址或域名 | www.baidu.com |
port | 端口号,每种协议都有特定的端口号,比如http是80。 | https默认端口号443,可以省略 |
path | 访问资源的路径 | s |
query-string | 发给http服务器的数据。 KV结构(键值对之间使用 '&' 分割; 键和值之间使用 '=' 分割) 查找字符串 | wd=C%2B%2B....... |
fragment | 锚点 |
-
在浏览器中输入URL后,发生什么事?
1. 应用层:
1.1 DNS域名解析
1.2 HTTP角度,发送一个HTTP请求,获得一个HTTP响应
1.3 HTTPS角度
2. 传输层角度:
2.1 TCP连接建立过程
2.2 TCP传输数据的过程(确认应答、超时重传、滑动窗口...)
2.3 断开链接过程
2.4 长连接的设定
3. 网络层角度:
3.1 IP地址
3.2 路由选择过程
4. 数据链路层角度:
以太网的层次,如何通过数据帧的方式获得IP地址
5. 交互
HTTP请求格式:
请求行 | a). 方法 b). URL c). 版本号(HTTP/1.1 HTTP/2.0 HTTP/3.0) |
协议头部(Header) | 请求属性每一行是一个键值对,键和值之间用: 分割。每个属性消息头部用做CRLF分隔符,最后一个属性头部有两个CRLF,标识消息头部的结束 |
空行 | |
主体(Body) | Body允许为空字符串。若Body存在,则Header中Content-Length来标识长度 |
HTTP响应格式:
HTTP响应与请求格式大致类似。
请求行 | a). 版本号 b). 状态码 c). 状态码解释 |
协议头部(Header) | 与请求格式一样 |
空行 | |
主体(Body) | Body允许为空字符串. 如果Body存在, 则在Header中会有⼀一个Content-Length属性来标识Body的长度; 如果服务器返回了⼀一个html页面, 那么html页面内容就是在body中。 |
HTTP方法:
GET | 请求指定页面信息,并返回实体主体。 |
POST | 向指定资源提交数据进行处理请求。 |
PUT | 从客户端向服务器传送的数据取代指定的文档内容 |
HEAD | 获取报文首部 |
DELETE | 请求服务器删除指定页面 |
CONNECT | 1.1版本中预留能够将连接改为管道方式的代理服务器 |
PATCH | 实体中包含一个表,表中说明与该URL所表示的原内容的区别 |
MOVE | 请求服务器将指定页面移至另一个网络 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
COPY | 请求服务器将指定页面移至另一个网络地址 |
LINK | 请求服务器与资源间建立链接请求 |
UNLINK | 断开链接关系 |
WRAPPED | 运行客户端发送经过封装的请求 |
Extensionmothed | 在不改动协议前提下,可增加另外方法 |
- GET和POST区别:
区别 | GET | POST |
本质 | 用于信息获取 | 用于修改服务器上资源的请求 |
安全性 | 请求数据会附在URL之后,所以不安全 | 提交数据放在HTTP报文实体的主体里,所以安全性较高。但若传输敏感数据,请使用数据加密。 |
传输长度限制 | 有限制,一般在2KB(GET是通过URL提交数据,URL本身没有限制,但是不同浏览器对URL有限制) | 没有限制,对数据大小取决于服务器处理程序能力 |
- HEAD与GET区别:GET有方法实体;而HEAD只是获取报文首部,无实体。
- HTTP状态码:
1xx(信息性状态码) | 表示服务器已接收客户端请求,客户端可以继续发生请求 | 100:客户端应继续发送请求,若客户端请求发送完,可忽略。
101:服务器已理解客户端请求,将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求 |
2xx(成功状态码) | 表示服务器成功处理客户端请求 | 200:客户端请求成功
204:服务器成功处理了请求,但不返回任何实体内容 |
3xx(重定向状态码) | 表示服务器要求客户端重定向 | 301:永久性重定向,响应报文的Location首部应该有资源的新URL
302:临时性重定向,响应报文的Location首部应该有资源的临时URL |
4xx(客户端错误状态码) | 表示客户端错误 | 403:服务器拒绝提供服务,拒绝原因在响应正文给出
404:请求资源不存在 |
5xx(服务器错误状态码) | 表示服务器错误 | 500: 服务器发送不可预知错误
503:服务器当前不能处理请求,一段时间后可能恢复正常 |
常见Header:
- Content-Type:数据类型(text / html)
- Content-Length:Body长度
- Host:客户端告知服务器,所请求的资源是哪个主机的哪个端口
- User-Agent:声明用户操作系统和浏览器版本信息
- referer:当前页面是从哪个页面跳转过来的
- location:搭配3xx状态码,告诉客户端去哪访问
- Cookie:用于在客户端存储少量信息,常用于实现会话功能。
- session与cookie:
Session用于保存每个用户的专用信息. 每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) . 她的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右).Session中的信息保存在Web服务器内容中,保存的数据量可大可小.当 Session超时或被关闭时将自动释放保存的数据信息.由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低.对于小量的数据,使用Session对象保存还是一个不错的选择。
Cookie 用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置.如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止.如果将Cookie对象的Expires属性设置为Minvalue,则表示Cookie永远不会过期.Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4K,因此不要用来保存数据集及其他大量数据.由于并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的,未加密的数据,否则会影响网站的安全性。
- session工作原理:
(1)当有Session启动时,服务器生成一个唯一值,称为Session ID(通过取进程ID的方式取得的)。
(2)然后,服务器开辟一块内存,对应于该Session ID。
(3)服务器再将该Session ID写入浏览器的cookie。
(4)服务器内有一进程,监视所有Session的活动状况,如果有Session超时或是主动关闭,服务器就释放改内存块。
(5)当浏览器连入IIS(WEB服务器)时并请求的ASP(动态服务器页面)内用到Session时,IIS就读浏览器Cookie中的Session ID。
(6)然后,服务检查该Session ID所对应的内存是否有效。
(7)如果有效,就读出内存中的值。
(8)如果无效,就建立新的Session。
-
session与cookie区别:
Session | Cookie |
保存在服务器 | 保存在客户端 |
可以保存任何类型数据,甚至是对象 | 保存的是字符串或二进制数据 |
仅在自己域名内有效 | 可支持跨域名访问 |
生存期短 | 可以设置很长的生存时间 |
HTTP与HTTPS:
HTTPS:并非是应用层的一种协议,只是HTTP通信接口部分用SSL(安全套接层)和TLS(传输安全层)协议代替。TLS/SSL使用了非对称加密、对称加密以及hash等。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
HTTP | HTTPS |
需要到CA申请证书 | |
超文本传输,信息明文传输 | 具有安全性的ssl加密传输协议 |
80端口 | 443端口 |
连接很简单,是无状态的 | 由http+ssl协议构建,可加密传输、身份认证,较为安全 |