少女祈祷中...

  • 概述

    ​ Web 使用一种名为 HTTP(超文本传输协议 )的协议作为规范,完成从客户端到服务器端等一系列运作流 程。而协议是指规则的约定。Web 是建立在 HTTP 协议上通 信的。 http协议主要是计算机网络系统上的应 用层。

  • TCP/IP协议族

    主要内容:
应用层:FTP(文件传输协议)和DNS(域名系统)和http协议

传输层:TCP(传输控制协议)和UDP(用户数据报协议)

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

链路层:处理连接网络的硬件部分
  • IP、TCP和DNS:

**IP**
IP地址:指明被分配的地址
MAC地址:指网卡所属固定的地址
运作方式:利用IP指明目标,中转时利用下一站中转设备的MAC地址搜素下一个中转目标。利用ARP协议可以根据IP地址解析出MAC地址。
**TCP**
TCP提供字节流服务,把数据分割,并通过带SYN/ACK的数据包(三次)确定是否最终传送到对方。
**DNS**
提供域名和IP之间解析服务
  • URI和URL

    ​ URI:是由某个协议方案表示的资源的定位标识符

    ​ URL:是使用 Web 浏览器等 访问 Web 页面时需要输入的网页地址

    ​ URI格式:协议方案名+登录信息(认证)+服务器地址+服务器端口号+带层次的文件路径+查询字符串+片段标识符 如:http://user:[email protected]:80/dir/index.htm?uid=1#ch1

简单的http协议


HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返回。

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

响应报文:基本由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体构成。

HTTP方法
**GET: 获取资源**
GET方法用来请求访问已被 URI 识别的资源

**POST: 传输实体主体**

**PUT: 传输文件**
由于PUT方法自身不带验证机制,存在安全性问题,一般的 Web 网站不使用该方法

**HEARD :获取报文首部**
不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等

**DELETE: 删除文件**

**OPTIONS: 查询支持方法**
用来查询针对URI指定的资源支持的方法

**TRACE: 追踪路径**
让 Web 服务器端将之前的请求通信环回给客户端的方法。客户端通过 TRACE 方法可以查询发送出去的请求是怎样被加工修改/篡改的。容易引发XST攻击

**CONNECT:要求用隧道协议连接代理**
方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。主要使用 SSL(安全套接层)和 TLS(传输层安全)协议把通信内容加密后经网络隧道传输。

​ 管线化:利用持久化连接,发送请求后不用等待回应就可直接发送下一个请求。

Cookie:通常用于判断两个请求是否来自同一浏览器,Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态 。

http报文


HTTP信息

​ 首部内容:请求行、状态行、首部字段

​ 报文:是 HTTP 通信中的基本单位,由 8 位组字节流组成,通过 HTTP 通信传输。

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

​ 常见压缩传输的内容编码:gzip、compress、deflate、identity

多部分对象集合
  • multipart/form-data

    ​ web表单文件上传时使用

  • multipart/byteranges

    ​ 状态码206响应报文包含了多个范围的内容时使用

    获取部分内容的范围请求:用到首部字段Range来指定资源的byte范围

    内容协商技术:服务器驱动协商、客户端驱动协商、透明协商

http状态码


状态码类别
类别 原因短语
1XX 信息性状态码 接收的请求正在处理
2XX 成功状态码 请求正常处理完毕
3XX 重向状态码 需要进行附加操作以完成请求
4XX 客户端错误状态码 服务器无法处理请求
5XX 服务器错误状态码 服务器处理出错
14种常见的状态码
**200 OK**
请求被正常处理

**204 No Content**
请求已成功处理,但响应报文中不含实体的主体部分,也不允许返回任何实体的主体

**206 Partial Content**
客户端进行了范围请求,服务器成功执行请求,响应报文中包含由Content-Range指定范围的实体范围

**301 Moved Permanently**
永久性定向。--请求的资源已经被分配到了新的URI

**302 Found**
临时性重定向。

**303 See Other**
表示请求对应的资源存在另一个URI,应使用GET方法定向获取请求资源

**304 Not Modified**
无需再次传输请求的内容,可以使用缓存的内容。

**307 Temporary Redirect**
临时重定向,保持原有信息

**400 Bad Request**
报文中存在语法错误,需要修改请求重新发送

**401 Unauthorized**
表示发送请求需要有通过HTTP认证的认证信息,若之前进行过1次请求,则表示用户认证失败

**403 Forbidden
请求资源的访问被服务器拒绝

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

**500 Internal Server Error**
服务器在执行请求时发生了错误,也有可能是Web应用存在的bug或临时的故障

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

web服务器


通信数据转发程序

**代理**
作为客户端和服务器的‘中间人’
缓存代理:会预先把资源的副本(缓存)保存在代理服务器上
透明代理:转发请求或响应时,不对报文做任何加工代理

**网关**
转发来自其他服务器通信数据的服务器,对客户端的请求进行处理
网关可以使通信线路上的服务器提供非HTTP协议服务,提高安全性。

**隧道**
是在相隔甚远的客户端和服务器之间进行中转,并保持双方通信连接的应用程序
目的是为了进行安全的通信
http出现之前的协议

​ FTP:传输文件时使用的协议

​ NNTP:用于 NetNews 电子会议室内传送消息的协议

​ Archie :搜索 anonymous FTP 公开的文件信息的协议

​ WAIS :以关键词检索多个数据库使用的协议

​ Gopher :查找与互联网连接的计算机内信息的协议

HTTP首部

​ 首部字段结构:手段字段名:字段值

通用首部
**Cache-Control 控制缓存的行为**
指令: public 表明其他用户也可利用缓存
private 响应只能以特殊用户作为对象
no-cache 用户端不接受缓存过的响应,缓存服务器不能进行缓存
no-store 表明请求和响应中包含机密信息,不能进行缓存
s-maxage=...(秒) 指定缓存期限和认证的指令
min-fresh=...(秒) 指示客户端允许存储的响应至少 N 秒是新鲜的
max-stale=...(秒)可指示缓存资源,处于指定范围内,过期也可以接受。
only-if-cached 客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回
must—revalidate代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。
proxy-revalidate缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性
no-transform 缓存都不能改变实体主体的媒体类型

**Connection 逐跳首部、连接的管理**
指令 close 服务器想断开连接
Keep-Alive 旧版本http协议实现持久化连接

**Date 创建报文的日期时间**
格式: 如Tue, 03 Jul 2012 04:40:59 GM或者Tue Jul 03 04:40:59 2012

**Pragma 报文指令**
指令: no-cache 只在客户端请求中,所有中间服务器不返回缓存资源

**Trailer 报文末端的首部一览**
允许发送方在分块发送的消息后面添加额外的元信息

**Transfer-Encoding 指定报文主体的传输编码方式**

**Upgrade 升级为其他协议**

**Via 代理服务器的相关信息**
追踪报文传输路径

**Warning 错误通知**
格式: [警告码][警告的主机:端口号]“[警告内容]”([日期时间])
请求首部字段
首部字段名 		说明
**Accept 用户代理可处理的媒体类型**
q=(0-1)用来权衡优先级,默认为1,前用;间隔

**Accept-Charset 优先的字符集**

**Accept-Encoding 优先的内容编码**
内容编码优先级

**Accept-Language 优先的语言(自然语言)**

**Authorization Web认证信息**

**Expect 期待服务器的特定行为**
错误返回状态码417 Expectation Failed

**From 用户的电子邮箱地址**

**Host 请求资源所在服务器**

**If-Match 比较实体标记(ETag)**
If-xxx 为条件请求,条件为真时执行

*If-Modified-Since 比较资源的更新时间*
如果请求的资源都没有过更新,则返回状态码 304 Not Modified 的响应

**If-None-Match 比较实体标记(与 If-Match 相反)**

**If-Range 资源未更新时发送实体 Byte 的范围请求**

If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反)
如果在指定日期时间后发生了更新,则以状态码 412 Precondition Failed 作为响应返回。

**Max-Forwards 最大传输逐跳数**
当值为0时,经过的服务器不在进行转发,直接返回响应

**Proxy-Authorization 代理服务器要求客户端的认证信息**

**Range 实体的字节范围请求**

**Referer 对请求中URI的原始获取方**

**TE 传输编码的优先级**

**User-Agent 客户端程序的信息**
将创建的请求的浏览器和用户代理名称等信息传达给服务器
响应首部字段
首部字段名	    	说明
**Accept-Ranges 是否接受字节范围请求**

**Age 推算资源创建经过时间**

**ETag 资源的匹配信息**
用户端实体标识

**Location 令客户端重定向至指定URI**

**Proxy-Authenticate 代理服务器对客户端的认证信息**
服务器是安装http服务器的应用程序是信息

**Retry-After 对再次发起请求的时机要求**

**Server HTTP服务器的安装信息**
服务器是安装http服务器的应用程序是信息

**Vary 代理服务器缓存的管理信息**

**WWW-Authenticate 服务器对客户端的认证信息**
http访问认证
实体首部字段
首部字段名 		说明
**Allow 资源可支持的HTTP方法**

**Content-Encoding 实体主体适用的编码方式**

**Content-Language 实体主体的自然语言**

**Content-Length 实体主体的大小(单位:字节)**

**Content-Location 替代对应资源的URI**

**Content-MD5 实体主体的报文摘要**
判断报文的准确性

**Content-Range 实体主体的位置范围**

**Content-Type 实体主体的媒体类型**

**Expires 实体主体过期的日期时间**

**Last-Modified 资源的最后修改日期时间**
**Set-Cookie**
expires:浏览器可发送cookie的有效期
path:限定cookie发送范围的文件目录
domain:指定域名与结尾匹配可发送cookie
secure:web仅在HTTPS时,才发送cookie
HttpOnly:使JavaScript无法获取cookie,防止xss攻击对信息的窃取
其他首部字段
**X-Frame-Options 用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题 **响应首部
DENY:拒绝
SAMEORIGIN:仅同域名下页面匹配时许可

**X-XSS-Protection 于控制浏览器 XSS 防护机制的开关**响应首部
0:无效 1: 有效

**DNT 拒绝个人信息被收集**请求首部
0:同意被跟踪 1:拒绝被跟踪

*P3P 在线隐私偏好平台**