图解HTTP学习

来源:互联网 发布:c语音递归算法1加到100 编辑:程序博客网 时间:2024/06/15 22:13

图解HTTP学习

1.TCP协议的三次握手:

通过两个标志(flag) SYN(syncharonize)和ACK(acknowledgement)
1.发送端:发送标有SYN的数据包。
2.接受端:收到,发送标有SYN和ACK的数据包给发送端。
3.发送端:收到,发送标有ACK的数据包给接收端。

DNS服务器

DNS服务器将域名转换为IP地址。

URI (统一资源标识符)

Uniform Resource Identifier的缩写。
URI是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。
包括 http、ftp、mailto、file等,大约有30种左右。
URL是URI的子集。

HTTP协议是不保存状态的协议

所以引入了cookie机制。

告知服务器意图的http 方法

1.GET 获取资源

2.POST 传输实体主体

3.PUT 传输文件 :要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。

4.HEAD 获得报文首部 :和GET方法一样,只是不返回报文主体部分,用于制定URI的有效性及资源更新的日期时间等。

5.DELETE 删除文件

6.TRACE 追踪路径

7.CONNECT 要求用隧道协议连接代理 主要 SSL和TLS

非持久连接、持久连接和管线化

使用Cookie进行状态管理

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
Cookie会更具从服务器端发动的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。
当下次客户端再往服务器发送请求屎,客户端会自动在请求报文中加入Cookie值后发送出去。
服务器端发现客户端发送过来的Cookie后,会检查究竟是从哪个客户端发来的连接请求,然后对比服务器上的记录。
最后得到之前的状态信息。

内容编码

  • gzip(GNU zip)
  • compress(UNIX 系统的标准压缩)
  • deflate (zlib)
  • identity (不进行编码)

获取部分内容的范围请求(Range Request)

内容协商

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉、然后提供给客户端最为适合的资源。

状态码

  1. 1XX infromational 接受请求正在处理
  2. 2XX success 请求正常处理完毕
  3. 3XX redirection 重定向状态码 需要进行附加操作以完成请求
  4. 4XX Client Error 客户端错误状态码 服务器无法处理请求
  5. 5XX Servier Error 服务器错误状态码 服务器处理请求出错

    • 2XX 成功
  6. 200 OK

  7. 204 No Content 请求处理成功但是没有资源可以返回。
  8. 206 Partial Content 响应报文中包含由Content-Range指定范围的实体内容。

    • 3XX 重定向
  9. 301 Moved Permanently 永久性重定向

  10. 302 Found 临时性重定向 表示请求资源已被分配新的URI 希望用户(本次)能使用新的URI访问。
  11. 303 See Other 由于请求对应的资源存在着另外一个URI,应使用GET方法定向获取请求的资源。
  12. 304 Not Modified 客户端发送附带条件的请求,服务端允许请求访问资源,但未满足条件的情况。
  13. 305 Temporary Redirect 临时重定向 类似302

    • 4XX 客户端错误
  14. 400 Bad Request 请求报文中存在语法错误

  15. 401 Unauthorized 表示请求需要有通过HTTP认证的认证信息。
  16. 403 Forbidden 服务器拒绝了请求。 (例如位夺得文件系统的访问授权)
  17. 404 Not Found 服务器无法找到请求的资源。

    • 5XX 服务器错误
  18. 500 Internal Servier Error 服务器错误.

  19. 503 Service Unavailable 服务器暂时处于超负荷或者正在进行停机维护。

HTTP请求报文

由 方法 URI HTTP版本 HTTP 首部字段等部分构成。

HTTP响应报文

由 HTTP版本、状态码(数字和原因短语)、HTTP首部字段。

4种HTTP首部字段类型

  1. 通用首部字段(General Header Fields) 请求报文和响应报文两方都会使用的首部
  2. 请求首部字段(Request Header Fields)
  3. 响应首部字段(Response Header Fields)
  4. 实体首部字段(Entity Header Fields)

HTTP/1.1通用首部字段

  1. Cache-Control

缓存请求指令:

指令 参数 说明 no-cache 无 强制向源服务器再次验证 no-store 无 不缓存请求或响应的任何内容 max-age=[秒] 必需 响应的最大Age值 max-stale(=[秒]) 可省略 接受已过期的响应 min-fresh=[秒] 必需 期待在制定时间内的响应仍有效 no-transform 无 代理不可更改媒体类型 only-if-cached 无 从缓存获取资源 cache-extension - 新指令标记(token)

缓存响应指令:

指令 参数 说明 public 无 可向任意方提供响应的缓存 private 可省略 仅向特定用户返回响应 no-cache 可省略 缓存前必须先确认其有效性 no-store 无 不缓存请求或相应的任何内容 no-transform 无 代理不可更改媒体类型 must-revalidate 无 可缓存但必须再向源服务器进行确认 proxy-revalidate 无 要求中间缓存服务器对缓存的响应有效性再进行确认 max-age=[秒] 必需 响应的最大Age值 s-maxage=[秒] 必需 公共缓存服务器响应的最大Age值 cache-extension - 新指令标记(token)

2. Connection
作用

  • 控制不再转发给代理的首部字段
    Connection: 不再转发的首部字段名
  • 管理持久连接
    Connection: close

HTTP/1.1 版本默认连接是持久连接。因此,客户端会在持久连接上连续发送请求。当服务器端想明确断开连接时,
则制定Connection首部字段的值为Close。

Connection: Keep-Alive

HTTP/1.1之前的HTTP版本的默认连接是非持久连接。因此,如果想在旧版本上的HTTP协议上维持持续连接,
则需要制定Connection首部字段的值为 Keep—Alive。

  1. Date 表明创建HTTP报文的日期和时间

  2. Pragma 是HTTP/1.1之前版本的历史遗留字段,仅作为与HTTP/1.0的向后兼容而定义。
    形式唯一。

    Pragma: no-cache 仅用在客户端发送请求中,要求中间服务器不返回缓存资源。

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

  4. Transfer-Encoding 规定了传输报文主体时采用的编码方式。

  5. Upgrade 用于检测HTTP 协议及其他协议是否可使用更高的版本通信。

  6. Via 使用Via 为了追踪客户端与服务器之间的请求和响应报文的传输路径。

  7. Waring 告知用户一些与缓存相关问题的警告。

请求首部字段

  1. Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。
    可使用 type/subtype这种形式,一次指定多种媒体类型。
    若想要给显示的媒体类型增加优先级,则使用q=来额外表示权重值,用分号(;)进行分隔。权重值q的范围是0~1

  2. Accept-Charset 用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。

  3. Accept-Encoding 用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。

  4. Accept-Language 用来告知服务器用户代理能够处理的自然语言集。

  5. Authorization 用来告知服务器用户代理的认证信息。

  6. Expect 用来告知服务器期望出现某种特定的行为。

  7. From 用来告知服务器使用用户代理的用户的电子邮件地址。

  8. Host 虚拟主机运行在同一个IP上,因此使用首部字段Host加以区分。必须包含子请求内的首部字段。

  9. If-Match If-xxx 这种样式的请求首部字段,被称为条件请求。服务器接收到附带条件的请求后,只有判断制定条件为真时,才会执行请求。
    If-Match 告知服务器匹配资源所用的实体标记(Etag)值。仅当If-Match 字段值和资源的Etag值一致时,
    才会执行请求。否则返回 412 Precondition Failed 。

  10. If-Modified-Since 如果在If-Modified-Since 字段制定的日期时间后,资源发生过更新,服务器会接受请求。
    否则返回 304 Not Modified

  11. If-None-Match 和If-Match 作用相反。

  12. If-Range 若是跟Etag值或更新的日期时间匹配一致,那么就作为范围请求处理。
    若不一致,则忽略范围请求,返回全部资源。

  13. If-Unmodified-Since 与If-Modified-Since 作用相反,之后在字段时间内资源未发生过变化。才会做出响应。

  14. Max-Forwards 只能向下转发次数。每次转发减1。当数值变0时返回响应。

  15. Proxy-Authorization 告知代理服务器认证所需要的信息。

  16. Range 告知服务器请求资源的制定范围。

  17. Referer 告知服务器请求的原始资源的URI。

  18. TE 告知服务器 客户端能够处理响应的传输编码方式及相对优先级。

  19. User-Agent 会将创建请求的浏览器和用户代理名称等信息传达给服务器。

响应首部字段

  1. Accept-Ranges 告知客户端 服务器是否能处理范围请求。可处理范围请求时指定其为bytes,反之则指定其为none。

  2. Age 告知客户端,源服务器多久前创建了响应。字段值的单位为妙。

  3. Etag 告知客户端实体标识。服务器会为每份资源分配对应的Etag值。当资源更新时,Etag值也需要更新。

Etag值 有强Etag值 和 弱ETag值 之分

强Etag值:无论实体发生多么细微的变化都会改变其值。 Etag:“usagi-1234”

弱Etag值:只用于提示资源是否相同。只有资源发生了根本改变,产生差异时才会改变Etag值。这时,会在字段值最开始处附加W/。 Etag:W/“usagi-1234”

  1. Location 引导至某个与请求URI 位置不同的资源。该字段配合3XX:Redirection 的响应,提供重定向的URI。

  2. Proxy-Authenticate 会把由代理服务器所要求的认证信息发送给客户端。

  3. Retry-After 告知客户端应该多久后再次发送请求。

  4. Server 告知客户端当前服务器安装的HTTP服务器应用程序信息。

  5. Vary 可对缓存进行控制。源服务器会向代理服务器传达关于本子缓存使用方法的命令。

  6. WWW-Authenticate 用于HTTP访问认证。

实体首部字段

  1. Allow 通知客户端能够支持Request-URI 指定资源的所有HTTP方法。 方服务器接收到不支持的HTTP方法时,
    会以状态码405 Method Not Allowed 作为响应返回。

  2. Content-Encoding 告知客户端服务器对实体的主体部分选用的内容编码方式。
    主要包括4种: gzip;compress;deflate;identity。

  3. Content-Lanuage 告知客户单实体主体使用的自然语言(中文 英文等)

  4. Content-Length 表明实体主体部分的大小。

  5. Content-Location 给出报文主体部分相对应的URI。

  6. Content-MD5 一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完成,以及确认传输到达。

  7. Content-Range 告知客户端为响应返回的实体的那个部分符合范围请求。

  8. Content-Type 说明实体主体内对象的媒体类型。

  9. Expires 告知资源失效的日期。和 max-age相比 优先处理max-age。

  10. Last-Modified 指明资源最终修改的时间。

为Cookie服务的首部字段

Set-Cookie 开始状态管理所使用的Cookie信息 响应首部字段
Cookie 服务器接受的Cookie信息

其他请求首部字段

  1. X-Frame-Options 属于HTTP响应首部,用于控制网站内容在其他Web网站的Frame标签内的显示问题。
    主要目的是为了防止点击劫持(clicjacking)攻击。
    两个可指定字段值:* DENY:拒绝 * SAMEORIGIN:仅同源名下的页面匹配时许可。

  2. X-XSS-Protection 属于HTTP响应首部,它是针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器
    XSS防护机制的开关。
    0:将XSS过滤设置为无效状态。
    1:将XSS过滤设置成有效状态。

  3. DNT 属于HTTP请求首部,DNT = Do Not Track 意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法。
    0:同意被追踪
    1:拒绝被追踪

  4. P3P 属于HTTP响应首部,通过利用P3P(The Platform for Privacy Preferences, 在线隐私偏好平台)技术,
    可以让Web网站上的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的。

HTTPS

HTTP报文使用明文方式发送。

  1. 通信加密 HTTP可以通过和SSL或TLS组合使用,加密HTTP的通信内容。
    用SSL简历安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS

  2. 内容加密

HTTP是身披SSL外壳的HTTP。SSL采用一种公开密钥加密的加密处理方式。

确认访问用户身份的认证

HTTP/1.1使用的认证方式

  1. BASIC认证(基本认证) 以 用户名:密码 然后采用Base64编码方式加密。不常用。
  2. DIGEST认证 将密码传输进行MD5加密。
  3. SSL客户端认证 通过SSL客户端证书来认证客户端计算机;通过密码来确认用户本人的行为。
  4. 基于表单认证 并不是HTTP协议中定义的。客户端会向服务器上的Web应用程序发送登录信息,按登录信息的验证结果认证。

认证多半为基于表单认证。

Session管理及Cookie应用,使用Cookie来管理session,以弥补HTTP 协议中不存在的状态管理功能。

HTTP追加协议

SPDY 目标旨在解决HTTP的性能瓶颈,缩短Web页面的加载事假(50%)

  1. Ajax的解决办法 页面局部请求更新。
  2. Comet的解决办法 模拟实现推送功能
  3. SPDY的目标 以新加会话层的形式运作。规定通信中使用SSL。
    增加以下功能: 多路复用流;富裕请求优先级;压缩HTTP首部;推送功能;服务器提示功能。

局限:只是将单个域名(IP地址)的通信多路复用。当一个Web网站使用多个域名下的资源,改善效果就会收到限制。

使用浏览器进行全双工通信的WebSocket

WebSocket 即Web浏览器和Web服务器之间的全双工通信标准。
主要特点:
* 推送功能
* 减少通信量 只要建立起WebSocket连接,就希望一直保持连接状态。
WebSocket的首部信息很小,通信量也相应减少。

为了实现WebSocket通信,在HTTP连接建立之后,需要完成一次“握手”(HandShaking)的步骤。
1. 握手 请求
需要通道HTTP的Upgrade首部字段,告知服务器通信协议发生改变,以达到握手的目的。
* Upgrade:websocket
* Sec-WebSocket-Key: 记录握手过程中必不可少的键值。
* Sec-WebSocket-Protocol : 记录使用的子协议。

  1. 握手 响应
    对于之前的请求,返回状态码101 Switching Protocols的响应。
    HTTP/1.1 101 Switching Protocols
    Sec-WebSocket-Accept 字段值 是根据握手请求中的Sec-WebSocket-Key的字段值生成的。

成功握手后建立WebSocket连接之后,通信时不再使用HTTP的数据帧,而采用WebSocket独立的数据帧。

HTTP/2.0

  1. HTTP Speed + Mobility 用于改善并提高移动端通信时的通信速度和性能的标准。建立在SPDY和WebSocket。
  2. Network-Friendly HTTP Upgrade 主要在移动端通信时改善HTTP性能的标准。

WebDAV

是一个可对Web服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。

构建Web内容的技术

  1. HTML
  2. CSS 指定如何展现HTML内的各种元素。
  3. DOM (Document Object Model)使用DOM可以将HTML内的元素当作对象操作。
    通过调用JavaScript等脚本语言对DOM的操作,可以更为简单的方式控HTML的改变。
  4. Servlet 是一种能在服务器上创建动态内容的程序。是用Java语言实现的一个接口。属于JavaEE。
  5. XML 可拓展标记语言 更容易使用来记录数据。
  6. 发布更新信息的RSS/Atom
  7. JSON 是一种以JavaScript的对象表示法为基础的轻量级数据标记语言。

Web的攻击技术

原创粉丝点击