JavaWeb之HTTP协议

HTTP协议

HTTP概念

  1. 概念:Hyper Text Transfer Protocol 超文本传输协议
    • 传输协议:定义了,客户端和服务器端通信时,发送数据的格式

    • 特点:

      1. 基于TCP/IP的高级协议
      2. 默认端口号:80
      3. 基于请求/响应模型的:一次请求对应一次响应
      4. 无状态的:每次请求之间相互独立,不能交互数据
    • 历史版本:

      • 1.0:每一次请求响应都会建立新的连接,资源消耗过大
      • 1.1:复用连接,解决了1.0存在的资源浪费问题

HTTP请求

概念:客户端发送给服务器端的数据。

  1. 请求数据格式

    1. 请求行

      1. 格式:请求方式 /请求url 请求协议/1.1
        POST /login.html HTTP/1.1
      2. 请求方式:
        HTTP有7中请求方式:常见的有POST和GET请求
        1. GET:
          1. 请求参数在在请求行中,在url后
          2. 请求url有长度限制
          3. 不太安全
        2. POST:
          1. 请求参数在请求体中
          2. 请求url有长度没有限制
          3. 相对安全
    2. 请求头:客户端浏览器告诉服务器一些信息
      请求头名称:请求头值

      1. 常见的请求头:
        1. User-Agent:浏览器告诉服务器,我使用的浏览器版本信息
          可以在服务器端获取该头信息,解决浏览器兼容性问题
        2. Referer:http://localhost/login.html
          告诉服务器我(当前请求)从哪里来?
          1. 作用:
            1. 防止盗用链接
            2. 统计工作
    3. 请求空行

      1. 用于分割POST请求信息的请求头和请求体的
    4. 请求体(正文内容)

      1. 封装POST请求参数的信息
    5. 其它请求头数据

      1. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
        浏览器告诉服务器浏览器可以解析服务器什么样的数据
      2. Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
        浏览器告诉服务器它支持的语言
      3. Connection:keep-alive
        连接状态信息,HTTP 1.1所支持
        根据不同版本的的HTTP协议而不同,有以下两个版本:
        1.0:每一次请求响应都会建立新的连接,资源消耗过大
        1.1:复用连接,解决了1.0存在的资源浪费问题
  2. 请求数据字符串格式

		POST /login.html	HTTP/1.1
		Host: localhost
		User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
		Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
		Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
		Accept-Encoding: gzip, deflate
		Referer: http://localhost/login.html
		Connection: keep-alive
		Upgrade-Insecure-Requests: 1
		
		username=zhangsan	

HTTP响应

概念:服务端响应客户端发送的数据。

  1. 响应数据格式
    1. 响应行

      1. 组成:协议/版本号 状态码 状态码描述
      2. 响应状态码:服务器端告诉客户端本次请求和响应的一个状态。
        1. 状态码都是3位数
        2. 分类:
          1. 1xx:服务器接收客户端消息,但没有接收完成,等待一段时间发送给客户端1xx的状态码
          2. 2xx:成功。代表:200
          3. 3xx:重定向。代表302(重定向),304(访问缓存)
          4. 4xx:客户端错误。
            代表:
            1. 404:(客户端请求路径没有对应资源)
            2. 405:请求方法服务器端没有对应的doXxx方法
          5. 5xx:服务器端错误。代表500(服务器内部出现异常)
    2. 响应头
      常见的响应头:

      1. Content-Type:服务器告诉客户端本次响应数据格式及编码格式
        高级浏览器都会进行自动匹配解析。
      2. Content-disposition:服务器告诉客户段以什么格式打开响应体数据
        取值:
        1. in-line:默认值,在当前页面打开
        2. attachment:filename=xxx,以附件形式打开响应体,如平时遇到的点击下载弹出的小框框,
    3. 响应空行

    4. 响应体
      服务器返回的html界面或图片等数据

名词解释

  1. 重定向:例如客户端A,请求服务器C资源的文件f,此时访问路径却是访问A资源,服务器此时就会发送302(重定向码)告诉客户端访C资源的由文件f,并携带着C资源的访问路径。

  2. 访问缓存:服务端对客户端请求的数据进行分析,如果满足该资源在服务器本地没有发送变化,而且该资源客户端已经访问并缓存到本地了,此时就会发送304(访问换成状态码)告诉客户端,以节约请求资源的浪费。

  3. 响应数据字符串格式

		HTTP/1.1 200 OK
		Content-Type: text/html;charset=UTF-8
		Content-Length: 101
		Date: Wed, 06 Jun 2018 07:08:42 GMT

		<html>
		  <head>
		    <title>$Title$</title>
		  </head>
		  <body>
		  hello , response
		  </body>
		</html>