HTTP协议学习笔记

URL详解

  • http是一个基于请求与相应模式的,无状态的,应用层的协议,常基于TCP链接,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。

  • HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:http://host[“:”port][path]
    其中,http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,若空则使用缺省的80端口;path指定请求资源的URI;如果URL中没有给出path,那么当它作为请求URI时,必须以“/”的形式给出,但通常浏览器会帮我们完成这个工作。比如在浏览器地址栏 输入: www.guet.edu.cn, 浏览器自动换成http://www.guet.edu.cn/


HTTP请求

  • HTTP请求分为三部分,分别是请求行,消息报头,请求正文。

  • 请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:
    Method Request-URI HTTP-Version CRLF
    其中, Method表示请求方法,一般为GET, POST, PUT, DELET;Request-URI是一个统一资源标识符, 例如/index.jsp;HTTP-Version表示请求的HTTP协议版本, 比如HTTP/1.1;CRLF表示回车和换行符(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。请求方法除了上述提到的GET, POST, PUT, DELETE外,还有TRACE, CONNECT,OPTIONS,其各个方法的解释如下:

请求方式 含义
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储的一个资源,并用Request-URI作为标示
DELETE 请求服务器删除Request——URI所标示的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或者诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

HTTP响应

一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。

  • HTTP的响应消息也是由三个部分组成,分别是:状态行、消息报头、响应正文。

  • 状态行格式如下:HTTP-Version Status-Code Reason-Phrase (CRLF)
    其中,HTTP-Version表示服务器HTTP协议的版本, 例如HTTP/1.1;Status-Code表示服务器发回的响应状态代码, 例如200;Reason-Phrase表示状态代码的文本描述,例如OK。

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

HTTP消息报头

不管是请求消息还是响应消息,都由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头,空行(只有CRLF的行),消息正文组成。HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。每一个报头域都是由名字+”:”+值 组成,消息报头域的名字是大小写无关的,域值前可以有任意个空格(但通常会在前面添加一个空格),可以允许多个相同的消息包头。


  • 普通报头
    普通报头中包含请求消息和响应消息都支持的头域,有Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。
    Cache-Control: 用于指定缓存指令。缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制)。

Cache-Control的各种取值的含义

Cache-Control的取值 含义
public 指示响应可被任何缓存区缓存。
Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache 指示请求或响应消息不能缓存
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

  • 响应报头
    响应报头允许服务器传递的附加响应信息,以及关于服务器的状态信息以及对Request-URI所标识的资源进行下一步访问的信息。

常用的响应报头的信息

响应报头 具体含义
Location 用于提示客户端重定向到一个新的位置。Location响应报头域常用在更换域名的时候。
Server 包含了服务器用来处理请求的软件信息。比如Server: Play! Framework; 1.2.3。1.2.3搭建的应用服务程序,该程序处于生产模式。
Connection
Proxy-Connection
Set-Cookie cookie信息

  • 实体报头
    请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(例如有无实体正文)和请求所标识的资源的元信息。

常用的实体报头信息

实体报头的信息 具体含义
Content-Encoding 用于记录文档的压缩方法。比如 Content-Encoding:gzip
Content-Language 描述了资源所用的自然语言。ru没有设置该域, 则认为实体内容将提供给所有的语言阅读
Content-Length 用于指明实体正文的长度,单位字节, 十进制数表示
Content-Type 指明发送给接收者的实体正文的媒体类型,比如Content-Type:text/html;charset=ISO-8859-1, 表示正文是一个html文档,采用ISO-8859-1编码
Last-Modified 用于指示资源的最后修改日期和时间。
Expires 给出响应过期的日期和时间。

为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires指定页面过期的时间。比如Expires:Thu,15 Sep 2006 16:23:12 GMT

HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。例如,为了让浏览器不要缓存页面,我们可以将Expires设为0,jsp中程序如下:response.setDateHeader(“Expires”,”0”);

原文地址:https://www.cnblogs.com/haifeiWu/p/9079575.html