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

概述

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

HTTP请求报文

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

<request-line>

<headers>

<request-body>

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

  1. User-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 可以知道同一个会话
  5. Cache-Control :对缓存进行控制 例如: Cache-Control :no-cache
  6. 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解析过程

在这里插入图片描述
如上图所示: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的解析过程。

发布了131 篇原创文章 · 获赞 22 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/u014534808/article/details/91358524