一篇文章让你重学 HTTP!
http 和 https 有什么区别?
HTTP
超文本传输协议(HTTP)(HyperText Transfer Protocol)
是用于传输诸如 HTML 的超媒体文档的应用层协议,是互联网上应用最为广泛的一种网络协议。
HTTPS
HTTPS(Hypertext Transfer Protocol Secure)(安全的 HTTP)是 HTTP 协议加密版本
它通常使用 SSL 或者 TLS 来加密客户端和服务器之间的所有通信。是以安全为目标的 HTTP 通道。
HTTP(请求报文,响应报文)
HTTP 通过报文进行沟通
请求报文
客户端向服务器发起请求时会生成一段请求报文,请求报文是由请求方法,URL,协议版本,可选的请求首部字段和内容实体构成。
一旦连接建立,用户代理可以发送请求(用户代理通常是 Web 浏览器,但也可以是其他的(例如爬虫))。
客户端请求由一系列文本指令组成,并使用 CRLF 分隔,它们被划分为三个块:
第一行包括请求方法及请求参数
文档路径,不包括协议和域名的绝对路径 URL
使用的 HTTP 协议版本
接下来的行每一行都表示一个 HTTP 首部,为服务器提供关于所需数据的信息(例如语言,或 MIME 类型),或是一些改变请求行为的数据(例如当数据已经被缓存,就不再应答)。这些 HTTP 首部组成一个空行结束的一个块。
最后一行是可选数据块,包含更多数据,主要被 POST 方法所使用
响应报文
接收到请求的服务器,会将请求内容的处理结构以响应的形式返回。响应报文基本上由协议版本,状态码,用以解释状态的原因短语,可选的响应首部字段以及实体主体构成。
当收到用户代理发送的请求后,Web 服务器就会处理它,并最终送回一个响应。
与客户端请求很类似,服务器响应由一系列文本指令组成,并使用 CRLF 分隔,它们被划分为三个不同的块
第一行是状态行,包括使用的 HTTP 协议版本,状态码和一个状态描述(可读描述文本)
接下来每一行都表示一个 HTTP 首部,为客户端提供关于所发送数据的一些信息(如类型,数据大小,使用的压缩算法,缓存指示)。与客户端请求的头部块类似,这些 HTTP 首部组成一个块,并以一个空行结束。
最后一块是数据块,包含了响应的数据(如果有的话)
HTTP 响应代码
HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成。
响应分为五类:信息响应(1xx),成功响应(2xx),重定向(3xx),客户端错误(4xx)和服务器错误(5xx)。
常见的 HTTP 状态码
成功状态码
200 服务器成功返回内容
301/2 临时/永久重定向
304 资源未被修改过
失败的状态码
404 请求内容不存在
500 服务器暂时不可用
503 服务器内部错误
GET 请求和 POST 请求的异同
相同点
都将数据提交到远程服务器
不同点
提交的位置不同
GET 会将数据放在 URL 后面
POST 会将数据放到请求头中
提交数据大小限制不同
GET 请求对数据有大小限制
POST 请求对数据没有大小限制
GET/POST 请求应用场景
GET 请求用于提交非敏感数据和小数据
POST 请求用于提交敏感数据和大数据
注意
上传文件一般使用 POST 提交
上传文件必须设置 enctype="multipart/form-data"
浏览器缓存机制(HTTP)
Date :服务器响应的内容日期
Cache-control :内容缓存时间
no-cache :不被缓存的,只不过每次在向客户端(浏览器)提供响应数据时,缓存都要向服务器评估缓存响应的有效性。
no-store :用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。 根据缓存超时
max-age :指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh :指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale :指示客户机可以接收超出超时期间的响应消息。如果指定 max-stale 消息的值,那么客户机可以 接收超出超时期指定值之内的响应消息。
Expires :内容保质期,表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同 max-age 的效果。但是如果同时存在,则被 cache-control 的 max-age 覆盖。
其他
网站如何统计用户从何点击而来?
Referer: 如果从浏览器地址栏里直接输入地址请求头没有 Referer
版权声明: 本文为 InfoQ 作者【飞向星的客机】的原创文章。
原文链接:【http://xie.infoq.cn/article/d47a0c1ffbfcb7f57656770aa】。文章转载请联系作者。
评论