HTTP 协议:
超文本传输协议是互联网上应用最为广泛的一种网络协议 https 是以安全为目标的 http 通道, 就是 http 的安全版.
为什么会有这个协议呢?
为了建立客户端与服务器的连接, 让两者进行沟通(自我理解: 让计算机按照规矩说话, 你问我答, 你怎么问我怎么答, 否则计算机会各说各话没办法沟通)
http 是通过报文进行沟通的:
请求报文: 请求头, 请求行, 请求体
响应报文: 响应头, 响应行, 响应体
请求头:
Accept: 指定客户端能够接收的内容类型
Cache-Control: 指定请求和响应遵循的缓存机制
Cookie: HTTP 请求发送时, 会把保存在该请求域名下的所有 cookie 值一起发送给 web 服务器
Date: 请求发送的日期和时间
If-None-Match: 匹配 etag, 如果它修改了就不取缓存
If-Modified-Since: 将之前服务器端发送过来的最后修改时间戳发送回去
请求行: 请求方法(常用的 post 和 get), 请求地址(url), 请求协议及版本(HTTP/1.1)
请求体: 就像用 post 表单传递数据如: name=aimee age=18 name=aimee&age=18 会出现在请求体中
响应行: 响应协议及版本号 (HTTP/1.1), 响应状态码(200) 响应状态文字(ok)
响应头: Allow: 对于特定资源的有效动作 ,Connection: 针对该链接所预期的选项
响应体: 就是我们请求回来的数据
状态码:
1xx 接到请求继续处理
2xx 成功
3xx 重定向
4xx 客户端错误
5xx 服务器错误
常见的状态码 :
成功状态码: 200 表示成功, 301/302 临时 / 永久重定向 304 资源未被修改
失败状态码: 404 请求内容不存在, 500 服务器暂时不可用, 503 服务器内部错误
请求方法 get 和 post 的区别:
get 使用 url 或 cookie 传参, 而 post 将数据放在 body 中
get 的 url 有长度上的限制, post 可以传很多的数据
post 比 get 安全
HTTP 缓存:
HTTP 缓存机制是 web 性能优化的重要手段, HTTP 缓存有多种规则, 根据是否需要重新向服务器发送请求来分类, 将其分为两大类: 强制缓存, 对比缓存.
强制缓存的意思就是浏览器在缓存过期之前只会使用浏览器缓存的文件, 不会发送 HTTP 请求, 对比缓存的意思先请求服务器判断浏览器缓存是否有效, 然后再决定是否使用浏览器缓存.
强制缓存怎么判断缓存数据是否过期:
在没有缓存数据的时候, 浏览器向服务器请求数据时, 服务器会将数据和缓存规则一并返回, 缓存规则信息包含在响应头中, 对于强制缓存来说, 响应头中有两个字段来标 明过期规则: Expires 或 Cache-Control, 不过 Expires 是 HTTP1.0 的东西现在默认浏览器默认使用 HTTP1.1 所以它的作用基本忽略. HTTP1.1 版本使用 Cache-Control
Cache-Control 是最重要的规则, 常见取值有:
private: 客户端可以缓存
public: 客户端和代理服务器都可以缓存
max-age=xxx: 缓存内容将在 xxx 秒后失效
no-cache: 需要使用对比缓存来验证缓存数据
no-store: 所有的内容都不会缓存, 强制缓存, 对比缓存都不会触发
对比缓存也有两种类型: Etag/If-None-Match 和 If-Modified-Since/Last-Modified
Etag : 服务器响应请求时, 告诉浏览器当前资源在服务器的唯一标识
Last-Modified: 服务器最后修改的时间, 和 Etag 配合使用
If-None-Match: 再次请求服务器时, 通过此字段通知服务器客户端缓存数据的唯一标识.
Last-Modified-since : 再次请求服务器时, 通过此字段通知服务器上次请求时, 服务器返回的资源的最后修改时间.
Etag 和 If-None-Match 的工作原理是在 HTTP Response 中添加 ETags 信息. 当客户端再次请求该资源的时, 将在 HTTP Resquest 中加入 If-None-Match 信息(Etag 的值), 如果服务器验证资源的 Etags 没有改变(该资源没有改变), 将返回一个 304 状态, 否则服务器将返回 200 状态, 并返回该资源和新的 Etags
当在浏览器下输入一个 url 发生了什么:
1. 浏览器通过 DNS 域名解析到服务 IP
DNS: 它可以将域名和 IP 地址相互映射的一个分布式数据库, 能够使人更方便的访问互联网, 而不用去记住能够被机器直接读取的 IP 地址数串.
IP 地址: 是 Internet 主机的作为路由寻址用的数字体标识, 人不容易记忆. 因而产生了域名这一种字符型标识.
2. 客户端通过 TCP 协议建立到服务器的 TCP 连接
TCP 协议(传输层协议): 在正式收发数据前, 必须要和对方建立可靠的连接. 一个 TCP 连接要经过三次'对话'才能建立起来.
UDP 协议: 面向非连接的协议, 就是在正式通信前不必与对方先建立连接, 不管对方状态就直接发送, 我觉得这个与手机短信非常相似, 在发短信的时候, 只需要输入对方的手机号就可以啦
3. 客户端向服务器端发送 http 协议包, 请求服务器的资源文档
4. 服务器向客户端发送 http 协议应答包
5. 客户端和服务器断开, 客户端开始解释处理 html 文档
不定期更新的新问题(http 协议当你在浏览器里输入一个 url 后发生了什么?)
来源: http://www.bubuko.com/infodetail-2588326.html