网络
网络是信息传输,接收,共享的虚拟平台
通过它把各个点,面,体的信息联系到一起,从而实现这些资源的共享
网络传输数据有一定的规则,这些规则我们称为协议
HTTP协议就是其中的一种,而且使用最为频繁
计算机网络的七层协议
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
DNS解析
域名解析(主机名解析):通过主机名,最终得到该主机名对应的IP地址的过程
每一台计算机都有一个唯一的IP地址,计算机根据IP实现相互通信
而我们通常使用的域名更多的是为了方便记忆以及个性化需要,它并不能直接对应到的服务器IP,我们需要经过DNS服务器去查找IP,这个根据域名找到IP地址的过程就是DNS解析
HTTP简介
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写
是用于从万维网服务器传输超文本到本地浏览器的传送协议
HTTP是基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)
HTTP采用的是 请求/应答 方式来传递数据
HTTP协议的默认端口号为80
HTTPS协议的默认端口号为443
HTTP是应用层协议,主要解决如何包装数据
HTTP协议的约束
约束了浏览器以何种格式向服务端发送数据
约束了服务器应该以何种格式来接受客户端发送的数据
约束了服务器应该以何种格式来反馈数据给浏览器
约束了浏览器应该以何种格式来接收服务器反馈的数据
HTTP交互特点
浏览器给服务器发送数据(一次请求)
服务器给浏览器反馈数据(一次响应)
一次请求对应一次响应,多次请求对应多次响应
HTTP工作原理
HTTP协议工作于客户端-服务端架构上。
浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求
Web服务器根据接收到的请求后,向客户端发送响应信息
网络请求与响应服务的过程
HTTP通信机制
HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:
1. 建立TCP连接
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立TCP连接,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作TCP/IP网络。
HTTP是比TCP更高层次的应用层协议,根据规则,低层协议建立之后才能进行更层协议的连接,因此,首先要建立TCP连接
一般TCP连接的端口号是80
2. Web浏览器向Web服务器发送请求命令
一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令
例如:GET/sample/hello.jsp HTTP/1.1
3. Web浏览器发送请求头信息
浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
4. Web服务器应答
客户机向服务器发出请求后,服务器会向客户机回送应答,HTTP/1.1 200 OK
应答的第一部分是协议的版本号和应答状态码
5. Web服务器发送应答头信息
服务器随同应答向用户发送关于它自己的数据及被请求的文档。
6. Web服务器向浏览器发送数据
以Content-Type应答头信息所描述的格式发送用户所请求的实际数据
7. Web服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。
保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
HTTP三个特点
1. HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间
2. HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型(该资源的媒体类型)
3. HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快
HTTP消息结构
一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的
一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据
HTTP使用统一资源标识符(URI)来传输数据和建立连接
客户端请求消息:
客户端发送一个HTTP请求到服务器的请求消息包括以下四个部分:
请求行(request line)
请求头部(header)
空行
请求数据
服务器响应消息:
HTTP响应也由四个部分组成:
状态行
消息报头
空行
响应正文
HTTP的九种请求类型
HTTP1.0 定义了三种请求方法:GET, POST 和 HEAD方法
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法
常用:
1. GET:向特定的资源发出请求。(从服务器中获取一份文档)
2. POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。(向服务器发送需要处理的数据)
3. PUT:向指定资源位置上传其最新内容。(将请求的主题部分存储在服务器中)
4. PATCH:是对 PUT 方法的补充,用来对已知资源进行局部更新。
5. DELETE:请求服务器删除 Request-URI 所标识的资源。(从服务器中删除一份文档)
6. CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
不常用:
1. OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。(决定可以在服务器上执行的方法)
2. HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。(只从服务器获取头文档的首部)
3. TRACE:回显服务器收到的请求,主要用于测试或诊断。(对可能经过代理服务器传送到服务器上的报文进行追踪)
其实在实际应用中常用的是get和post
其他请求方式也都可以通过这两种方式间接的来实现
关于get请求的注意事项:
get请求可被缓存
get请求保留在浏览器历史记录中
get请求可被收藏为书签
get请求不应在处理敏感数据时使用
get请求有长度限制
get请求只应当用于取回数据
关于post请求的注意事项:
post请求不会被缓存
post请求不会保留在浏览器历史记录中
post请求不可被收藏为书签
post请求对数据长度没有要求
比较get请求和post请求:
HTTP状态码
常见的状态码:
200 - 请求成功(一般用于get和post方法)(描述:OK)
301 - 资源(网页等)被永久转移到其它URL,浏览器自动跳转到新的URL(描述:Moved Permanently)
304 - 所请求资源未修改,浏览器读取缓存信息(描述:Not Modified)
400 - 请求语法错误,服务器无法解析(描述:Bad Request)
404 - 请求的资源(网页等)不存在,未找到资源(描述:Not Found)
500 - 内部服务器错误(描述:Internal Server Error)
HTTP状态码分类:
HTTP状态码列表:
关于HTTP的Content-type
Content-Type用于定义网络文件的类型和网页的编码。决定浏览器将以什么形式、什么编码读取这个文件
Content-Type标头告诉客户端实际返回的内容的内容类型
语法格式:
一些媒体格式类型:
HTTP---Cookie
HTTP Cookie(也叫Web cookie或者浏览器Cookie)是服务器发送到用户浏览器并保存在浏览器上的一块数据,它会在浏览器下一次发起请求时被携带并发送到服务器上。
比较经典的,可以用它来确定两次请求是否来自于同一个浏览器,从而能够确认和保持用户的登录状态。
Cookie的使用使得基于无状态的HTTP协议上记录稳定的状态信息成为了可能。
cookie的属性:
1. key-value:cookie通过key-value的方式存储属性名和值。
2. domain:规定了需要发送Cookie的主机名。如果没有指定,默认为当前的文档地址上的主机名(但是不包含子域名)。如果指定了Domain,则一般包含子域名。
3. path:Path指令表明需要发送Cookie的URL路径。字符%x2F (即"/")用做文件夹分隔符,子文件夹也会被匹配到。
4. hostOnly:布尔型的值,true表示cookie只能匹配domain中指定好的请求路径。反之则不。
5. httpOnly:HTTP-only类型的Cookie不能使用Javascript通过Document.cookie属性来访问,从而能够在一定程度上阻止跨域脚本攻击(XSS)。
6. secure:布尔型的值,true表示cookie只在安全的情况下有效。一般是在https情况下。即在使用SLL和HTTPS协议向服务器发起请求时,才能确保Cookie被安全地发送到服务器。
7. expirationDate:指明cookie的过期的时间。
8. Max-Age:指明cookie的有效期。
9. session:布尔值,true表示cookie是session cookie。false的话表示持续的cookie且不过期。
10. storeId:代表存放cookie的id的字符串。
关于HTTPS协议
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
https协议需要到ca申请证书,一般免费证书很少,需要交费。http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议http和https使用的是完全不同的连接方式用的端口也不一样,http是80,https是443。
客户端产生一个对称的密钥,通过server的证书来交换密钥。一般意义上的握手过程,加下来所有的信息往来就都是加密的。第三方即使截获,也没有任何意义,因为他没有密钥
HTTPS协议是在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密,安全性会更高。
关于HTTP2.0
HTTP 2.0是1999年HTTP/1.1发布后的下一代HTTP协议,在开放互联网上HTTP 2.0将只用于https://网址,而http://网址将继续使用HTTP/1
相比 HTTP/1.x,HTTP 2.0有很多新特性:
1. 二进制分帧层:HTTP 2.0增加了一个二进制分帧层,改进了传输性能,实现了低延迟和高吞吐量。
2. 压缩头部:对请求头进行了压缩,相同的请求不会在头部带上未改变的属性。
3. 多路复用:可以连接发起多重的请求,HTTP1中的keep-alive用于长连接而不必重新建立连接,然而keep-alive必须等本次请求彻底完成后才能发送下一个请求,而HTTP2的请求与响应以二进制帧的形式交错进行,大大提高了效率。
4. 请求优先:可以对资源的下载顺序进行排序。
5. 服务端推送:可以将资源主动推送给客户端。
关于TCP/IP协议
TPC/IP协议是传输层协议,主要解决数据如何在网络中传输
TCP/IP 是用于因特网(Internet)的通信协议
在 TCP/IP 中包含一系列用于处理数据通信的协议:
1. TCP (传输控制协议) - 应用程序之间通信
2. UDP (用户数据报协议) - 应用程序之间的简单通信
3. IP (网际协议) - 计算机之间的通信
4. ICMP (因特网消息控制协议) - 针对错误和状态
5. DHCP (动态主机配置协议) - 针对动态寻址
TCP 使用固定的连接:
TCP 用于应用程序之间的通信。
当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求
这个请求必须被送到一个确切的地址。在双方"握手"之后,TCP 将在两个应用程序之间建立一个全双工的通信
这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止
UDP 和 TCP 很相似,但是UDP更简单,同时可靠性低于 TCP
IP 是无连接的:
IP 用于计算机之间的通信
IP 是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路。这样,IP 就降低了对网络线路的需求。每条线可以同时满足许多不同的计算机之间的通信需要
通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送
IP 负责将每个包路由至它的目的地
当一个 IP 包从一台计算机被发送,它会到达一个 IP 路由器
IP 路由器负责将这个包路由至它的目的地,直接地或者通过其他的路由器
在一个相同的通信中,一个包所经由的路径可能会和其他的包不同。而路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址
TCP/IP 意味着 TCP 和 IP 在一起协同工作
TCP 负责应用软件(比如您的浏览器)和网络软件之间的通信
IP 负责计算机之间的通信
TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们
IP 负责将包发送至接受者
TCP/IP寻址
TCP/IP 使用32个比特(4字节)或者4组0到255之间的数字来为计算机编址
IP 地址包含4组数字:
TCP/IP 使用4组数字来为计算机编址。每个计算机必须有一个唯一的 4 组数字的地址
每组数字必须在0到255之间,并由点号隔开,比如:192.168.1.60
IP V6
称作:下一代互联网协议
由IETF小组设计的用来替代现行的IPv4协议的一种新的IP协议
IP地址用一个32位二进制的数表示一个主机号码,但32位地址资源有限,已经不能满足用户的需求了,因此Internet研究组织发布新的主机标识方法,即IPv6
在RFC1884中,规定的标准语法建议把 IPv6 地址的 128 位(16 个字节)写成 8 个 16 位的无符号整数,每个整数用 4 个十六进制位表示,这些数之间用冒号(:)分开
例如:686E:8C64:FFFF:FFFF:0:1180:96A:FFFF
冒号十六进制记法允许零压缩,即一串连续的0可以用一对冒号取代
为了保证零压缩有一个清晰的解释,建议中规定,在任一地址中,只能使用一次零压缩
TCP/IP包括的协议
TCP/IP是基于TCP和IP这两个最初的协议之上的不同的通信协议的大集合
包括以下协议:
TCP/IP---邮件
电子邮件程序使用不同的TCP/IP协议:
使用SMTP来发送邮件
使用POP从邮件服务器下载邮件
使用IMAP连接到邮件服务器