HTTP的基础知识和DNS的解析过程

简介: 我们都知道现在大部分的B/S 系统。其核心的通讯协议还是 TCP/IP 协议,应用层的话就是HTTP 协议,我们最常的打交到的就是HTTP协议了。所以了解HTTP协议的相关知识显得尤为重要。

概述

我们都知道现在大部分的B/S 系统。其核心的通讯协议还是 TCP/IP 协议,应用层的话就是HTTP 协议,我们最常的打交到的就是HTTP协议了。所以了解HTTP协议的相关知识显得尤为重要。

HTTP请求报文

一个HTTP请求报文由请求行(request line)+ 请求头部(head)+请求体 3个部分组成。格式如下:

<request-line>
<headers>
<request-body>

其中请求头部由 关键字/值对组成,每行一对,关键字和值用英文冒号“:” 分隔。

常用的请求头有:

1User-Agent :产生请求的浏览器类型 例如:User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

2.Accept:客户端可识别的内容类型列表。例如:Accept: application/json, text/javascript, /; q=0.01

3.Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。例如:www.baidu.com

4.Cookie: 客户端的Cookie就是通过这个报文头属性传给服务端,通过sessionId 可以知道同一个会话

Cache-Control :对缓存进行控制 例如: Cache-Control :no-cache

5.Referer : 用来表示从哪儿链接到目前的网页,采用的格式是URL。换句话说,借着HTTP来源地址,目前的网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。

HTTP 响应报文

与请求报文类似,HTTP 响应报文也由三个部分组成,分别是:状态行、消息报头、响应正文。格式如下:

<status-line>
<headers>
<response-body>

HTTP 响应头

响应头部也是由 关键字/值对组成,每行一对,关键字和值用英文冒号“:” 分隔。常用的响应头有:

1.Server : 使用服务器名称,如Server:Apache/1.3.6(Unix)

2,Content-Type: 用于指明发送给接收者的实体正文的媒体类型,如Context-Type: application/json;charset=UTF-8

3.Content-Encoding: 与请求报文Accept-Encoding对应,告诉浏览器服务端采用的什么压缩编码

4.Content-Language : 描述了资源所用的自然语言,与Apache-Language 对应

5.Content-Length: 指明实体正文的长度,用以字节方式存储的十进制数字来表示

6.Keep-Alive : 保持连接的时间:如 Keep-Alive: timeout=5,max=20

说完了,响应头,我们还需要重点关注下常见的状态码。HTTP状态码有很多,我们经常会碰到的状态码有如下几个:


HTTP状态码

1.200 表示客户端请求成功

2.302 表示临时跳转,跳转的地址通过Location指定

3.400 表示客户端请求有语法错误,不能被服务器识别

4.403 表示服务器收到请求,但是拒绝提供服务

5.404 表示请求的资源不存在

6.500 表示服务器发生不可预期的错误

说完了HTTP请求报文和响应报文的相关知识,接下来我们来看看,HTTP的请求方法


HTTP的请求方法

HTTP 1.1 中请求方法有GET,POST,PUT,DELETE,HEAD。其中最常用到的就是GET方法和POST 方法了。


GET请求

1.GET请求,请求数据会直接附在URL之后(就是把数据防止在HTTP协议头

<request-line>中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表ASCII。


虽然HHTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度

进行限制,而在实际开发中存在的限制主要有:

GET:特定浏览器和服务器对URL长度有限制,例如:IE对URL长度的限制是2083字节(2K+53)(对应231个中文字符),chrome 的长度限制超过8182个字符(对应909个中文字符)返回414的错误。

2. GET 请求,请求数据直接以明文出现在URL中,对于一下私密数据(账号和密码),非常不安全。


POST 请求

1.POST 请求是把提交的数据放置在HTTP请求报文的请求体<request-body>中,理论上传输数据不受限。POST请求,地址栏不会改变。

2. POST 请求,请求数据是放在<request-body>中,相对GET请求安全一些。


DNS 解析过程

DNS的作用

DNS就是将域名解析成IP地址


DNS解析过程

24dddc1e259e08a0725be5a4fc524865_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

如上图所示:DNS的解析过程主要有十步:

1.浏览器检查缓存中有没有这个域名对应的解析过的IP地址,如果有的话解析过程就结束,缓存时间由TTL属性来设置

2.如果用户浏览器缓存没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果,其实操作系统中也会有一个域名解析的过程。在Windows中可以通过 C:\Windows\System32\drivers\etc\hosts文件来设置。在Linux中这个配置文件是/etc/hosts

3.在用户电脑中的网络配置中都会有“DNS服务器地址”用于配置域名服务器。称为LDNS

在Windows 中通过 ipconfig 查询这个地址,在Linux中通过 cat /etc/resolve.conf 查看

4.如果LDNS 仍然没有命中,就直接到Root Server域名服务器请求解析。

5.根域名服务器返回给本地域名服务器一个所查询域的主域名服务器(gTLD Server)地址,

gTLD是国际顶级域名服务器,如:.com、.cn、.org等

6.本地域名服务器(Local DNS Server)再向上一步gTLD服务器发送请求

7.接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器地址。这个

Name Server通常就是你注册的域名服务器。

8.Name Server域名服务器会查询存储的域名和IP的映射关系表。在正常情况下都根据域名得到目标IP记录,连同一个TTL值返回给DNS Server 域名服务器

9.返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,缓存的时间由TTL值控制

10.把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。

总结

本文简单的介绍了HTTP的相关基础知识,包括请求报文,响应报文,以及其请求头和响应头常用的属性。然后,重点介绍了GET请求和POST请求。最后介绍了DNS的解析过程。

相关文章
|
29天前
|
网络协议 应用服务中间件 nginx
【CKA模拟题】如何用Nslookup轻松检查集群服务名的DNS解析?
【CKA模拟题】如何用Nslookup轻松检查集群服务名的DNS解析?
110 2
|
2月前
|
网络协议
阿里云DNS常见问题之DNS导入解析报错如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
2月前
|
域名解析 网络协议
阿里云DNS常见问题之公共dns的doh解析有倍率如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
2月前
|
网络协议
阿里云DNS常见问题之opendn.com.cn域名云解析阿里云DNS付费后还是免费版如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
2月前
|
域名解析 缓存 网络协议
阿里云DNS常见问题之阿里的域名解析不对如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
1天前
|
网络协议 Windows
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
|
2天前
|
前端开发 API UED
AngularJS的$http服务:深入解析与进行HTTP请求的技术实践
【4月更文挑战第28天】AngularJS的$http服务是核心组件,用于发起HTTP请求与服务器通信。$http服务简化了通信过程,通过深入理解和实践,能构建高效、可靠的前端应用。
|
5天前
|
分布式计算 网络协议 Hadoop
Hadoop节点扩展配置DNS和主机名解析
【4月更文挑战第19天】
12 1
|
29天前
|
Kubernetes 网络协议 应用服务中间件
K8s中Pod4中DNS解析策略
K8s中Pod4中DNS解析策略
28 1
|
2月前
|
域名解析 弹性计算 网络协议
阿里云DNS常见问题之确认域名是否在Private zone解析失败如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:

相关产品

  • 云解析DNS
  • 推荐镜像

    更多