diff --git a/docs/chapter02.md b/docs/chapter02.md index 20e0f85..7be4c92 100644 --- a/docs/chapter02.md +++ b/docs/chapter02.md @@ -17,6 +17,7 @@ - URN = Uniform Resource Name 统一资源名称 > 指的是资源而不指定其位置或是否存在. URN 的一个最好的例子是 ISBN 号,它被用来唯一地识别一本书。URN 与 URL 完全不同,因为它不包含任何协议。 +三者的关系图示: ![](./resources/uri-url-urn.png) --- @@ -58,16 +59,23 @@ URL示例分析: 动态页面交互过程: ![](./resources/web_application_with_html_and_steps.png) - - -#### 2.1.3 HTTP请求与响应包结构 +#### 2.1.3 HTTP请求包结构 [HTTP 消息结构](https://www.runoob.com/http/http-messages.html) -#### 2.1.4 HTTP方法 +![](./resources/imgs/http-request-struct.png) + +#### 2.1.4 HTTP请求方法 [HTTP 请求方法](https://www.runoob.com/http/http-methods.html) -#### 2.1.5 HTTP状态码 +#### 2.1.5 HTTP请求头 +[HTTP Request Header 请求头](https://stackoverflow.org.cn/httpheader/) + +#### 2.1.6 HTTP响应包结构 + +![](./resources/imgs/http-response-struct.png) + +#### 2.1.7 HTTP状态码 - **2xx 成功:** 请求已成功被服务器接收、理解,并接受。 - **200 OK:** 请求已成功,请求所希望的响应头或数据体将随此响应返回。 - **3xx 重定向:** 需要客户端采取进一步的操作才能完成请求。 @@ -81,15 +89,59 @@ URL示例分析: - **5xx 服务器错误:** 服务器在处理请求的过程中发生了错误。 - **500 Internal Server Error:** 服务器遇到某种不可预知的情况。 - **503 Service Unavailable:** 由于临时的服务器维护或者过载,服务器当前无法处理请求。 +#### 2.1.8 HTTP请求头 +[HTTP Response Header 响应头](https://stackoverflow.org.cn/httpheader/) -#### 2.1.6 Cookie和Session -- **Cookie:** - - 存储在客户端的小型文本文件,用于跟踪用户状态。 - - 可以设置有效期、路径、域名、安全标志等属性。 -- **Session:** - - 服务器端用来跟踪用户状态的一种机制。 - - Session 通常使用Cookie来传递Session ID。 - - 服务器通过Session ID来查找与特定用户相关的数据。 +#### 2.1.9 Cookie + +参考阅读: [HTTP Cookie](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies) + +HTTP 是无状态协议,说明它不能以状态来区分和管理请求和响应。也就是说,无法根据之前的状态进行本次的请求处理。 +而在实际应用中我们又希望能够保持用户的状态,为解决这个问题,Cookie诞生了,在保留无状态协议这个特征的同时又要解决类似记录状态的矛盾问题。 + +HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据。浏览器会存储 cookie 并在下次向同一服务器再发起请求时携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器——如保持用户的登录状态。Cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能。 + +Cookie 主要用于以下三个方面: + +- 会话状态管理 +> 如用户登录状态、购物车、游戏分数或其他需要记录的信息 +- 个性化设置 +> 如用户自定义设置、主题和其他设置 +- 浏览器行为跟踪 +> 如跟踪分析用户行为等 + +**创建 Cookie** + +服务器收到 HTTP 请求后,服务器可以在响应标头里面添加一个或多个 Set-Cookie 选项。浏览器收到响应后通常会保存下 Cookie,并将其放在 HTTP Cookie 标头内,向同一服务器发出请求时一起发送。你可以指定一个过期日期或者时间段之后,不能发送 cookie。你也可以对指定的域和路径设置额外的限制,以限制 cookie 发送的位置。关于下面提到的头部属性的详细信息,请参考 Set-Cookie 文章。 + +服务器使用 Set-Cookie 响应头部向用户代理(一般是浏览器)发送 Cookie 信息。这指示服务器发送标头告知客户端存储一对 cookie: +```http +HTTP/1.0 200 OK +Content-type: text/html +Set-Cookie: yummy_cookie=choco +Set-Cookie: tasty_cookie=strawberry + +``` +现在,对该服务器发起的每一次新请求,浏览器都会将之前保存的 Cookie 信息通过 Cookie 请求头部再发送给服务器。 +```http +GET /sample_page.html HTTP/1.1 +Host: www.example.org +Cookie: yummy_cookie=choco; tasty_cookie=strawberry +``` + +#### 2.1.10 Session + +Session表示会话,服务器端用来跟踪用户状态的一种机制。在java web中session是一个存储在WEB服务器端的java对象,该对象代表用户和WEB服务器的一次会话。 +> 那什么才叫一次会话呢? +>> 一般多数情况下,是这样描述的:用户打开浏览器,在浏览器上进行一些操作,然后将浏览器关闭,表示一次会话结束。 +>> +>> 本质上的描述:从session对象的创建,到最终session对象超时之后销毁,这个才是真正意义的一次完整会话。 + +**Session的工作原理与限制** +- 服务器端用来跟踪用户状态的一种机制。 +- Session 通常使用Cookie来传递Session ID。 +- 服务器通过Session ID来查找与特定用户相关的数据。 +- session的使用要求用户浏览器必须支持cookie,如果浏览器不支持使用cookie,或者设置为禁用cookie,那么将不能使用session。 ### 2.2 HTML/CSS/JavaScript基础 diff --git a/docs/resources/imgs/http-request-struct.png b/docs/resources/imgs/http-request-struct.png new file mode 100644 index 0000000..6ced8a5 Binary files /dev/null and b/docs/resources/imgs/http-request-struct.png differ diff --git a/docs/resources/imgs/http-response-struct.png b/docs/resources/imgs/http-response-struct.png new file mode 100644 index 0000000..0496144 Binary files /dev/null and b/docs/resources/imgs/http-response-struct.png differ