每周分享之 二 http协议(2)

时间:2020-12-23 09:12:14

本次分享http协议,共分为三部分,这是第二部分,主要讲解请求与响应的字段,以及状态码。

以http/1.1版本的一个完整的请求与响应作为例子

http请求信息由三部分组成

1、请求方法(GET/POST)、URI、协议/版本

2、请求头(Request Header)

3、请求正文

  eg:

    GET /form.html HTTP/1.1 (CRLF)
    Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-      powerpoint,application/msword,*/* (CRLF)
    Accept-Language:zh-cn (CRLF)
    Accept-Encoding:gzip,deflate (CRLF)
    If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
    If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
    User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
    Host:www.guet.edu.cn (CRLF)
    Connection:Keep-Alive (CRLF)
    (CRLF)

  第一行分别为  请求方法GET  URL:form.html  协议版本:HTTP/1.1

  第二行    Accept:声明可以接收哪些数据格式

  第三行    Accept-Language:声明可以支持什么语言

  第四行    Accept-Encoding:声明支持的编码格式

  第五行    If-Modified-Since:声明该文件的最后修改时间

  第六行    If-None-Match:用来判断当前请求的资源是否改变

  第七行    User-Agent:用户代理,存储一些浏览器信息以及系统信息

  第八行    Host:请求资源所在的服务器

  第八行    Connection:声明是持久连接

  CRLF     回车换行

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

这里是常用的请求字段解释

  Accept                        用户代理可处理的媒体类型

  Accept-Charset              优先的字符集

  Accept-Encoding            优先的内容编码

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

  Authorization                Web认证信息

  Expect                        期待服务器的特定行为

  From                          用户的电子邮箱地址

  Host                          请求资源所在服务器

  If-Match                      比较实体标记(ETag)

  If-Modified-Since            比较资源的更新时间

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

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

  If-Unmodified-Since        比较资源的更新时间(与If-Modified-Since相反)

  Max-Forwards                 最大传输逐跳数

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

  Range                         实体的字节范围请求

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

  TE                            传输编码的优先级

  User-Agent                    HTTP 客户端程序的信息

HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是:

  1、状态行

  2、响应头(Response Header)

  3、响应正文

eg:

  HTTP/1.1 200 OK   
  Server: nginx
  Date: Tue, 31 May 2016 02:09:24 GMT
  Content-Type: application/json;charset=UTF-8
  Connection: keep-alive
  Vary: Accept-Encoding
  Access-Control-Allow-Origin: *
  Access-Control-Allow-Headers: X-Requested-With,access_token,access-token,content-type,multipart/form-data,application/x-www-form- urlencoded
  Access-Control-Allow-Methods: GET,POST,OPTIONS
  Content-Length: 49

  {"resultCode":1,"resultMsg":"手机号未注册"}

  第一行:  协议版本http/1.1  状态码 200  状态描述   OK

  第二行:  告知客户端当前服务器上安装的http服务器应用程序的信息。其中包含软件应用名称,甚至版本号和安装时的启动项

  第三行:  响应时间

  第四行:  实体主体的媒体类型

  第五行:  声明长连接

  第六行:  控制缓存的管理信息

  第七行:  声明允许任何

  第八行:  声明允许任何人访问

  第九行:  设置允许访问的请求方法

  第十行:  指明正文长度

  空行:   表明响应头结束

  响应正文

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

下面是一些常见的响应字段

  Accept-Ranges                 是否接受字节范围请求
  Age                               推算资源创建经过时间
  ETag                              资源的匹配信息
  Location                          令客户端重定向至指定URI
  Proxy-Authenticate           代理服务器对客户端的认证信息
  Retry-After                     对再次发起请求的时机要求
  Server HTTP                     服务器的安装信息
  Vary                              代理服务器缓存的管理信息
  WWW-Authenticate            服务器对客户端的认证信息

  Allow                             资源可支持的HTTP方法
  Content-Encoding             实体主体适用的编码方式
  Content-Language            实体主体的自然语言
  Content-Length                实体主体的大小(单位:字节)
  Content-Location             替代对应资源的URI
  Content-MD5                   实体主体的报文摘要
  Content-Range                 实体主体的位置范围
  Content-Type                  实体主体的媒体类型
  Expires                           实体主体过期的日期时间
  Last-Modified                  资源的最后修改日期时间

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

响应状态码详解

  状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
  1xx:指示信息--表示请求已接收,继续处理
  2xx:成功--表示请求已被成功接收、理解、接受
  3xx:重定向--要完成请求必须进行更进一步的操作
  4xx:客户端错误--请求有语法错误或请求无法实现
  5xx:服务器端错误--服务器未能实现合法的请求

常见的状态码详解

  100 Continue 继续。客户端应继续其请求。

  101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议

  200 OK 表示从客户端发来的请求在服务器端被正常处理了。

   204 No Content 该状态码表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。比如,当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面不发生更新

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

  301 Moved Permanently 永久性重定向。该状态码表示请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI。 像下方给出的请求URI,当指定的资源路径的最后忘记添加斜杠"/",就会产生301状态码

  302 Found 临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。

  303 See Other 该状态码表示由于请求对应的资源存在另外一个URI,应使用GET方法定向获取请求的资源。 303状态码和302状态码有着相同的功能,但303状态码明确表明客户端应当采用GET方法获取资源。 当301,302,303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文的主体,之后请求会自动再次发送。 301,302标准是禁止将POST方法改变成GET方法的,但实际上使用时大家都会这么做。

  304 Not Modified 该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3XX类别中,但是和重定向没有关系。

  307 Temporary Redirect 临时重定向。该状态码与302 Found有着相同的含义。307会遵照浏览器标准,不会从POST变成GET。

  400 Bad Request 该状态码表示请求报文中存在语法错误。当错误发生时,需要修改请求的内容后再次放松请求。

  401 Unauthorized 该状态码表示发送的请求需要有通过HTTP认证的认证信息,另外若之前已进行过1此请求,则表示用户认证失败。

  403 Forbidden 该状态码表明对请求资源的访问被服务器拒绝了。

  404 Not Found 该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。

  500 Internal Server Error 该状态码表明服务器端在执行请求时发生了错误。

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