Centos7学习笔记(十七)- HTTP协议
一、什么是HTTP?
首先要提超文本HyperText——含有超链接和各种多媒体元素标记的文本。这些超文本文件彼此链接,形成网状,又被称为网页web page。这些链接用URL表示。最常见的超文本格式是超文本标记语言HTML。
URL——统一资源定位符Uniform resource locator,用于唯一标识万维网中的某一个文档。URL由“协议”、“主机和端口”、“文件路径和文件名”组成。(其实还可能包括:参数(可能是用&&符号分隔)、查询(可能用?去分隔定义、片段(用#去分隔,代表锚点))
URL中的协议,常见的是http和https。也有一些其他的,比如mailto——邮件地址;urn——统一资源名称;ftp——文件传输协议;file——指定主机上的文件名称;tel——电话;ws/wss——(加密的)Websocket链接等等。
那么HTTP,就是一种按照URL的指示,将超文本文档从一台主机(web server)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
一个完整的HTTP请求响应,,一般分为8步骤来完成:
1、浏览器分析超链接中的URL——提取识别URL中的域名字段
2、浏览器将域名字段发送给本地的dns客户端,dns客户端向DNS服务器发送包含着域名字段的查询报文。
3、DNS服务器通过一系列的操作(有可能是查询自己的缓存就得到A记录、也有可能去做转发解析等等)将包含对应域名的A记录地址,形成一个响应报文,最终回复至浏览器
4、浏览器(主机)与web服务器建立TCP链接(包括SYN、SYN ACK、ACK三次握手)
5、浏览器请求文档:包括GET、POST、HEAD、PUT、DELETE、CONNECT、PATCH、TRACE等,主要是前2者。
6、服务器给出响应,将请求的文档发送给浏览器
7、释放TCP链接
8、浏览器显示请求文档
二、HTTP响应的状态码
200 成功响应
301 永久重定向——浏览器识别301后,就重新记住并查找新地址(IP、文档路径等)去访问,不再理会重定向前的域名
302 临时重定向——浏览器在每次请求访问时,都重定向到新地址
307 内部重定向
304 走本地缓存的响应结果
400 客户端错误,碰到几率小
401 认证错误(用户名密码认证错误时)
403 找不到主页,权限不足(主要是权限不足,比如index页被修改,那么访问时,因找不到index页会403错误)
404 not found 网页找不到(页面不存在)
500 内部错误(比如mysql连接不上)
502 找不到后端主机
503 服务器过载(或处于临时维护状态中)
504 连接超时
http请求

http响应

HTTP协议版本响应区别

http 1.0 http 1.1 http 2.0
三、HTTP头
头(header) 类型 说明
User-Agent 请求 关于浏览器和它的平台的信息,如Mozilla 5.0
Accept 请求 客户能处理的页面的类型,比如text/html
Accept-Charset 请求 客户能接受的字符集,比如Unicode-1-1
Accept-Encoding 请求 客户能处理的页面编码方法,比如gzip
Accept-Language 请求 客户能处理的自然语言,比如en,zh-cn
Host 请求 服务器的DNS名称。从URL中提取处理,必需。
Referer 请求 用户从该URL代表的页面出发访问当前请求的页面
Cookie 请求 将以前设置的Cookie送回给服务器,可用来作为会话信息
Date 双向 消息被发送的日期和时间
Server 响应 关于服务器的信息,比如:Microsoft-IIS/6.0,
Content-Encoding 响应 内容是如何被编码的,如gzip
Content-Language 响应 页面所使用的自然语言
Content-Length 响应 以字节计算的页面长度
Content-Type 响应 页面的MIME类型
Last-Modified 响应 页面最后被修改的时间和日期,在页面缓存机制中意义重大
Location 响应 指示客户将请求发送到别处,即重定向到另一个URL
Set-Cookie 响应 服务器希望客户保存一个Cookie
Referer,它告诉当前请求,其上一个请求的URL地址。
Set-Cookie ,由于http协议是无状态的,所有设置Cookie来做数据存储,它记录了登录信息,游戏积分等信息,用于识别身份,进行验证等。
四、DNS解析过程
DNS 查询的过程如下图所示。

1、在浏览器中输入www . qq .com 域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(http://qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找http://qq.com域服务器,重复上面的动作,进行查询,直至找到www . qq .com主机。
6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。


