HTTP基础知识概括(1)

HTTP基础知识概括(1)

每日寄语:等风来不如追风去
此文章侧重点是将零碎的知识点进行概括总结;文章大体讲如下知识点:
  • HTTP的一次请求过程所通过的流程
  • URL、URI、URN的概念及区别
  • 字符乱码的本质
  • DNS的域名解析过程
  • 请求报文和响应报文的结构:头、首部字段、主体
  • 常见的状态码及首部字段

一、HTTP一次请求流程

20190706170610596.png
   如上图可知:HTTP的一次请求过程大体通过如下步骤:html

  • 一、域名解析:当用户在浏览器上输入网址按上回车键后会进行域名解析来得到所需的服务器的IP地址;
  • 二、TCP三次握手创建TCP链接:浏览器会根据IP地址和端口号向目标服务器发起TCP链接;
  • 三、链接创建发送请求:链接创建起来后浏览器向服务器发送请求;
  • 四、服务器接收请求并处理:(这里的处理逻辑有多是应用服务器在处理,应用服务器接收请求并处理的过程省略)
  • 五、服务器向客户端发送响应请求
  • 六、浏览器接收响应报文并根据要求进行渲染页面。
  • 七、TCP四次挥手关闭链接。
有两点问题须要咱们着重关注(面试会问的哦):DNS解析的过程以及TCP的三次握手和四次挥手;若是想深刻了解能够参考网上的技术博客。
二、DNS的域名解析过程

DNS域名解析过程
    DNS域名解析大体通过的过程以下:web

  • 一、域名解析首先会在本身本机下的host文件下找
  • 二、若是没有找到会到本地域名解析服务器(Local DNS Server)下找,找到就返回
  • 三、若是在Local DNS Server下没有找到,会跳到根域名服务器解析请求, 根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址
  • 四、LDNS会向gTLD域名服务器发起请求
  • 五、接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器
  • 六、Name Server根据映射关系表找到目标ip,返回给LDNS
  • 七、LDNS缓存这个域名和对应的ip
  • 八、LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束

三、URL、URI、URN的概念及区别
名    称 描 述
URI (Uniform Resource Identifier,URI) 统一资源标志符;惟一标志并定位信息资源。
URL (Uniform Resource Location,URL)统一资源定位符;明确说明如何从一个精准、固定的位置获取资源。下面会详细介绍URL的标准格式。
URN (Uniform Resource Name,URN) 统一资源名;URN是做为特定内容的惟一名称使用的,与目前的资源所在定无关。
URL的标准格式
URL的通用格式
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
其中URL最重要的3个部分是方案<scheme>、主机<host>、路径<path>

   其中咱们应注意带有片断的URL的请求:好比:http://www.joes-hardware.com/...; 在这个例子中,片断drills引用了Joe的五金商店的web服务器上页面/tools.html中的一个部分,这个部分的名字叫作dirlls。那这个请求是如何进行的呢?因为HTTP服务器一般只处理整个对象,而不是对象的片断,因此浏览器向服务器发送请求的时会剔除片断向浏览器请求整个资源,浏览器接受资源后会根据片断展现所应该展现的内容。面试


四、字符乱码的本质
首先,咱们的明白什么是字符集以及一个字符集来讲要正确编码转码一个字符须要三个关键元素

        字符集:字符集就规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值表明了哪一个文字(解码)的转换关系。
        一个字符集来讲要正确编码转码一个字符须要三个关键元素:数据库

  • 字符库:是一个至关于全部可读或者可显示字符的数据库,字库表决定了整个字符集可以展示表示的全部字符的范围;
  • 编码字符集:即用一个编码值code point来表示一个字符在字库中的位置;
  • 字符编码:将编码字符集和实际存储数值之间的转换关系。

三者之间的关系以下图: 浏览器

image

举例:

假如采用ASCII字符集,字符A在字符表中位置为65,65经规则转化为1000001(1000001就存储在编码字符集中),而65和1000001的对应关系就存在了字符编码中,而字符乱码是由于采用不一样的编码其映射关系不一样解析的数据也就不一样了。缓存

问题扩展 (摘录)

   看到这里,可能不少读者都会有和我当初同样的疑问:字库表和编码字符集看来是必不可少的,那既然字库表中的每个字符都有一个本身的序号,直接把序号做为存储内容就行了。为何还要画蛇添足经过字符编码把序号转换成另一种存储格式呢? 服务器

   其实缘由也比较容易理解:统一字库表的目的是为了可以涵盖世界上全部的字符,但实际使用过程当中会发现真正用的上的字符相对整个字库表来讲比例很是低。例如中文地区的程序几乎不会须要日语字符,而一些英语国家甚至简单的ASCII字库表就能知足基本需求。而若是把每一个字符都用字库表中的序号来存储的话,每一个字符就须要3个字节(这里以Unicode字库为例),这样对于本来用仅占一个字符的ASCII编码的英语地区国家显然是一个额外成本(存储体积是原来的三倍)。算的直接一些,一样一块硬盘,用ASCII能够存1500篇文章,而用3字节Unicode序号存储只能存500篇。因而就出现了UTF-8这样的变长编码。在UTF-8编码中本来只须要一个字节的ASCII字符,仍然只占一个字节。而像中文及日语这样的复杂字符就须要2个到3个字节来存储。网站

五、参考文献
未完待续。。。。;若是阅读过程当中发现文中的知识点有错误的话,能够反馈给我,咱们共同来完善。
相关文章
相关标签/搜索