5588葡京线路HTTP学习笔记#1

五、与HTTP协作的web服务器

一样、 了解网络基础

  1. HTTP/1.1
    规范允许同一高HTTP服务器搭建多个web站点,即在同等IP地址下,由于虚拟主机可以存放多独不等主机名以及域名之网站。因此发送HTTP请求时,必须以Host首部内完全指定主机名或域名的URI
  2. 通信数据转发程序:

  3. 代办:一种有转账功能的应用程序,扮演着服务器和客户端的“中间人”。

    • 中心表现:匪改动请求URI,直接倒车
    • 转发时,需要增大Via首部字段因标记出通过的主机信息。
    • 代办按两种植规格分类。一种:是不是用缓存,另一种:是否修改报文。(缓存代理、透明代理)
    • 缓存代理:代理转发时,缓存代理会预先将资源休养生息存在代理服务器上。
    • 透明代理:转发呼吁或响应式,不针对报文做其他加工之代理。反之,称为非透明代理。
  4. 网关:转折其他服务器通信数据的服务器。接收从客户端发来之要时,它便比如自己抱有资源的本服务器一样对要进行处理
    • 行事体制与代理相似,区别在:网关能要通信线路上之服务器提供非HTTP协议服务
    • 利用网关提高通信的安全性,因为好于客户端和网关中的通信新路上加密以管教连接的安全。
  5. 隧道:可比照要求确立于一漫漫与外服务器的通信线路,届时采取SSL等加密手段进行通信。
    • 目的是保证客户端能与服务器进行安全之通信
    • 隧道本身不见面错过解析HTTP请求
  • web是应用同一栽叫做吧HTTP(HyperText Transfer
    Protocol,超文本传输协议)的说道作为正式,Web是立在HTTP协议达成简报的。
  • 万般采用的网实在TCP/IP协议族的基础及运行的。HTTP属于它们的一个子集。
  • TCP/IP协议族按层次划分也:应用层、传输层、网络层和多少链路层。
  • TCP/IP协议族分层之利:
    • 每个层可以任意转移,甚至替换而无见面影响及外层。
    • 远在采用层及的行使可只有考虑分派给协调的天职,而未需澄清对方以哪,怎么来,传输是否科学等问题。
  • TCP/IP协议族各层作用:
    • 应用层:决定了为用户提供应用服务时报道的移动(HTTP、FTP、HTTP协议)
    • 染输层:为上层应用层提供处于网络连接中的简单台微机之间的多少传(TCP:传输控制协议、UDP:用户数据报协议)
    • 网络层:用来拍卖在网及注的数据包。规定通过怎样的途径到达对方电脑,并将数据包传送给对方。(选择传输线路)
    • 链路层:用来拍卖连接网络的硬件部分。(控制操作系统、硬件的装置驱动,NIC:网卡、光纤等硬件范畴的)
  • TCP/IP通信传输流:[客户端]HTTP客户端(应用层)<->TCP(传输层)<->IP(网络层)<->网络(链路层)<->IP(网络层)<->TCP(传输层)<->HTTP服务器(应用层)[服务器]。
  • 和HTTP关系密切的协商
    • IP协议:负责传输,两只重大尺度-IP地址(指明节点被分配的地点)和MAC地址(网卡所属之恒地址)
    • TCP协议:确保数据会到目标。三次于握手策略
    • DNS协议:负责域名解析。位于应用层,提供域名及IP地址之辨析服务。
  • URI与URL

六、HTTP首部

仲、 HTTP商基础

  1. 告报文首部

  2. 请求行(方法、URI、HTTP版本)

  3. 请首部字段
  4. 通用首部字段
  5. 实业首部字段
  6. 其他

  7. 响应报文首部

  8. 状态行(HTTP版本、状态码)

  9. 响应首部字段
  10. 通用首部字段
  11. 实体首部字段
  12. 其他

  13. 首部字段结构

  14. 许段名和许段值构成,中间用冒号Content-Type: text/html

  15. 字段值对许单个HTTP首部字段好来差不多独价值Keep-Alive: timeout=15, max=100

  16. End-to-end 首部和Hop-by-hop 首部

  17. 捧到端首部(End-to-end Header)
    分割在斯种中之首部回转发给请求/响应对应之最终收到目标,且务必保留于由缓存生成的响应中,另外规定其要换车。

  18. 逐跳首部(Hop-by-hop Header)
    分割在此种的首部支队单词转发中,会因为通过缓存活代理要不再转发。HTTP/1.1及下版本汇总,要是一旦下hop-by-hop首部,需提供Connection首部字段
  19. 除外以下字段都属端到端首部:

    • Connection
    • Keep-Alive
    • Proxy-Authenticate
    • Proxy-Authorization
    • Trailer
    • TE
    • Transfer-Encoding
    • Upgrade
  20. HTTP/1.1通用首部字段
    Cache-Control:操作缓存的工作体制

  21. 代表是否缓存的命

    • public:明确标明其他用户也可采取缓存。
    • private:缓存服务器会指向该特定用户提供资源缓存的服务,而任何用户发送过来的要不见面回缓存,与public相反。
    • no-cache:为了防备从缓存中回到过期的资源
    • no-store:规定缓存不能够在地面存储请求或响应的不论是一部分
      证:从字面上格外易把no-cache误解呢不缓存,但实际no-cache代表不缓存过期的资源,缓存会向源服务器进行有效期确认后甩卖资源。no-store才是的确地无开展缓存。
  22. 点名缓存期限与验证的指令
    • Cache-Control: max-age=604800,如果判断缓存资源的缓存时间数值比较max-age值小,客户端就收下缓存的资源。当max-age为0时,缓存服务器一般需用请求转发给源服务器。
    • Cache-Control: s-maxage=604800,与max-age相同,不同点时s-maxage只适用于多位用户以的共用缓存服务器(代理)。当用s-maxage指令后,会忽略Expires首部字段以及max-age指令处理。
    • Cache-Control: min-fresh=60,要求缓存服务器返回至少还从未喽指定时间的休养存资源。
    • Cache-Control: max-stale=3600,指缓存资源,即使过期也照常接收。
    • Cache-Control: only-if-cached,要求缓存服务器不更加载响应,也未会见再度确认资源有效。如果请缓存服务器的本地缓存无响应,则回504。
    • Cache-Control: must-revalidate,代理会向资源服务器又印证即将返回的响应缓存是否有效。使用该指令会忽略max-stale。
    • Cache-Control: proxy-revalidate,缓存服务器收到请求,必须重新印证缓存中。
    • Cache-Control: no-transform,缓存不可知改实体中心的媒体类型。可防缓存或代办压缩图片等相近操作。
  • HTTP是同栽无状态协议。HTTP协议本身不对准要与应期间的简报状态进行封存。为了贯彻保存状态功能引入了Cookie技术。
  • HTTP请求方法
    • GET:获取资源
    • POST:传输实体主题
    • PUT:传输文件
    • HEAD:获得报文首部,与GET方法一致,只是不回去报文主体部分。
    • DELETE:删除文件,与PUT相反
    • OPTIONS:询问支持之计,查询针对请求URI指定的资源支撑的艺术
    • TRACE:追踪路径,让web服务器端将之前的求通信环会给客户端的法子
    • CONNECT:要求在代理服务器通信时确立隧道,实现用隧道协议进行TCP通信(SSL、TLS)
  • 呼吁方法分别轻重缓急写,注意用老写字母
  • 善始善终连接
    • HTTP协议开始版本每进行HTTP通信,就如断开一破TCP连接。浪费
    • 在HTTP/1.1版本中,所有的连日默认都为持久连接(管道化、请求并行)
  • 使用Cookie管理状态

Connection

其三、HTTP报文内的HTTP信息

  • 操纵不再转发给代理的首总理字段
    Connection: 不在转发的首部字段名
  • 管制持久连接
    Connection: close,当服务端明确断开连接是,则指定Connection首部字段的值为Close。
    Connection: Keep-AliveHTTP/1.1默认连接为持久连接
  • 央报文与应报文的结构
  • 编码提升传输速率(但是,编码操作需要计算机来形成,回消耗又多的CPU等资源)
  • 报文主体与实体中心的出入
    • 报文:
    • 实体:
    • 普普通通报文主体等实体中心。只有当传输中进行编码操作时,实体中心的情节发生变化,才造成她们出距离。
  • 抽传输的始末编码
    • gzip
    • compress
    • deflate
    • identity
  • 分块传输编码
  • 基本上片对象集合包含的目标:
    • multipart/form-data
    • multipart/byteranges
  • 落有内容的限要:具体用,断点下载
  • 情商归最可之始末

Data代表创建HTTP报文的日子与岁月,时间格式:Date: Tue, 03 Jul 2012 04:40:59 GMT

四、HTTP状态码

Pragma:HTTP/1.1事先版本的历史遗留字段,Pragma: no-cache类似Cache-Control: no-cache

  • 2xx 成功
    200 OK
    204 No Content
    代表呼吁处理成,但回到的响应报文中无分包实体的重点部分。
    206 Partial Content
    表示客户端进行了限定要,服务器处理该有GET请求成功。
  • 3xx 重定向
    301 Moved Permanently
    表示请的资源曾于分配了新的URI,以后应采取资源现在所依靠的URI。
    302 Found
    临时再定向,表示求的资源都给分配了初的URI,希望用户本次能够用新的URI访问。
    303 See Other
    与302具相同之效应,但303状态也明确表示客户端应当使用GET方法取得资源。
    304 Not Modified 服务器端资源也改变,可直接食用客户端也过的休养生息存。
    307 Temporary Redirect 临时又定向,与302有一样的意义。
  • 4xx 客户端错误
    400 Bad Request 表示请报文中设有语法错误。
    401 Unauthorized
    表示发送的恳求需要有经HTTP认证(BASIC认证、DIGEST认证)的证实信息。
    403 Forbidden 表示求资源为服务器拒绝访问。
    404 Not Found 找不交资源。
  • 5xx服务器错误
    500 Internal Server Error 表明服务器端在实施要时发生了错。
    503 Service Unavailable
    表明服务器暂时处于超负荷或正在进行停机维护,无法处理要。

Trailer:说明:Trailer会事先说明报文主体后记录了哪首部字段。该首部字段可下在HTTP/1.1版分块传输编码时。

Transfer-Encoding

  • 确定了导报文主体时利用的编码方式。
  • HTTP/1.1的传导编码方式仅针对分块传输编码有效。

Upgrade

  • 用来检测HTTP协议以及其他协商是否可应用更胜似之本进行报道,其参数值可以就此来制订一个完全不同之通信协议。
  • 行使首部字段Upgrade时,还索要附加制定Connection: Upgrade

Via

  • 报文经过代理要网关时,会先在首管辖字段Via中附加该服务器的消息,然后再度转车。
  • Via不仅用于追踪报文的转折,还只是免请求回环的产生。

Warning

  • 由HTTP/1.0的应首部(Retry-After)演变过来,告知用户有和缓存相关的题材和警告。
  • 格式:Warning: [警告码] [警告的主机:端口号] “[警示内容]”
    ([日子时])

110 Response is stale 代理返回就过期的资源
111 Revalidation failed
代理再作证资源有效时失败(服务器无法抵达等因)
112 Disconnection operation 代理及互联网连接于有意切断
113 Heuristic expiration 响应的使用期超过24时
199 Miscellaneous warning 任意的警示内容
214 Transformation applied 代理对情节编码或媒体类型等履了几许处理常
299 Miscellaneous persistent warning 任意的警戒内容

6. 请求首部字段
  **Accept**
  - 告诉服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。
  - 可使用`type/subtype`这种形式,一次指定多种媒体类型。q代表权重,范围是0~1
`Accept: text/html,application/Xhtml+xml,application/xml;q=0.9,*/*;q=0.8`

  **Accept-Charset**:用来通知服务器用户代理支持的**字符集及字符集的相对优先级**

  **Accept-Encoding**
  - 用来告知服务器用户代理支持的**内容编码及内容编码的优先级顺序**
  - `Accept-Encoding: gzip, deflate`

  **Accept-Language**:告知服务器用户代理能够处理的**自然语言集,以及相对优先级**

  **Authorization**:用来告知服务器,用户代理的认证信息。

  **Except**:告知服务器,期望出现的某种特定行为。

  **From**:告知服务器使用用户代理的用户的电子邮件地址。

  **Host**:告知服务器请求的资源所处的互联网主机名和端口号。

  **If-Match**
  - 只有当If-Match的字段值根ETag值匹配一致时,服务器才会接受请求。反之,返回412状态吗
  - 如果使(\*)指定If-Match的字段值,服务器将会忽略ETag,只要资源存在就处理请求。

  **If-Modified-Since**:如果在If-Modified-Since字段指定的日期时间后,资源发生了更新,服务器会接受请求。

  **If-None-Match**:只有在If-None-Match的字段值与ETag值不一致时,可处理请求。与If-Match首部字段的作用相反。

  **If-Range**:告知服务器若指定的If-Range字段值和请求资源的ETag值或时间一致时,则作为范围请求处理。反之,则返回全体资源。

  **If-Unmodified-Since**:与If-Modified-Since相反。
  **Max-Forwards**:转发数,每次转发值减1.当值变0时,返回响应。
  **Proxy-Authorization**
  - 接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证需要的信息。
  - 注意:认证行为发生在客户端与代理之间。

  **Range**:返回资源的指定范围
  **Referer**:告知服务器请求的原始资源的URL
  **TE**:告知服务器客户端能够处理响应的传输编码方式及相对优先级,与Accept-Encoding功能相似,但是用于传输编码。
  **User-Agent**,告知服务器创建请求的浏览器和用户代理名称等信息。
7. 响应首部字段
  **Accept-Ranges**
  - 告知客户端服务器是否能处理范围请求
  - 可指定的字段值有:可处理范围请求时指定其为bytes,反之则指定其为none。

  **Age**:告知客户端,源服务器在多久前创建了响应。字段值的单位为秒。
  **ETag**:
  - 一种可将资源以字符串形式做唯一标识的方式。
  - 资源更新时,ETag需要更新。
  - 强ETag值,不论实体发生多么细微的变化都会改变其值。`ETag: "usagi-1234"`
  - 弱ETag值,只有资源发生了根本改变,才会改变ETag值。在字段值最开始附加W `ETag: W/"usagi-1234"`

  **Location**:重定向。
  **Proxy-Authenticate**:会把由代理服务器所要求的认证信息发送给客户端。
  **Retry-After**:告诉客户端应该多久之后再次发送请求。
  **Server**:告诉客户端服务器上安装的HTTP服务器应用程序的信息。
  **Vary**:首部字段Vary可对缓存进行控制。当Vary字段值为Accept-Language,那么只有对持相同自然语言的请求返回缓存。
  **WWW-Authenticate**:用于HTTP访问认证。
8. 实体首部字段
  **Allow**:通知客户端能够支持Request-URI指定资源的HTTP方法。
  **Content-Encoding**:
  - 告知客户端服务器对实体的主体部分选用的内容编码方式。内容编码是值在不丢失实体信息的前提下所进行的压缩。
  - 主要采用以下4种内容编码的方式。(gzip、compress、deflate、identity)

  **Content-Language**:告知客户端,实体主体使用的自然语言。
  **Content-Length**:表明实体主体部分的大小,单位是字节。
  **Content-Location**:表示报文主体返回资源对应的URI。
  **Content-MD5**:该字段的值是一串MD5算法生成的值,目的在于检查报文主体在传输过程中是否保持完整。
  **Content-Range**:针对范围的请求,返回响应时使用的首部字段Content-Range,能告知客户端作为响应返回的实体的哪个部分符合范围请求。
  **Content-Type**:说明了实体主体内对象的媒体类型。
  **Expires**:告知客户端资源实效日期,实效前,响应的副本会一直被保存。
  **Last-Modified**:资源最终修改的时间。
9. 为Cookie服务的首部字段
  **Set-Cookie**:开始状态管理所使用的Cookie信息,响应首部字段

NAME=VALUE 给Cookie的号及其值(必需项)。
expires=DATE Cookie的有效期,默认为浏览器关闭前收。
path=PATH 将服务器上的文件目录作为Cookie的适用对象。
domain=域名 作为Cookie适用对象的域名,可安装domain用于跨域操作。
Secure 仅以HTTPS安全通信时才会发送Cookie。
HttpOnly 加以限定,使Cookie不能被JavaScript脚本访问。

  **Cookie**:服务器接收到的Cookie信息,请求首部字段

Cookie: status=enable

首部字段Cookie会告知服务器,当客户端想要获得HTTP状态管理支持时,就会在请求中包含从服务器接收到的Cookie。

10. 其他首部字段
  **X-Frame-Options**:用于控制网站内在其他Web网站的Frame标签内的显示问题,目的是为了防止点击劫持攻击。有两个值:**DENY**,拒绝;**SAMEORIGIN**,仅同源域名下的页面匹配时许可。
  **X-XSS-Protection**:针对跨站脚本攻击的一种对策。0:将XSS过滤设置成无效状态,1:相反。
  **DNT**:Do Not Track,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法。0:同意被追踪,1:拒绝被追踪。
  **P3P**:通过利用P3P(The Platform for Privacy Preferences,在线隐私偏好平台)技术,可以让Web网站上的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的。