目录
一、初识HTTP
1、从输入url经历了什么?
-
我们在浏览器中输入URL (wWw.*充**c.com)域名
-
浏览器将域名发送给DNS服务器,DNS服务器将域名解析成IP地址发给浏览器。 浏览器将会根据IP地址与WEB服务器进行通信(通信的协议就是http协议)
-
Web服务器收到请求后,将响应结果以响应报文的形式回传给浏览器
-
浏览器解析html代码,获取资源,渲染页面呈现给用户
2、HTTP
HTTP又称超文本传输协议,是一种通信协议,他允许将超文本标记语言(HTML)文档从WEB服务器传送到客户端的浏览器
3、TCP/IP
-
HTTP协议是构建在TCP/IP协议之上的,是TCP/IP协议的一个子集
-
TCP/IP协议其实是一系列与互联网相关联的协议集合起来的总称
-
分层管理是TCP/IP协议的重要特征
-
TCP/IP协议是由一个四层协议组成的系统:应用层、传输层、网络层、数据链路层
4、TCP/IP的分层
应用层:一般是我们编写的应用程序,决定了向用户提供的应用服务。应用层可以通过系统调用与传输层进行通信。如:FTP、DNS、HTTP等
传输层:
-
通过系统调用向应用层提供处于网络连接中的两台计算机之间的数据传输功能
-
在传输层有两个性质不同的协议:TCP和UDP
网络层:用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(传输路线)到达对方的计算机,并把数据包传输给对方
数据链路层:用来处理连接网络的硬件部分,包括控制操作系统、硬件设备驱动、NIC以及光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内
5、HTTP数据传输过程
6、TCP的三次握手(传输层)
使用TCP协议进行通过通信的双方必须先建立连接,然后才开始传输数据。为了确保连接双方的可靠性,在双方建立连接时,TCP协议采用三次握手策略。
7、DNS的域名解析
当访问一个网址时,会先去host文件去查找域名对应ip地址,如果该ip地址存在,那么就会直接使用。
如果host文件中没有域名对应的ip地址映射,那么就会去求助本地的DNS服务器,系统向本地的NDS服务器发送请求,去查询域名对应的ip地址。因为本地的DNS是有限的,如果能找到就会将结果返回给浏览器;如果不能找到,那么本地的DNS服务会一层一层的向上层的DNS服务器发送请求(设置转发的情况下)(如果没有设置转发,那么就会直接去十三台根NDS服务器查找),直到根服务器,如果能找到对应的ip地址,那么就会将ip地址进行回传给浏览器,如果仍然没有,那么就是域名错误。
二、HTTP的特点
http的特点
支持客户/服务器模式:
由客户端向服务器发出请求,服务端响应请求,并进行相应服务
简单快速:
- 客户端向服务器请求服务时,只需要传送请求方法和路径
- 请求方法常用的有GET,HEAD,POST。每种方法规定了客户与服务器联系的类型不同
- 由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度比较快
灵活:
HTTP允许传输任意类型的数据对象
无连接:
- 无连接的含义是限制每次连接只处理一个请求
- 服务器处理完客户的请求,并收到客户的应答后,即断开连接
- 采用这种方式可以节省传递时间
无状态:
- HTTP协议是无状态协议
- 无状态是指协议对于事务处理没有记忆能力。缺少状态意味如果后续处理需要前面的信息,则他必须重传,这样可能导致每次连接传送的数据量增大
- 另一方面,在服务器不需要先前信息时他就答应的较快
URI和URL的区别
URI:一个紧凑的字符串用来标示抽象和物理资源
URL是URI的子集,除了确定一个资源,还提供一种定位该资源的主要访问机制(如其网络“位置”)
HTTP报文结构
HTTP请求的方法
种类
-
GET:
-
POST
-
PUT
-
HEAD
-
DELETE
-
OPTIONS
-
TRACE
-
CONNECT
GET获取资源
GET方法用来请求访问已被URI识别的资源
指定的资源经服务器端解析后返回响应内容
get方法亦可以用来提交表单和其他数据
POST
一般用来传输实体的主体
GET请求与POST请求的区别
-
GET的数据会放在url中,用户可以看到。而post请求的数据放在了body中,用户看不到,所以更加安全
-
get请求的数据有大小限制,post请求数据没有大小限制
-
post比get更加安全
PUT
从客户端向服务器传送的数据取代指定的文档内容
PUT方法和POST方法最大的不同是:PUT是幂等的,而post不是幂等的.
创建对象的时候用post,更新资源的时候用put。但是put不带验证机制,不够安全
幂等:新建资源时,会覆盖掉原来的数据。就类似于换头像,每次更换都会覆盖掉上一次的,这就是put.而发博客,不停的发博客,会一直增加博客数量,这就是post
HEAD
类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头
DELETE
请求服务器删除指定的资源。但是该方法和PUT方法一样没有验证机制,所以一般很少使用
OPTIONS
用来查询针对请求URI指定的资源支持的方法
HTTP响应状态码
分类
1xx:表示消息,请求已被接受
2xx:表示成功,请求已经成功被服务器接收
3xx:表示重定向
4xx:表示请求错误
5xx:表示服务器错误
常见的HTTP状态码
状态码 | 状态码英文名称 | 描述 |
---|---|---|
200 | OK | 请求已经成功 |
202 | Accepted | 已接受请求,但未处理完成 |
206 | Partial Content | 部分类容,服务器成功处理了部分GET请求 |
状态码 | 状态码英文名称 | 描述 |
---|---|---|
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | 请求要求用户的身份验证 | |
403 | 拒绝执行此请求(禁止访问) | |
404 | Not Found | 服务器无法更具客户端的请求找到资源(网页)(资源不存在) |
500 | 服务器内部错误,无法完成请求 | |
502 | 充当网关或代理的服务器,从远端服务器接收到一个无效的请求 |
HTTP状态管理:Cookie与Session
因为http是无状态的(无记忆的)。很多时候因为这个无状态会造成不方便,所以需要用可以保存http连接状态的技术:cookie和session--会话跟踪技术
Cookie
-
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户的状态,就向客户端浏览器颁发一个Cookie
-
客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
Session:
-
Session是另一种记录客户状态的机制,保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上
-
客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了
保存Session Id的方式
-
Cookie(常用)
-
URL重写
-
隐藏表单
有效时间
Cookie的有效时间一般都特别久,甚至可以做到永远
Session:因为会有越来越多的用户会访问服务器(会导致Session越多),为了防止内存溢出,服务器就会把长时间没有活跃的用户(Session)删除。
Cookie与Session的区别
-
存放的位置不同:Cookie保存在客户端,Session保存在服务端
-
安全性(隐私策略不同):因为Cookie保存在浏览器中,对客户端是可见的,存在泄露的风险;Session存储在服务端,不存在泄露的风险
-
有效期不同:Cookie可以保存很长的时间;服务器会定时的清理超时的Session ID,避免服务器出现过大的压力
-
对服务器造成的压力不同:Cookie保存在浏览器,就不会对服务器造成太大的压力;而Session会随着用户的增多而越来越多,会造成服务器的压力