Http基础知识学习(一)

学习资料:

正在学习了解OkHttp的知识,遇到了关于http的知识点时,都不知所云。百度到的东西,看得云里雾里的,感觉还是自己找本书看看,效果比较好。正好同学有本图解Http,讲的挺基础,能看懂,就拿来看看,系统性得了解了解基础知识,写写博客,记录一下书上的知识点

电子版,上传到了CSDN,盗版资源,罪过罪过 :)

博客就是摘抄书上的知识点

1. 了解Web及网络基础

Web browser通过指定的URl,从Web服务器端获取文件资源等信息,然后显示出Web页面。Web使用的便是HTTP(HyperText Transfer Protocol)超文本传输协议作为规范

1.1 网络基础 TCP/IP

通常使用的网络,包括互联网,是在TCP/IP协议族的基础上运作,HTTP属于它内部的一个子集

计算机与网络设备要相互通信,双方就必须基于相同的方法。例如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定

不同的硬件、操作系统之间的通信,所有的一切都需要一种规则,这种规则被称为 协议protocolTCP/IP是互联网相关协议的各类协议族的总称

TCP/IP 协议族

作用:

  • IP协议:指定数据发送目的地的IP地址以及通过路由器转发数据
  • TCP协议:通过数据发送者和接收者相互回应对方发来的确认信号,可靠地传输数据

协议中存在各式各样的内容。电缆的规格到IP地址的选定方法,寻找异地用户的方法、双方建立通信的顺序,以及Web页面显示需要的步骤,等等之类的

协议,个人理解,就是网络间通信的江湖规矩,行走江湖,出来混,就得遵守江湖规矩


1.1.1 TCP/IP 分层

TCP/IP分4层:应用层,传输层,网络层,数据链路层

分层的好处:

  1. 修改协议时,只需把需要变动的层替换就可以,改动比较自由。如整个协议不分层,只有一个整体,即使有一个改变地方需要改变设计,就得把所有不分整体替换
  2. 层次化之后,设计也变得相对简单。处于应用层上的应用考虑分派给自己的任务,而不必清楚对方在哪个地方,对方的传输路线是怎样的、是否能确保传输送达

  • 应用层:决定向用户提供应用服务时通信的活动

    TCP/IP协议族内预存了各类通用的应用服务。例如,FTP(File Transfer Protocl),文件传输协议;DNS(Domain Name System)域名系统。 HTTP协议也在应用层

  • 传输层:为上一层的应用层,提供处于网络连接中的两台计算机之间的数据传输

    在传输层,有两个性质不同的协议:TCP(Transmission Control Protocol)传输控制协议协议,UDP(User Data Protocl)用户数据报协议

  • 网络层:处理在网络上流动的数据包

    数据包是网络传输的最小的数据单位

    该层规定了通过怎样的路径到达对方计算机,并把数据包传送给对方。与对方计算机之间的通过多台计算机或网络设备进行传输时,网络层所起的作用的就是在众多的选项内选择一条传输路线

  • 链路层:处理连接网络的硬件部分

    包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card)网卡,光纤等物理硬件部分。硬件上的范畴均在链路层的作用范围之内


1.1.2 TCP/IP通信传输流

TCP/IP通信传输流

利用TCP/IP协议族进行网络通信时,通过分层的顺序与对方进行通信,发送端从应用层往下走,接受端则向应用层,向上层走


HTTP举例说明:

HTTP 通信举例
  1. 作为发送端的客户端在应用层,遵循HTTP协议,发出一个显示某个Web页面的HTTP请求
  2. 为了传输方便,在传输层TCP协议下,把从应用层处,收到的数据,也就是HTTP请求报文,进行分割,并在各个报文打上标记序号以及端口号后,转发给网络层
  3. 在网络层,IP协议,增加作为通信目的地的MAC地址后,转发给链路层。到了此时,发往通信的请求就准备齐全
  4. 接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层

当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求

发送端在层与层之间传输数据时,每经过一层,必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层会把对应的首部消去

过程之中,把数据信息包装起来的做法称为封装


1.2 与HTTP关系密切的协议:IP、TCP和DNS

1.2.1 负责传输的IP协议

按层次分,IP(Internet Protocol)网际协议位于网络层。 几乎所有使用网络的系统都会用到IP协议

IP协议的作用是把各种数据包传给对方。而要保证确实传到对方那里,有两个重要的条件IP 地址MAC 地址(Media Access Control Address)

  • IP地址指明路节点被分配到的地址
  • MAC地址是指网卡所属的固定地址

IP地址可以和MAC地址进行配对,但 IP地址可变换,MAC地址基本上是固定的,唯一的,不会改变


  • 使用ARP协议凭借MAC地址进行通信

IP间的通信依赖MAC地址

一般,通信的双方都不在在同一局域网LAN内,通常是经过多台计算机和网络设备中转才能连接到对方。在进行中转时,会利用下一站中转设备的MAC地址搜索下一个中转目标

搜索中转目标需要ARP(Address Resolution Rrotocol)协议,ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址

IP ARP MAC 工作流程

无论哪台计算机、哪台网络设备,在通信过程中,它们都无法全面掌握互联网中的细节

在到达通信目标前的中转过程中,涉及通信的计算机和路由器等网络设备只能获悉很粗略的传输路线,这种机制成为路由选择(routing)

类似送快递的整个过程,寄快递的人只需要将自己的包裹交给承运人,就可以查询到自己的包裹的状态,位置信息。而接管包裹的快递公司的集散中心检查包裹的送达地址,明确下一个送往集散中心,这个目标集散中心再进行判断包裹是否达到

整个过程,每个集散中心并不清楚知道包裹在上个环节或下个环节的具体细节


1.2.2 确保可靠的TCP协议

TCP位于传输层,提供可靠的字节流服务

  • 字节流服务:将大块数据分割成以报文段(Byte Stream Service)为单位的数据包进行管理

可靠,指的就是将数据准确可靠地传给对方

概括:TCP协议为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否送达对方


  • 三次握手

TCP协议将数据包送出去之后,TCP一定会向对方确认是否成功送达

握手过程中使用了TCP的标志flag——SYN(synchronzie)ACK(acknowledgement)

3次握手

发送端首先发送一个带SYN标志的数据包给对方。接收端收到以后,回传一个带有ACK标志的数据包,代表握手结束

握手过程中,某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包

然而3次握手也并不一定能确保数据100%准确送到


1.2.3 负责域名解析的DNS服务

DNS(Domain Name System)服务和HTTP协议一样位于应用层的协议, 提供域名到IP地址之间的解析服务

计算机既可以被赋予IP地址,也可以被赋予主机名域名,例如www.baidu.com

域名相比较起IP地址,更利于网站的推广

但对于计算机而言,理解域名比IP地址要困难的多,计算机更擅长处理一长串数字

DNS协议

DNS协议作用:通过域名来查找IP地址,或逆向从IP地址反查域名的服务


1.3 各种协议与HTTP协议的关系

各种协议与HTTP协议的关系

1.4 URI 和 URL

作用:

  • URI:用字符串表示某一个互联网资源
  • URL:统一资源定位符,访问Web页面时,需要的网页地址。表示资源所在地点,所处的位置

URLURI的子集


1.4.1 URI统一资源标识符

URIUniform Resource Identifier

  • Uniform:

    规定统一的格式可以方便处理多种不同类型的资源,不用再根据上下文环境来识别资源指定的访问方式。加入新的协议方案也更容易,例如http:ftp:

  • Resource:

    资源,指的是可标示的任何东西。除了文档文件,图像,或服务(如天气预报)等能够区别于其他类型的,全都可以作为资源。资源不仅可以是单一的,也可以是多数的集合体

  • Identifier:

    可标示的对象。也称为标识符

URI就是由某个协议方案表示的资源的定位标识符,协议方案是指访问资源使用的协议类型名称

采用HTTP协议时,协议方案就是http,还有ftp,mailto,telnet,file等。标准的协议方案有30多种

URI 举例

1.7.2 URL格式

表示指定的URI,要使用涵盖全部信息的绝对URI绝对URL相对URL

相对URI:是指从浏览器中基本URI处指定的URL,例如image/logo.png

绝对URI格式
  • 协议方案名:

    使用http:https:等协议方案名称获取访问资源时要指定协议类型,不区分字母大小写,最后附一个:

  • 登录信息:可选项

    指定用户名和密码作为从服务器端获取资源时,必要的登录信息,也就是身份认证,可选项

  • 服务器地址:

    使用绝对URI必须指定待访问的服务器地址。地址可以是IP地址,也可以是DNS可以解析的域名

  • 服务器端口号:可选项

    指定服务器连接的网络端口号。可选项,省略使用默认端口号

  • 带层次的文件路径:

    指定服务器上的文件路径来定位特指的资源

  • 查询字符串:可选项

    针对已指定的文件路径内的资源,可以使用查询字段传入任意参数,可选项

  • 片段标识符:可选项

    使用片段标识符通常可以标记出已获取资源中的子资源,文档内的某个位置


2. 简单的HTTP协议

主要是对HTTP协议结构讲解,主要使用HTTP/1.1版本

  • HTTP协议用于客户端和服务端之间的通信

    HTTP协议和TCP/IP协议族内的其他众多的协议相同,用于客户端和服务器之间的通信


    请求访问文本或图像等资源的一端称为客户端,而提供资源的响应的一端称为服务器端


    使用HTTP能够明确区分哪一端是客户端,哪一端是服务端

2.1 通过请求和响应的交换达成通信

HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回。也就是说,肯定是先从客户端开始建立通信的,服务器端在没有接受到请求之前不会响应

具体示例:

GET请求示例

请求头报文中内容:

GET / index.htm HTTP/1.1
Host: hackr.jp

含义:请求访问某台HTTP服务器上的/index.htm页面资源

起始行开头的GET表示请求访问服务器的类型,称为方法method。随后的字符串/index.htm指明了请求访问的资源对象,也叫做请求URI,request-URI。最后的HTTP/1.1,就是HTTP的版本号,用来提示客户端使用的HTTP协议功能


请求报文是由请求方法、请求URL、协议版本、可选的请求首部字段和内容实体构成的

请求报文

用于HTTP协议交互的信息被称为HTTP报文

响应报文

200表示请求的处理结果的状态码status codeOK原因短语reason-phrase

下一行显示了创建响应的日期时间,是首部字段header first内的一个属性

接着,空行;之后,便是资源的实体entity body


2.2 HTTP是不保存状态的协议

HTTP协议自身不具备保存之前发送过的请求或响应的功能

HTTP是一种不保存状态,无状态stateless协议,也就是HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理

为了实现期望的保持状态功能,引入了cookie

使用HTTP协议时,每当有新的请求时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息

HTTP协议使用URI定位互联网上的资源


2.3 HTTP方法

  • GET:获取资源

    GET 请求

GET方法用于请求访问已被URI识别的资源,指定的资源经服务器端解析后返回响应内容

如果请求的资源是文本,就保持原样返回;如果是像CGI(Common Gateway Interface)通用网关接口那样的程序,则返回执行后的结果

GET 请求响应

  • POST:传输实体主体

    POST 请求

PSOT方法用来传输实体的主体
虽然用GET方法也可以传输实体的,但一般不用GET方法进行传输, POST主要目的不是获取响应的主体内容

PUT 请求响应

  • PUT:用于传输文件,就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置,但由于HTTP/1.1PUT方法自身不带验证机制,一般不采用
  • HEAD:GET方法一样,只是返回报文主体部分,用于确认URI的有效性及资源更新的日期时间等
  • DELETE:删除文件,一般也不用
  • OPTIONS:询问支持的方法,用来查询针对请求URI指定的资源支持的方法

2.4 使用Cookie的状态管理

由于HTTP是无状态协议,不会对之前发生过的请求和响应的状态进行管理

当要实现类似保存的登录信息这样的需求时,引入了cookie

Cookie会根据从服务端发送的响应内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值,然后发送出去

服务器端发现客户端发送过来的Cookie后,会主动检查是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息

  • 没有Cookie消息状态时,第1次请求

    没有Cookie消息状态时

  • 存入Cookie信息,第2次请求

    存入Cookie信息,第2次请求

  • HTTP请求报文或响应报文

    HTTP请求报文或响应报文


3. HTTP报文内的HTTP信息

HTTP通信过程包括从客户端发往服务器及从服务端返回客户端的响应

3.1 HTTP报文

用于HTTP协议交互的信息被称为HTTP报文。请求端的HTTP报文叫做请求报文,响应端的叫做响应报文。HTTP报文本身是由多行数据结构构成的字符串文本,用CR+LF作换行符

HTTP报文大致可以分为报文首部和报文主体两块,两者由最早出现的空行分隔开,一般并不一定有报文主体

报文结构

3.2 请求报文及响应报文的结构

请求报文和响应报文结构
请求报文及响应报文 示例
  • 请求行:包含用语请求的方法,请求URIHTTP版本
  • 状态行:包含表明响应结果的状态码,原因短语和HTTP版本
  • 首部字段:包含表示请求和响应的各种条件和属性的各类首部,一般有4种,通用首部,请求首部,响应首部,实体首部
  • 其他:可能包含HTTPRFC里未定义的首部,cookie

3.3 编码提升传输速率

HTTP在传输数据时可以按照数据原样直接传输,也可以在传输过程中通过编码提升传输速率。但,编码的过程会消耗CPU等资源

3.3.1 报文主体和实体的差异

  • 报文Message

    HTTP通信中的基本单位,由8位组字节流octet sequeence组成,通过HTTP通信传输

  • 实体Enity

    作为请求或响应的有效载荷数据被传输,内容由实体首部和实体组成

HTTP报文的主体用语传输请求或响应的实体主体

一般,报文主体等于实体主体,只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异


  • 压缩传输的内容编码
  1. gzip(GNU zip)
  2. compress(Unix系统的标准压缩)
  3. defalte(zlib)
  4. identity(不进行编码)

3.4 发送多种数据的多部分对象集合

邮件中通常可以添加附件,邮件采用的是MIME(Mulitipurpose Internet Mail Extensions)多用途因特网邮件扩展,允许邮件处理文本,图片,视频等多个不同类型的数据

HTTP协议中,也可以采用多部分对象集合,发送一份报文主体内可以含有多类型实体,通常用于图片和文本文件上传

  • multipart/form-data

    Web表单文件上传时使用
  • multipart/byteranges

    状态码206响应报文包含了多个范围的内容时使用
  • multipart/form-data

    multipart/form-data
  • multipart/byteranges

    multipart/byteranges

使用boundary字符串来划分多部分对象集合指名的各类实体类

boundary字符串指定的各个实体的起始之前加--,在多部分对象集合对应的字符串的最后插入--作为结束

多部分对象集合的每个部分类型中,都可以含有首部字段,也可以在某个部分中嵌套使用多部分对象集合


4. 最后

前3章的摘抄

有错误,请指出

共勉 :)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容