一、Http协议
HTTP(hypertext transport protocol)超文本传输协议
该协议一共有0.9,1.0,1.1,2.0版本,其中1.1版本使用最广泛
客户端与服务端进行交互的信息为报文。客户端为请求报文,服务端为响应报文
1.1请求报文
请求报文最主要的是报文首部, 报文主体一个个键值对即key:value
可以看到上图中第一行为报文首部,方法+URI+http版本,后面的全是键值对
其中常见的请求报文方法有三种
Get
:从服务器中取资源。可以请求图片,视频等
HEAD
:和Get类似,但是从服务器请求的资源不会返回请求的实体数据,只会返回响应头
POST/PUT
:对应于GET,向服务器发送数据
1.2响应报文
响应报文的格式与请求报文大体相同,不同的是报文首部
可以看到首部是版本号+状态码
1.2.1 状态码
状态码分为5类,1xx~5xx,
1××:处于中间状态,还需后续操作,这个状态码不怎么看到
2××:成功收到报文并正确处理
“200 OK”
最常见的成功状态码,表示一切正常,客户端获得期许的处理结果。如果不是Head请求,那么在响应头中通常会有body数据。
“204 No Content”
不同之处在于它的响应头中没有body数据。
“206 Partial Content”
表示服务器传输的是一部分数据,因为数据太大
3××:重定向到其他资源位置
“301 Moved Permanently”
“永久重定向”,意思是本地请求的资源以及不存在,使用新的URI再次访问。
“302 Found”
“临时重定向”,临时则所请求的资源暂时还在,但是目前需要用另一个URI访问。
301 和 302 通过在字段Location中表明需要跳转的URI。两者最大的不同在临时与永久。例如改变了资源路径使用301永久重定向,而如果只是晚上临时移动数据,则使用302临时重定向
“304 Not Modified”
重定向已到缓存的文件
4××:请求报文有误,服务器无法处理
这个我们经常看到
“400 Bad Request”
通用错误码,表示请求报文有错误,属于比较笼统的错误码,不知道错在哪里
“403 Forbidden”
表示服务器禁止访问资源。原因可能涉及到敏感词汇、法律禁止等
“404 Not Found”
想要的资源在本地未找到从而无法提供给服务端
“405 Method Not Allowed”
服务器对某些方法进行限制
“406 Not Acceptable”
客户端资源无法满足客户端请求的条件,如语言
“408 Request Timeout”
请求超时,服务器等待了过长的时间;
“409 Conflict”:
多个请求发生了冲突,可以理解为多线程并发时的竞态;
413 Request Entity Too Large:
请求报文里的 body 过大;
414 Request-URI Too Long:请求行里的 URI 太大;
429 Too Many Requests:客户端发送了太多的请求,
通常是由于服务器的限连策略;
431 Request Header Fields Too Large:请求头某个字
段或总体太大;
5××:服务器错误,服务器对请求出的时候发生内部错误
“500 Internal Server Error”
和400 类似,属于一个通用的错误码
“502 Bad Gateway”
通常是服务器作为网关或者代理时返回的错误码,表示服务器自身工作正常,访问后端服务器时发生了错误,但具体的错误原因也是不知道的。
“503 Service Unavailable”
表示服务器当前很忙,暂时无法响应服务
1.3 cookie缓存机制
为了提升用户访问服务器的体验或者使http无状态的服务器有记忆功能,出现了cookie如下图所示
服务器会给每位用户产生一个cookie码,在用户第一次访问服务器后,cookie码已经产生,当用户在同一台电脑上再次访问时会在请求报文的body中加入cookie键值对,用户不需要再次输入登录信息即可得到信息
1.4 HTTPS
通常在支付或者重视安全的情况下需要使用HTTPS协议,因为HTTP是明文,但是HTTPS相比HTTP中间涉及很多复杂加密过程,因此运行时间很长,所以只在需要的地方使用,其实二者不同就是HTTPS=HTTP+TLS/SSL
二、DNS域名解析协议
2.1 DNS用途与工作原理
DNS(domain Name System)域名解析协议,DNS的作用是将主机名转换为IP地址,如www.someschool.edu,为了能够与该主机进行TCP连接,必须知道该主机的IP地址,DNS就是告诉浏览器服务器的IP。
DNS协议运行在UDP之上,使用53号端口。
那么,某个用户主机上的一个浏览器请求URL www.someschool.edu/index.html会发生什么,首先需要将HTTP请求报文发送给WEB服务器www.someschool.edu,但是需要IP:
(1)主机上运行着DNS客户端
(2)浏览器抽取出主机名www.someschool.edu,将主机名传给DNS客户端
(3)DNS客户收到回答报文,报文中含有主机名的IP地址
(4)浏览器得到IP,向该IP80端口HTTP服务器发起TCP连接
2.2 DNS服务器
为了单点故障,方便维护,DNS服务器使用分布式、层次式数据库,主要分为根服务器、顶级域服务器和权威服务器