当前位置:首页 > 技术文章 > 正文内容

Centos7学习笔记(十七)- HTTP协议

ivker_lee4年前 (2021-10-06)技术文章299

一、什么是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请求

image.png

http响应

image.png

HTTP协议版本响应区别

Compares the performance of the three HTTP/1.x connection models: short-lived connections, persistent connections, and HTTP pipelining.

              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解析过程

一个知乎的回答:https://www.zhihu.com/question/23042131/answer/66571369


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服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www  . qq  .com主机。

6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。


分享给朋友:

相关文章

Centos7学习笔记(五)-tmpfs和xfs

Centos7学习笔记(五)-tmpfs和xfs

介绍/dev/shm/是一个使用就是tmpfs文件系统的设备,其实就是一个特殊的文件系统。redhat中默认大小为物理内存的一半,使用时不用mkfs格式化。tmpfs是Linux/Unix系统上的一种基于内存的虚拟文件系统。tmpfs可以使用您的内存或swap分区来存储文件(即它的存储空间在virtual memory 中, VM由real memory和swap组成)。由此可见,tmpfs主要存储暂存的文件。它有如下2个优势 : 1. 动态文件系统的大小。2. tmpfs 使用VM建的文件系统...

Linux学习——Shell

Linux学习——Shell

1、bash解释器csh\ksh\bash都是shell的解释器。2、关于bash的启动和配置环境按上图的理解,正常我们需要把脚本放在开机启动,需要写入的是/etc/bashrc文件或者~/.bashrc文件。另外,关于su  username和su - username的区别(bash的交互式非登录和交互式登录式)。可以参考下图...

Centos7学习笔记(二十三)- nginx的keepalived高可用

Centos7学习笔记(二十三)- nginx的keepalived高可用

一、什么是keepalivedkeepalived最初是为LVS设计的,用于管理并监控LVS集群中各个服务节点的状态,后来又加入了可用实现高可用的VRRP协议支持。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。这里的VRRP协议,就是纯粹的网络中使用的VRRP协议。二、keepalived工作原理这里说“keepalived工作原...

 Centos7学习笔记(十五)- ansible初步

Centos7学习笔记(十五)- ansible初步

1、安装要求管理主机:必须不能是windows系统。类Uinx系统下,python版本为2.6或者2.7。OS X系统,需修改ulimit值才能使用ansible的多子进程。托管节点:Python版本不得低于2.4,如果Python版本低于2.4,那么需要安装python-simplejson模块。2、ansible安装redhat系需要安装epel源,fedora不用,可以直接安装yum -y install ansible(yum -y install libselinux-python,系...

Docker基础

Docker基础

零、Docker软件1、docker本质上是C/S架构的,其软件版本分docker-ce(社区版)、docker-ee(企业版)2、docker镜像是分层构建,docker registry中,含有若干个repository(镜像的仓库),每个repository含有若干镜像,每个镜像用tag(标签)区分,意味着每个tag代表一个镜像。不指定tag的话,默认tag是latest3、docker的主配置文件是/etc/docker/deamon.json。配置docker镜像加速下载,示例文件:{...

Centos7学习笔记(十)- rsync服务器搭建

Centos7学习笔记(十)- rsync服务器搭建

1、服务器端yum -y install rsyncsudo vim /etc/rsyncd.conf##全局配置参数## uid = rsync gid = rsync fake super = yes use chroot = no max connections = 200 timeout = 600 #motd fi...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。