HTTP协议学习笔记

来源:互联网 发布:淘宝麦麦网 编辑:程序博客网 时间:2024/06/07 03:53

1. HTTP简介

超文本传输协议(HyperText Transfer Protocol,即HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)

2.HTTP版本

  • HTTP/0.9

    已过时。只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。
  • HTTP/1.0

    19965月,HTTP/1.0 版本发布可以传输文字,还能传输图像、视频、二进制文件除了GET命令,还引入了POST命令和HEAD命令HTTP请求和回应的格式也变了。除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据。其他的新增功能还包括状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等
  • HTTP/1.1

        19971月,HTTP/1.1 版本发布,只比 1.0 版本晚了半年。它进一步完善了 HTTP 协议,一直用到了20年后的今天,直到现在还是最流行的版本。默认采用持久连接,并能很好地配合代理服务器工作。支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。新增了许多方法:PUT、PATCH、HEAD、 OPTIONSDELETE
  • HTTP/2

    当前版本,于2015年5月作为互联网标准正式发布

3.HTTP请求
HTTP请求信息由3部分组成:

  • 请求行

    请求行包括:请求方法 请求URI 协议/版本GET /blog/2016/08/http.html HTTP/1.1
  • 请求头

    Host: www.ruanyifeng.comConnection: keep-aliveCache-Control: max-age=0Accept: text/html,Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.8
  • 请求正文(可选)

    当遇到连续两个\r\n时,请求头部结束,后面的数据全部是请求正文eg:username=jinqiao&password=1234   

4.HTTP响应
HTTP响应信息由3部分组成:

  • 状态行

    HTTP/1.1 200 OK
  • 消息报头

    Date: Sat, 14 Oct 2017 05:02:45 GMTServer: ApacheLast-Modified: Fri, 13 Oct 2017 08:01:00 GMTETag: "17923-55b690eb52700-gzip"Accept-Ranges: bytesVary: Accept-EncodingContent-Encoding: gzipContent-Length: 26949Keep-Alive: timeout=5, max=100Connection: Keep-AliveContent-Type: text/html
  • 响应正文(可选)

    <DOCTYPE html><html>    <head>        <title>demo</title>    </head>    <body>        <p>this is a demo</p    </body></html>

5.请求方法

  • GET

    向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,
  • HEAD

    GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
  • POST

    向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
  • PUT

    向指定资源位置上传其最新内容。
  • DELETE

    请求服务器删除Request-URI所标识的资源。
  • TRACE

    回显服务器收到的请求,主要用于测试或诊断
  • OPTIONS

    这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
  • CONNECT

    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)

6.请求头部

字段 说明 Content-Type 是返回消息中非常重要的内容,表示后面的文档属于什么MIME类型。Content-Type: [type]/[subtype]; parameter。例如最常见的就是text/html,它的意思是说返回的内容是文本类型,这个文本又是HTML格式的。原则上浏览器会根据Content-Type来决定如何显示返回的消息体内容 Referer 包含一个URL,用户从该URL代表的页面出发访问当前请求的页面 User-Agent 浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用 Host 指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回 Cookie 这是最重要的请求头信息之一 Accept 浏览器可接受的MIME类型 Accept-Charset 浏览器可接受的字符集 Accept-Encoding 浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间 Accept-Language 浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到 Authorization 授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中 Connection 表示是否需要持久连接。如果Servlet看到这里的值为“Keep- Alive”,或者看到请求使用的是HTTP1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小 Content-Length 表示请求消息正文的长度 Host 初始URL中的主机和端口 If-Modified-Since 只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答 Pragma 指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝

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

具体状态码

代码 说明 200 OK 客户端请求成功 301 redirect: 301 代表永久性转移(Permanently Moved) 302 redirect: 302 代表暂时性转移(Temporarily Moved ) 400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。 401 Unauthonzed 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因 404 Not Found 请求的资源不存在,例如,输入了错误的URL。 500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。 503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常

参考文章

https://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE

http://www.ruanyifeng.com/blog/2016/08/http.html

http://blog.csdn.net/zhangliang_571/article/details/23508953

https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832653051fd44e44e4f9e4ed08f3e5a5ab550358d000

原创粉丝点击