URL
简单定义
通过一个链接,使我们可以找到网络上的某个资源,这个链接就是URL。
格式
URL并不是随便写的,而是有固定的格式。基本的组成格式如下。
schme://[username:password] hostname:port;paramaters[#fragment]
中括号包含的内容并不是必须的。
scheme:协议,常用的协议有http,https,ftp等。
username:password:特定场合下需要用到用户名和密码。
hostname:主机地址,可以是域名或者IP地址。
port:端口。指服务器设定的端口,http默认的端口是80,https的端口是440.
path:网络资源在服务器中的特定地址。
paramters:参数,用来指定某个访问资源时的附加信息。但现在用的不多,基本上会和query混用。
query:参数,用来查询某个资源,当查询多个资源时,可以用&连接。
fragment:有两个作用,一个作用是作单页面路由,另一个作用是做html锚点。可以控制一个页面打开时,自动滚到某个特定的位置。
HTTP和HTTPS
http超文本传输协议,作用是把超文本数据从网络传输到本地浏览器。而https则是http的安全版,在http层加入ssl,简称https。https的基础就是SSL,他的作用主要有以下两种:
1.建立一个信息安全通道,保证数据传输的安全性。
2.确认网站的真实性,凡是使用了https协议的网站,可以用单机鼠标烂地址的锁头标志来查看网站之后的真实信息。
HTTP的请求过程。
就像我们平常直接在浏览器地址栏输入一个URL,则我们可以看到对应页面的内容。实际的过程就是浏览器向网站所在的服务器发送一个请求,网站服务器接收到请求后对其进行处理和解析,然后返回对应的响应,接着传回浏览器,浏览器再对其进行解析。
请求
请求由客户端发向服务器,分为四部分内容,请求方法,请求网址,请求头,请求体。
请求方法:常用的get,post,delete,put。
简单介绍以下get和post。
GET:get的请求参数包含在URL里面,数据可以在URL中看到,而post请求的url不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中。
GET请求的数据最多只有1024字节,POST方法没有限制。
请求网址:确定客户端想请求的资源。
请求头:说明服务器要使用的附加信息,常用的比如Cookie,Referer,User-Agent等。下面举一些简单的请求头信息。
Accept:指定客户端可以接受的哪些类型的信息。
Accept-Language:用于指定客户端接受的语言类型。
Accept-Encoding:用于客户端可接受的内容编码。
COOKIE:为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前对话,例如当我们登入进一个网站之后,即使我们刷新之后,还是会保留原来自己的登录状态。
Refer:用来标识是从哪个页面发过来的。
User-Agent:简称UA 这是一个特殊的字符串头,可以使服务器识别客户端使用的操作系统。版本,浏览器的相关信息。做爬虫时需要加入信息来伪装成浏览器,要不容易被识别出来。
Content-Type:也叫互联网媒体类型,或者MIME类型,在HTTP协议消息头中用来表示具体请求的媒体类型信息,例如text/html代表的是HTML格式。image/gif代表的是GIF图片,application/json代表JSON类型。
请求体:一般就是post请求中的表单数据。
响应
响应,即Response,有服务器返回给客户端,分为三个部分,响应状态码,响应头和响应体。
响应状态码,常用的有200代表服务器正常响应,404代表服务器未找到,500代表服务器内部错误。
响应头,包含了服务器对请求的应答信息,如Conten-type等。DATE:用于标识响应产生的时间,Content-Encoding:用于指定响应内容的编码。Sever:包含服务器的信息。Content-type:文档类型,指定返回的数据是什么类型。
Exipres:用于指定的响应的过期时间。
响应体
响应体的正文数据都存储在于响应体中。
HTTP2.0
HTTP2.0对HTTP进行了一些优化。二进制分帧层,将文本格式的数据修改为二进制格式。使得解析起来更加高效、同时将请求和响应数据分为更小的帧,并采用二进制编码。引入了几个新的概念。如帧:是数据通信的最小单位。比如一个请求被分为了请求头帧和请求体数据帧。数据流:一个虚拟通道,可以承载双向的消息,每一个流都有一个唯一的整数ID来标识。
消息:与逻辑请求或响应消息对应的完整的一系列帧。
多路复用:在之前的版本中,如果客户端想发起多个并行的请求用来提升性能,则必须使用多个TCP来连接,而且浏览器为了控制资源,还会对单个域名有6-8个请求的限制,但是在HTTP2.0中,由于有了进制分帧的加持,HTTP2.0不再用TCP连接的方式来实现多路并行,客户端和服务器将HTTP消息分解为互不依赖的帧,然后交错发送,最后再另一端组装起来,达到了并行交错的发多个请求,请求之间互不影响。提高现有网络容量的利用率,从而减少页面加载时间。
流控制:流控制是用来阻止发送方向接受方发送大量数据的机制,以免超出后者的需求能力。
服务端推送:服务器可以对一个客户端发送多个响应。除了最除的响应外,服务器可以向客户端推送额外的资源,而无需向客户端明确的请求。服务端可以主动推送,则客户端也有权选择拒绝,如果推送的资源已经被浏览器进行缓存,浏览器可以通过RST_STREAM帧来选择拒收。
另外主动推送也遵守同源策略,即服务器不能随便将第三方资源推给客户端,而必须是经过服务器和客户端双方确认才行,这样能保证一定的安全性。
总结
对HTTP的基本知识进行复习和梳理。