HTTP协议学习笔记(一)

TCP/IP分为  应用层、传输层、网络层和数据链路层

应用层:决定了向用户提供应用服务通信的活动。 例如FTP(File Transfer Protocol)文本传输协议 和DNS(Domain Name System)域名系统服务就是其中两类,http协议也处于这层。     HTTP数据

传输层:传输层 对 上层应用层,提供处于网络连接中的两台计算机之间的数据传输。 TCP(Transmission Control Protocol)

和 UDP (User Data Protocol)   TCP首部

网络层(网络互连层):用来处理在网络上流动的数据包。数据包是网络传输的最小单位。该层规定了通过怎样的路径(传输路线)到达对方计算机,并把数据包传给对方。 通过多台计算机或者网络设备,选择其中一条传输路线。 IP首部

链路层(网络接口层):用来处理连接网络的硬件部分。硬件上的范畴均在链路层的作用范围之内。 以太网首部

每一台计算机无论是发送端还是接收端都要经过这四层。

利用TCP/IP协议族进行网络通信行,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端从链路层往上走。

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


与http密不可分的 (IP、TCP、DNS)

负责传输的IP(Internet Protocol)网际协议位于网络层。作用:把各种数据包传送给对方。

为了确保送到,要满足各类条件,最重要的两条就是IP地址和MAC(Media Access Control Address)地址。IP地址可以变换,但MAC是网卡所属的固定地址基本不会更改。

使用ARP(Address Resolution Protocol)协议凭借MAC地址进行通信。 ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。


确保可靠性的TCP协议  位于传输层,提供可靠的字节流服务。

字节流就是为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而且TCP能够确认数据最终是否送达到对方。

为了准确无误地将数据送达目标处,TCP采用了三次握手(three-way handshaking)策略

发送端首先发送一个带SYN(synchronize)标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK(acknowledge)标志的数据包以示传达确认信息。最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束。


负责域名解析的DNS服务: 和HTTP协议已于位于应用层的协议。提供域名到IP地址之间的解析服务。

DNS协议提供通过域名查找IP地址,或逆向从IP反查域名的服务。


举例:客户端---(应用层)当客户端想访问一个网址,通过DNS获取该网址的IP地址,根据http协议生成HTTP请求报文,(传输层)通过TCP协议,将http请求报文按序号分割成多个报文段,(网络层)根据IP协议,搜索对方的地址,一边中转一边传送,再通过数据链路层。(服务器),通过数据链路层,通过网络层,再通过传输层通过TCP协议接收并重组报文段,再通过应用层根据http协议对web服务器请求的内容的处理。 反之,请求的处理结果也同样利用TCP/IP通信协议向用户回传。

URL(Uniform Resource Locator,统一资源定位符):网页地址

URI(Uniform Resource Identifier)统一资源标识符

Uniform :规定统一的格式客房部处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式。

Resource :“可标识的任何东西”。除了文档文件、图像或服务等能够区别于其他类型的,全都可作为资源。

Identifier :可标识的对象,也称标识符


URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。可见URL是URI的子集。


    http://           user:pass        @      www.example.jp  :       80                 /dir/index.htm  ?           uid=1    #     ch1

协议方案名    登录信息(认证)           服务器地址            服务器端口号         文件路径                 查询字符串      片段标识符


RFC (Request for Comments)征求修正意见书 用来指定HTTP协议技术标准的文档,通常应用程序会遵照由RFC确定的标准实现。



HTTP协议用户客户端和服务端之间的通信,请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端。

GET                                                    /index.htm                                                   HTTP/1.1

请求访问服务器的类型,称为方法        资源对象(请求URI,request-URI)        HTTP协议版本,提示客户端使用HTTP协议功能Host : hackr.jp

         网络域名/IP地址


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


方法       URI               协议版本

POST  /form/entry  HTTP/1.1

-----------------------------------------------

Host :hackr.jp

Connection :keep-alive

Content-Type : application/x-www-form-urlencoded

Content-Length : 16

------------------------------------请求首部字段

name=ueno&age=37

内容实体

服务器响应

协议版本 状态码 状态码的原因短语

HTTP/1.1 200 0k

-----------------------

Date:Tue ,10 Jul 2012 06:50:15 GMT

content-Lengh:362

content-Type : text/html

----------------------- 响应首部字段

<html>

....

主体


HTTP是一种不保存状态,即无状态协议。


请求URI定位资源

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

当客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求URI包含在内。

指定请求URI的方式: URI为完整的请求URI 在首部字段Host中写明网络域名或IP地址

不是访问特点资源而是对服务器本身发起请求,可以用*代替请求URI


告知服务器意图的HTTP方法

GET:获取资源   POST:传输实体主体 PUT:传输(上传)文件  

HEAD:获得报文首部,和GET方法一样,只是不返回报文主体部分。

DELETE:删除文件,  OPTIONS:询问支持的方法,用来查询针对请求URI指定的资源支持的方法

TRACE:追踪路径 ,让web服务器端将之前的请求通信环回给客户端的方法。 

CONNECT:要求用隧道协议连接代理,要求在与代理服务器通信时建立随便,实现用隧道协议进行TCP通信。主要使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。 CONNECT 代理服务器名:端口号 HTTP版本号



持久连接就是在建立1次TCP连接后进行多次请求和响应的交互

管线化:不用等待响应亦可直接发送下一个请求


使用Cookie的状态管理

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

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

服务器端发送客户端发送来的Cookie后,回去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的计量,最后得到之前的状态信息。


    HTTP报文内的HTTP信息

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


HTTP报文

用于HTTP协议交互的信息被称为HTTP报文,请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。HTTP报文大致可分为报文首部和报文主体两块  ,也不一定要有保温主体。

报文首部 :服务器端或客服端需处理的请求或响应的内容及属性

报文主体:应被发送的数据

请求报文 -报文首部 包括 请求行  请求首部字段  通用首部字段 实体首部字段 其他

响应报文-报文首部 包括  状态行 响应首部字段  同上


请求行: 包含用于请求的方法,请求URI和HTTP版本

状态行: 包含响应结果的状态码,原因短语和HTTP版本

首部字段:包含表示请求和响应的各种条件和属性的各类首部

其他:可能包含 HTTP的RFC里为定义的首部(Cookie等)


编码提升传输速率

HTTP在传输数据时吗可以按照数据原貌直接传输,但也可以在传输过程中通过编码提升传输速率。

报文主体和实体主体的差异

1,报文(message) 是HTTP通信中的基本单位,由8位字节流组成,通过HTTP通信传输

2.实体(entity)作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。

通常,报文主体等于实体主体,只有当传输中·进行编码操作时,实体主体的内容会发生变化,才到手和报文主体产生差异。



压缩传输的内容编码

HTTP协议中有一个内容编码的功能:指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。

常用的内容编码: gzip  compress(UNIX系统的标准解压) deflate(zlib) identity(不解压)


分割发送的分块传输编码

在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主体分块的功能称为分块传输编码。(Chunked Transfer Coding)

使用分块传输编码的实体主体会由接收的客户端负责解码。



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

采用了MIME(multiputpose Internet Mail Extensions 。多用途因特网邮件扩展)机制,它允许邮件处理文件,图片,视频等多个不同类型。 利用MIME来描述标记数据类型,在MIME扩展中使用多部分对象集合(Multupart)的方法,来容纳多份不同类型的数据。

HTTP协议也采纳了多部分对象集合,发送的一份报文主体内可含多类型实体,通常实在图片或文本文件等上传时使用。

多部分对象集合包含的对象如下.

multipart/form-data: 在Web表单文件上传时使用

multipart/byteranges:状态码206(Partial Content,部分内容)响应报文包含了多个范围内容时使用


在HTTP报文中使用多部分对象集合时,需要在首部字段里加上 Content-type。

使用boundary字符串来划分对多部分对象集合指明的各类实体,doundary字符串指定的各个实体的起始行之前插入--,在多部分对象集合结尾插入 --


获取部分内容的范围请求

实现能从之前下载终端处恢复下载。需要实现该功能需要指定下载的实体范围,叫做范围请求。

执行范围请求时,会用到首部字段Range 来指定资源的byte范围

指定如下

5001~10000字节    Range: bytes=5001-10000

从5001字节之后全部的   Range: bytes=5001-

从开始到3000字节和5000-7000字节的多重范围

Range: bytes = -3000,5000-7000

针对请求范围,响应会返回状态码为206Partial Content 的响应报文。对于多重范围的范围请求,响应会在首部字段 Content-Type 标明 multipart/nyteranges 后返回响应报文。

如果服务器无法响应范围请求,则返回状态码200 ok 和完整的实体内容


内容协商返回最合适的内容

当浏览器的默认语言为英语或中文,访问相同URI的web页面时,则会显示对应的语言版本的web页面,这样的机制称为内容协商。

内容协商机制实质客户端和服务端就响应的资源内容进行交涉,然后提供给客户端嘴和适合的资源,内容协商会议响应资源的语言、字符集、编码方式等作为判断的基准。

包含在请求报文中国的某些首部字段就是判断的基准。

Accept    Accept-Charset    Accept-Language    Content-Language


内容协商技术有以下3种类型

服务器驱动协商(Server-driven Negotiation)

有服务器端进行内容协商。以请求的首部字段为参考,在服务器端自动处理。

客户端驱动协商(Agent-driven Negotiation

有客户端进行内容协商的方式,用户从浏览器显示的可选项列表中手动选择。

透明协商(Transparent Negotiation

服务端和客户端的结合体,由服务端和客户端各自进行内容协商的一种方法。


返回的状态码

1XX Infomational (信息性状态码)  接收的请求正在处理

2XX Success (成功状态码) 请求正常处理完毕

3XX Redirection (重定向状态码) 需要进行附加操作以完成请求

4XX Client Error (客户端错误状态码) 服务器无法处理请求

5XX ServerError(服务器错误状态码)服务器处理请求出错


200 ok  请求正常处理

204 No Content  请求处理成功,但没有资源返回

206 Partial Content 改状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求


301 Moved Permanently 永久性重定向。表示请求的资源已被分配了新的URI。

302 Found  临时性重定向 表示请求的资源已临时被分配了新的URI,希望本次能使用新的URI

302 See Other 由于去哪个区对象的资源存在着另一个URI,应使用GET方法定向获取请求的资源

304 Not Modified 客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态返回时,不包含热河响应的主体部分。

附带条件的请求是指采用GET方法的请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since

307 Temporary Redirect 临时重定向。会遵照浏览器标准,不会从POST变成GET。


400 Bad Request  表示请求报文中存在语法错误。

401 Unauthorized 表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。

403 Forbidden 表明对请求资源的访问被服务器拒绝了。未获得文件系统的访问授权,访问权限出现某些问题等都可能发生403

404 Not Found 表明服务器上无法找到请求的资源


500 Internal Server Rrror 表明服务器在执行请求时发生了错误。

503 Service Unavailable  表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。


与HTTP协作的Web服务器

一台Web服务器可搭建多个独立域名的Web网站,也可作为通信路径上的中转服务器提升传输效率。


用单台虚拟主机实现多个域名

在互联网上,域名通过DNS服务映射到IP地址(域名解析)之后访问目标网站。可见,当请求发送到服务器时,已经是以IP地址形式访问了。

所以当两个域名在同一台服务器上,通过DNS服务解析域名后,两者访问IP地址会一样。

在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI


通信数据转发程序:代理、网关、隧道

代理:一种有转发功能的应用程序,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

网关:转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,他就像自己拥有资源的原服务器一样对请求进行处理。

隧道:隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。


代理服务器:基本行为就是接受客户端发送的请求后转发给其他服务器,直接发送给前方持有资源的目标服务。

源服务器经过代理服务器再传给客户端,每次通过代理服务器转发请求或响应时,会追加写入Via首部信息

在HTTP通信过程中,可级联多台代理服务器。请求和响应的转发会经过数台类似锁链一样连接起来的代理服务器。转发时,需要附加Via首部字段以标记出经过的主机信息。


使用代理服务器的理由有,利用缓存技术减少网络宽带的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的等等。 代理两种基准分类,一种是是否使用缓存,另一种是是否会修改报文。


缓存代理 :代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本(缓存)保存在代理服务器上,当代理再次接收到对相同资源的请求时,就可以不从源服务器哪里获取资源,而是将之前缓存的资源作为响应返回。


透明代理

转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理。反之非透明代理


网关

网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非HTTP协议服务。

利用网关能提高通信的安全,因为可以在客户端与网关之间的通信线路上加密以确保连接的安全。


隧道

可按要求建立起一条鱼其他服务器的通信线路,届时使用SSL等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信。隧道本身不会去解析HTTP请求,保持原样中转给之后的服务器,隧道会在通信双方断开连接时结束。


保存资源的缓存

缓存是指代理服务器上或客户端本地磁盘内保存的资源副本。利用缓存可介绍对源服务器的访问,因此也就节省了通信流量和通信时间。

缓存服务器时代理服务器的意义,并归类在缓存代理类型中。当代理转发从服务器返回的响应时,会报错一份资源的副本。

缓存服务器的优势在于利用缓存可避免多次从源服务器转发资源。

缓存的有效期限

缓存资源的有效性问题,向源服务器确认资源的有效性。若判断缓存失效,缓存缓存服务器将会再次从源服务器上获取‘新’资源。

客户端的缓存 可与存在客户端浏览器,浏览器缓存有效,就不必再向服务器请求相同的资源了。缓存资源有效性与缓存服务器相同。




HTTP首部

报文首部:在客户端和服务器处理时起至关重要作用的信息几乎都在这里

报文主体:所需要的用户和资源的信息都在这里

HTTP请求报文首部   请求行 和HTTP首部字段

响应报文首部  状态行 和HTTP首部字段


HTTP首部字段是为给浏览器和服务器提供报文主体大小。所使用的语言,认证信息等内容

HTTP首部字段结构

首部字段名:字段值 ;例如  Content-Type: text/html

也可以有多个值 Keep-Alive:timeout=15,max=100

HTTP首部字段分为4种类型

通用首部字段(General Header Fields) :请求报文和响应报文两方都会使用的首部

请求首部字段 (Request Header Fields):从客户端向服务器端发送请求报文时使用。补充了请求的附加内容,客户端信息,响应内容相关优先级等信息。

响应首部字段 (Response Header Fields):反之,补充了响应的额附加内容,也会要求客户端附加额外的内容信息

实体首部字段(Entity Header Fields) :针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。


通用首部字段

Cache-Control:控制缓存的行为    Connection:逐跳首部、连接的管理  Date 创建报文的日期时间

Pragma 报文指令  Trailer 报文末端的首部一览 Transfer-Encoding 指定报文主体的传输编码方式

Upgrade 升级为其他协议  Via 代理服务器的相关信息   Warning 错误通知

请求首部字段

Accpet 用户代理可处理的媒体类型    Accept-Charset 优先的字符集  Accept-Encoding 优先的内容编码 

 Accept-Language 优先的语言   Authorization Web认证信息   From  用户的电子邮箱地址  Expect 期待服务器的特定行为

Host 请求资源所在服务器  Max-Forwards  最大传输逐跳数   Proxy-Authorization 代理服务器要求客户端的认证信息

Range 实体的字节范围要求   Referer 对请求中URI的原始获取方  TE 传输编码的优先级 UserAgent  HTTP客户端程序的信息

If-Match 比较实体标记(Etag)  If-Modified-Since  比较资源的更新时间  If-None-Match 比较实体标记(与If-Match相反)

If-Range 资源未更新时发送实体Byte的范围请求  If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反


响应首部子段

Accept-Ranges:是否接受字节范围请求  Age 推算资源创建经过时间  ETag 资源的匹配信息

Location 令客户端重定向至指定URI   Proxy-Authenticate 代理服务器对客户端的认证信息  

Retry-After 对再次发起请求的时机要求  Server HTTP服务器的安装信息  WWW-Authenticate 服务器对客户端的认证信息


实体首部字段

Allow 资源可支持的HTTP方法   Content-Encoding 实体主体适用的编码方式  Content-Language 实体主体的自然语言

Content-Length 实体主体的大小(单位:字节) Content-Location 代替对应资源的URI Content-MD5 实体主体的报文摘要

Content-Range 实体主体的位置范围 Content-Type 实体主体的媒体类型 Expires 实体主体过期的日期时间  

Last-Modified 资源的最后修改日期时间

Cache-Control 指令 参数可选如下


Cache-Control:private,max-age=0,no-cache


表示能缓存的指令

Cache-Control:public :表明其他用户可以利用缓存

Cache-Control:private  :响应只以特定的用户作为对象,与public相反,只对特定用户提供资源缓存的服务。

Cache-Control:no-cache :客户端的请求包含no-cache 表示不接收缓存的资源,目的为了防止从缓存中返回过期的资源,缓存服务器必须把客户端的请求转发给源服务器

                        服务器返回的响应包含no-cache指令,缓存服务器不能对资源进行缓存。

Cache-Control:no-cache=Location

         服务器的响应包含no-cache且具体指定参数值,客户端接收到这个被指定参数值的首部字段对应的响应报文后,就不能使用缓存。无参数值的首部字段可以使用缓存。只能在响应指令中指定该参数。


控制可执行缓存的对象的指令

no-store 指令

Cache-Control:no-store

no-cache 代表不缓存过期的资源,缓存会向源服务器进行有效期确认后处理资源。no-store 才睡真正地不进行缓存。

该指令规定缓存不能再本地存储请求或响应的任一不分。


s-maxage指令

Cache-Control:s-maxage=604800(单位:秒)

s-maxage指令的功能和max-age相同,不同点 s-maxage只适用于供多位用户使用的公共缓存服务器(一般指代理)。也就是说对于向同一个用户重复返回响应的服务器来说,这个指令没有任何作用。

使用了s-maxage后则直接忽略对Exoires首部字段及max-age指令的处理


max-age指令

Cache-Control:max-age=604800

客户端包含指令时,如果判定缓存资源的缓存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源,指定为0时,缓存服务器通常需要将请求转发给源服务器。

服务器端包含指令时,缓存服务器将不对资源的有效性再作确认,而max-age数值代表资源保存为缓存的最长时间。

缓存服务器远东同时存在Expires首部字段 和max-age 会优先处理max-age,忽略掉Expires首部字段


min-fresh 指令

Cache-Control:min-fresh=60

要求缓存服务器返回至少还未过指定时间的缓存资源

max-stale指令

Cache-Control:max-stale=3600

可指示缓存资源,及时过期也照常接收。为指定参数值,无论经过多久,客户端都会接收响应。指定了具体数值,即使过期,只要仍处于max-stale指定的时间内,仍旧会被客户端接收


only-if-cached指令

Cache-Control:only-if-cached

表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回。换言之,该指令要求缓存服务器不重新加载响应,也不会再次确认资源有效性。若请求缓存服务器的本地缓存无响应,则返回状态码 504 Gateway Timeout


must-revalidate 指令

Cache-Control:nmust-revalidate

使用该指令,代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。

若代理无法连通源服务器再次获取有效资源的话,缓存必须给客户端一条 504状态码

使用了该指令,会忽略max-stale指令


proxy-revalidate指令

Cache-Control:proxy-revalidate

要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性


no-transform指令

Cache-Control:no-transform指令

规定无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型,可防止缓存或代理压缩图片等类似操作。


Connection

作用:控制不在转发给代理的首部字段    管理持久连接

Connection:不再转发的首部字段名

在客户端发送请求和服务器返回响应内,使用connection首部字段,可控制不再转发给代理的首部字段。


Connection : close    持久连接断开   Connection: Keep-Alive  保持持久连接


Date  表明创建HTT报文的日期和时间


Pragma     HTTP /1.0

Pragma:no-cache 

虽然在通用首部字段,但只用在客户端发送的请求中,客户端会要求所有的中间服务器不返回缓存的资源。



Trailer

会事先说明在报文主体后记录了那些首部字段,可应用在HTTP/1.1版本分块传输编码时。


Transfer-Encoding

Transfer-Encoding: chunked

规定了出阿叔报文主体时采用的编码方式

   HTTP/1.1的传输编码方式仅对分块传输编码有效


-----------------HTTP首部-------------------

-------------------暂未写完-------------------














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值