JavaEE学习笔记(一)HTTP理论基础

一、HTTP概述

1.1. 请求

所有从客户端发起的请求,以及相关信息,必然全部从哪里获取?

所有的信息都要从request里面获取。输入流来获取。

通过代理可以绕过防火墙访问网址

1.2. 响应

到底响应什么,由谁决定?

都由response决定,借助于IO流完成

JavaEE学习笔记(一)HTTP理论基础

JavaEE学习笔记(一)HTTP理论基础

1.3. headers

它可以影响浏览器行为(请求和响应一致才会出结果)

只要服务端和客户端就新 headers 达成语义一致,新功能就可以被轻松加入进来。

1.4. HTTP是无状态的,有会话的

HTTP无状态:在同一个连接中,两个执行成功的请求之间是没有关系的。

JavaEE学习笔记(一)HTTP理论基础

客户端技术 HTTP Cookies :可以实现会话一致

会话相当于网页版的电商网站需要登陆一样,登陆后才会将属于你的数据返回给你

1.5. HTTP能控制什么

  • 缓存
    • 文档如何缓存能通过HTTP来控制。服务端能告诉代理和客户端哪些文档需要被缓存,缓存多久,而客户端也能够命令中间的缓存代理来忽略存储的文档。
    • 缓存相当于页面中固定或者长时间存在的数据
  • 开放同源限制
    • 为了防止网络窥听和其它隐私泄漏,浏览器强制对Web网站做了分割限制。只有来自于相同来源的网页才能够获取网站的全部信息。这样的限制有时反而成了负担,HTTP可以通过修改头部来开放这样的限制,因此Web文档可以是由不同域下的信息拼接成的(某些情况下,这样做还有安全因素考虑)。
  • 认证
    • 一些页面能够被保护起来,仅让特定的用户进行访问。基本的认证功能可以直接通过HTTP提供,使用Authenticate相似的头部即可,或用HTTP Cookies来设置指定的会话。
    • 特定的用户进行访问:eg:网页只允许局域网内的用户才可访问
  • 代理和隧道
    • 通常情况下,服务器和/或客户端是处于内网的,对外网隐藏真实 IP 地址。因此 HTTP 请求就要通过代理越过这个网络屏障。但并非所有的代理都是 HTTP 代理。例如,SOCKS协议的代理就运作在更底层,一些像 FTP 这样的协议也能够被它们处理。
  • 会话
    • 使用HTTP Cookies允许你用一个服务端的状态发起请求,这就创建了会话。虽然基本的HTTP是无状态协议。这很有用,不仅是因为这能应用到像购物车这样的电商业务上,更是因为这使得任何网站都能轻松为用户定制展示内容了。

二、HTTP流

当客户端想要和服务端进行信息交互时(服务端是指最终服务器,或者是一个中间代理),过程表现如下图

JavaEE学习笔记(一)HTTP理论基础

last-Modified:最后一次修改的时间

三、HTTP报文

HTTP/1.1以及更早的HTTP协议报文都是语义可读的。在HTTP/2中,这些报文被嵌入到了一个新的二进制结构,帧。帧允许实现很多优化,比如报文头部的压缩和复用。即使只有原始HTTP报文的一部分以HTTP/2发送出来,每条报文的语义依旧不变,客户端会重组原始HTTP/1.1请求。因此用HTTP/1.1格式来理解HTTP/2报文仍旧有效。

有两种HTTP报文的类型,请求与响应,每种都有其特定的格式。