runfast󰀦lynda

学习HTTP协议

HTTP 是什么

HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是用于从服务器传输超文本到本地浏览器的传送协议。 有了这样的 HTTP 协议,这样服务器才可以分析请求,它还可以使浏览器更加高效,使网络传输减少。 它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示等等。

通常,当我们在浏览器中输入一个地址时,浏览器与互联网是这样交互的:

HTTP协议永远都是客户端发起请求,服务器回送响应。 这样就限制了使用 HTTP 协议,无法实现在浏览器没有发起请求的时候,服务器将消息推送给浏览器。 HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

确保 HTTP 安全的 HTTPS

HTTP 协议的实现本是非常简单,不论是谁发送过来的请求都会返回响应, 因此不确认通信方,会存在以下各种隐患。

HTTP + 加密 + 认证 + 完整性包含 = HTTPS

HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL(Secure Socket Layer) 和 TLS(Transport Layer Security)协议代替而已。

通常, HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL 协议这层外壳的 HTTP。 所以 HTTPS 又叫 HTTP over SSL, HTTP over TLS

为什么不一直使用 HTTPS 既然 HTTPS 那么安全可靠,那为何所有的 Web 网站不一直使用 HTTPS?

其中一个原因是,因为与纯文本通信相比,加密通信会消耗更多的 CPU 及内存资源。如果每次通信都加密,会消耗 相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。 除此之外,想要节约购买证书的开销也是原因之一。

Request 请求

我们常常用到的 GET 请求和 POST请求,

当我们在浏览器地址栏里输入一个地址的时候,就是在发起一个 GET 请求。 让浏览器去取这个地址上的资源,超链接的默认行为也是向一个 URL 发送GET请求。 需要注意使用 GET 请求的时候在大小和安全性上有一些限制的。

当我们给服务器发送数据的时候,就用到 POST ,浏览器里 POST 通常被用来:对现有资源的解释;向电子公告栏、新闻组、邮件列表或类似讨论组发信息;提交数据块;通过附加操作来扩展数据库 。

Response 响应

response line:包含了HTTP状态代码

header:包含了关于服务器和这个响应的信息

body:响应的内容

1xx: 服务器正在执行你的请求
2xx: 服务器响应成功
3xx: 这类状态码代表需要客户端采取进一步的操作才能完成请求,通常需要重定向
4xx: 客户端错误
5xx: 服务端错误

Cookie 和 Session都为了用来保存状态信息,都是保存客户端状态的机制, 它们都是为了解决HTTP无状态的问题的。

Session机制是一种服务器端的机制,当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。

cookie 就是在一个请求/响应周期内,服务器发送给客户端(通常就是浏览器),并存储在客户端的一段数据。服务器在响应消息中用Set-Cookie头将Cookie的内容回送给客户端, 客户端在新的请求中将相同的内容携带在Cookie头中发送给服务器。从而实现会话的保持。

Cookie和Session的不同点

AJAX

AJAX 是“异步 javascript 和 XML ”的简称,它的主要特点就是允许浏览器发送请求和处理响应的时候不用刷新整个页面。触发一个 AJAX 请求通常会执行回调函数来处理。回调函数是之前定义好的,可能它会更新内容部分,可能它会弹出有用的信息。