博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP协议解析
阅读量:2071 次
发布时间:2019-04-29

本文共 3112 字,大约阅读时间需要 10 分钟。

HTTP协议

1.URL

  • 格式:http://host[";"port][abs_path]

2.请求

  • 请求行:请求方法,请求地址
  • 消息报头
  • 请求体

3.响应

  • 状态行:协议版本,状态码
  • 消息报头
  • 响应体

1.方法

  • GET:

GET请求会显示请求指定的资源。一般来说GET方法应该只用于数据的读取,而不应当用于会产生副作用的非幂等的操作中。GET会方法请求指定的页面信息,并返回响应主体,GET被认为是不安全的方法,因为GET方法会被网络蜘蛛等任意的访问。

  • HEAD:

HEAD方法与GET方法一样,都是向服务器发出指定资源的请求。但是,服务器在响应HEAD请求时不会回传资源的内容部分,即:响应主体。这样,我们可以不传输全部内容的情况下,就可以获取服务器的响应头信息。HEAD方法常被用于客户端查看服务器的性能。

  • POST:

POST请求会 向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据会被包含在请求体中。POST方法是非幂等的方法,因为这个请求可能会创建新的资源或/和修改现有资源。

  • PUT:

PUT请求会身向指定资源位置上传其最新内容,PUT方法是幂等的方法。通过该方法客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容。

  • DELETE:

DELETE请求用于请求服务器删除所请求URI(统一资源标识符,Uniform Resource Identifier)所标识的资源。DELETE请求后指定资源会被删除,DELETE方法也是幂等的。

  • CONNECT:

CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。

  • OPTIONS:

OPTIONS请求与HEAD类似,一般也是用于客户端查看服务器的性能。 这个方法会请求服务器返回该资源所支持的所有HTTP请求方法,该方法会用’*'来代替资源名称,向服务器发送OPTIONS请求,可以测试服务器功能是否正常。JavaScript的XMLHttpRequest对象进行CORS跨域资源共享时,就是使用OPTIONS方法发送嗅探请求,以判断是否有对指定资源的访问权限。

  • TRACE:

TRACE请求服务器回显其收到的请求信息,该方法主要用于HTTP请求的测试或诊断。

在HTTP/1.1标准制定之后,又陆续扩展了一些方法。其中使用中较多的是 PATCH 方法:

  • PATCH:

PATCH方法出现的较晚,它在2010年的RFC 5789标准中被定义。PATCH请求与PUT请求类似,同样用于资源的更新。二者有以下两点不同:

但PATCH一般用于资源的部分更新,而PUT一般用于资源的整体更新。

当资源不存在时,PATCH会创建一个新的资源,而PUT只会对已在资源进行更新。

2.状态码

状态码主要是为了告知从服务器端返回的请求结果。

2XX成功

请求正常处理完毕

  • 200 OK 从客户端发送的请求在服务端被正常处理了。 204 No Content
  • 服务器接受的请求已成功处理,但返回的响应报文的主体部分不包含实体(浏览器页面不更新,仅发送信息给服务器) 206 Partial
  • Content 客户端进行了范围请求,而服务器成功执行了这部分请求

3XX重定向

浏览器需要执行某些特殊的处理以正确处理请求。

  • 301 Moved Permanently 永久性重定向,请求的资源已经分配了新的URI,以后应该使用资源现在所指的URI
  • 302 Found 临时性重定向,请求的资源临时分配了新的URI,希望用户本次可以使用新的URI访问
    注意:当301,302,303响应状态码返回时,几乎所有的浏览器会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送
  • 304 Not Modified 服务器端资源未改变,可直接使用客户端未过期的缓存,不包含任何响应的主体部分

4XX客户端错误

客户端是发生错误的原因所在。

  • 400 Bad Request 请求报文中存在语法错误
  • 401 Unauthorized 请求需要有通过HTTP认证的认证信息。另外如果之前已进行一次请求,则表示用户认证失败
  • 403 Forbidden 对请求资源的访问被服务器拒绝了,如未获得文件系统的访问授权,访问权限出现某些问题
  • 404 Not Found 服务器上没有请求的资源
  • 499 client has closed connection 服务器端处理的时间过长,客户端主动断开链接,ngix定义的状态码

5XX服务器错误

服务器是发生错误的原因所在。

  • 500 Internal Server Error 服务器在执行请求时发生了错误,Bug或临时故障
  • 503 Service Unavailable 服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求

3.http缓存

get方法缓存比较多,post方法一般不会缓存,缓存信息在返回的header头部信息里面

时效内缓存:强制缓存

重点:cache-Control:max-age=xxx

非时效缓存:对比缓存

重点:Etag Last-Modified/If-Modified-Since

这个缓存的信息分为两种,一般来说两种都用上也行

  • 时效缓存(强制缓存):

Cache-Control (低版本浏览器用的是Expires,了解即可)是最重要的规则。常见的取值有private、public、no-cache、max-age,no-store,默认为private。

  1. private: 客户端可以缓存
  2. public: 客户端和代理服务器都可缓存(前端的同学,可以认为public和private是一样的)
  3. max-age=xxx: 缓存的内容将在 xxx 秒后失效
  4. no-cache: 需要使用对比缓存来验证缓存数据
  5. no-store: 所有内容都不会缓存,强制缓存,对比缓存都不会触发(对于前端开发来说,缓存越多越好,so…基本上和它说886)
  • 非时效缓存(对比缓存,用的是标识):

它的不是时效时间max-age,第一次请求的时候,返回给客户端数据和缓存的信息,也就是一个特定的缓存标识,客户端把这个缓存标识放到缓存数据库,再次请求时 客户端先把缓存标识也一起发给服务端,进行对比,客户端将备份的缓存标识发送给服务器,服务器根据缓存标识进行判断,判断成功后,返回304状态码,通知客户端比较成功,可以使用缓存数据。

分为两种缓存标识:

  1. Etag (唯一标识)优先级更高
  2. Last-Modified/If-Modified-Since 返回给客户端最后这个资源的修改时间,优先级没有Etag高

Tag/If-Not-Match是在HTTP/1.1出现的,主要是解决以下问题:

(1)、Last-Modified标注的最后修改只能精确到秒级,如果某些文件在1秒钟以内,被修改多次的话,它将不能准确标注文件的修改时间

(2)、如果某些文件被修改了,但是内容并没有任何变化,而Last-Modified却改变了,导致文件没法使用缓存

(3)、有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形

对比缓存标识生效不生效时,状态码200,服务端返回body和header

在对比缓存标识生效时,状态码为304,并且报文大小和请求时间大大减少。
原因是,服务端在进行标识比较后,只返回header部分,通过状态码通知客户端使用缓存,不再需要将报文主体部分返回给客户端。

转载地址:http://iwjmf.baihongyu.com/

你可能感兴趣的文章
PLSQL常用方法汇总
查看>>
几个基本的 Sql Plus 命令 和 例子
查看>>
PLSQL单行函数和组函数详解
查看>>
Oracle PL/SQL语言初级教程之异常处理
查看>>
Oracle PL/SQL语言初级教程之游标
查看>>
Oracle PL/SQL语言初级教程之操作和控制语言
查看>>
Oracle PL/SQL语言初级教程之过程和函数
查看>>
Oracle PL/SQL语言初级教程之表和视图
查看>>
Oracle PL/SQL语言初级教程之完整性约束
查看>>
PL/SQL学习笔记
查看>>
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>
几个简单的SQL例子
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>
AJAX 初次体验!推荐刚学看这个满好的!
查看>>