本次分享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 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

每周分享之 二 http协议(2)的更多相关文章

  1. 每周分享之 二 http协议(1)

    本次分享http协议,共分为三部分,这是第一部分,主要讲解http的发展历程,各个版本,以及各个版本的特点. 一:http/0.9 最早版本是1991年发布的0.9版.该版本极其简单,只有一个命令GE ...

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

    本次分享http协议,共分为三部分,这是第三部分,主要讲解一个完整的http请求都经过哪些步骤,当我们在地址栏中输入网址,到返回页面都经历了什么 1.输入网址 当我们在浏览器中输入网址的时候,浏览器就 ...

  3. 每周分享五个 PyCharm 使用技巧(二)

    这是 「PyCharm 技巧分享」系列的第二篇分享.由于上一篇文章得到了大家的一些赞同,所以今天又来给大家推荐一些我平时自己有用的小技巧,大家择需所取即可. 先声明下,并不保证对所有的人都是有帮助的, ...

  4. 关于启用 HTTPS 的一些经验分享(二)

    转载: 关于启用 HTTPS 的一些经验分享(二) 几天前,一位朋友问我:都说推荐用 Qualys SSL Labs 这个工具测试 SSL 安全性,为什么有些安全实力很强的大厂家评分也很低?我认为这个 ...

  5. 每周分享五个 PyCharm 使用技巧(一)

    PyCharm 是大多数 Python 开发者的首选 IDE,每天我们都在上面敲着熟悉的代码,写出一个又一个奇妙的功能. 一个每天都在使用的工具,如果能掌握一些高效的使用技巧,肯定会给我们的开发效率带 ...

  6. 每周分享五个 PyCharm 使用技巧(六)

    大家好,今天我又来给大家更新 PyCharm 的使用技巧. 从今年3月24号开始一直到今天,将近四个月的时间.包括本篇,一共更新了6篇文章,每篇 5 个小技巧,总计 30 个. 这30个使用技巧,全部 ...

  7. 每周分享五个 PyCharm 使用技巧(四)

    文章首发于 微信公众号:Python编程时光 PyCharm 是大多数 Python 开发者的首选 IDE,每天我们都在上面敲着熟悉的代码,写出一个又一个奇妙的功能. 一个每天都在使用的工具,如果能掌 ...

  8. 每周分享五个 PyCharm 使用技巧(三)

    文章首发于 微信公众号:Python编程时光 PyCharm 是大多数 Python 开发者的首选 IDE,每天我们都在上面敲着熟悉的代码,写出一个又一个奇妙的功能. 一个每天都在使用的工具,如果能掌 ...

  9. .net之工作流工程展示及代码分享(二)工作流引擎

    在介绍完表单类的时候,接下来介绍工作流引擎,主要由四个类组成,分别是流程.流程步骤.流程实例.流程步骤实例类. 流程类: [Serializable] public class Flow { [Xml ...

随机推荐

  1. python基础学习(十三)

    re模块包含对 正则表达式.本章会对re模块主要特征和正则表达式进行介绍. 什么是正则表达式 正则表达式是可以匹配文本片段的模式.最简单的正则表达式就是普通字符串,可以匹配其自身.换包话说,正则表达式 ...

  2. 32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式

    32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式 一丶RadAsm的配置和使用 用了怎么长时间的命令行方式,我们发现了几个问题 1.没有代码提醒功能 2.编写代码很慢,记不住各 ...

  3. Java线程:线程栈模型

    要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型. 线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶.线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须选择一个运 ...

  4. mysql时间戳的获取

    时间戳函数:current_timestamp() 在此位置添加时间戳函数. 然后整体的写法就是下图这样: 根据当前时间戳更新有没有打钩将决定你的时间是什么时间(一个是数据完成写入的时间,一个时间戳回 ...

  5. Java 多线程(三) 线程的生命周期及优先级

    线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处 ...

  6. tomcat学习笔记

    1.安装和运行[必须] * 解压apache-tomcat-6.0.35.zip * 位置:不能包含中文和空格 * 运行: %tomcat%/bin/startup.bat * 测试 * http:/ ...

  7. 【2017集美大学1412软工实践_助教博客】个人作业3——个人总结(Alpha阶段)

    题目 个人作业3--个人总结(Aplha阶段) 成绩公示 评分项 alpha过程的总结 5个问题 自我评价表 评论区互动 总分 分值 4 2.5 2.5 1 10 201221123032 1 1 2 ...

  8. 201521123057 《Java程序设计》 第7周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 答:源代码: pub ...

  9. 201521123038 《Java程序设计》 第五周学习总结

    201521123038 <Java程序设计> 第五周学习总结 1. 本周学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.ja ...

  10. 201521123099《java程序设计》第五周学习总结

    本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现 ...