这是我参与「第四届青训营」笔记创作活动的第6天
本节课主要讲的是HTTP的定义以及应用。笔记分为以下几个部分。
初始
什么是HTTP?
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。
HTTP的基本特点
- 请求 相应
- 简单可扩展
- 无状态
协议分析
发展
0.9单行协议
- 请求GET/mypage.html
- 响应只有HTML文档
1.0构建可扩展性
- 增加了Header
- 有了状态码
- 支持多种文档类型
1.1 标准化协议
- 链接复用
- 缓存
- 内容协商
2 更优异的表现
- 二进制协议
- 压缩header
- 服务器推送
3 草案
报文
Method
OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送的请求来测试服务器的功能性
HEAD 向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
GET 向特定的资源发出请求。使用GET请求应该只被用于获取数据。
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。通常导致在服务器上的状态变化或副作用。
PUT 向指定资源位置上传其最新内容
DELETE 请求服务器删除指定资源
TRACE 回显服务器收到的请求,主要用于测试或诊断
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 PATCH 用于对资源应用部分修改。
Safe(安全的):不会修改服务器的数据。 GET HEAD OPTIONS Idempotent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的服务器的状态都是一样的。所有safe方法都是Idempotent的。
状态码
1XX:指示信息,表示请求已接收,继续处理
2XX:成功,表示请求已成功接收、理解、接受
3XX:重定向,要完成请求必须进行更进一步操作
4XX:客户端错误,请求有语法错误或请求无法实现
个人实际开发过程中出现4XX大部分是因为前端代码有误。
5XX:服务端错误,服务器未能实现合法的请求
RESTful API
一种API设计风格。
1)每一个URL代表一种资源
2)客户端与服务器之间,传递这种资源的某种表现层
3)客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”
常用请求头
- Accept:text/html,image/ 告诉服务器,浏览器可以接受文本,网页图片
- Accept-Charaset:ISO-8859-1 接受字符编码:iso-8859-1
- Accept-Encoding:gzip,compress 可以接受 gzip,compress压缩后数据
- Accept-Language:zh-cn 浏览器支持的语言
- Host:localhost:8080[浏览器要找的主机]
- IF-MODIFIED-Since:Tue,11Jul 2000 18:23:51 告诉服务器这缓存中有这个文件,该文件的时间是...
- Referer:http://localhost:8080/test/abc.html 告诉服务器来自哪里
- User-Agent:Nozilla/4.0(Com...) 告诉服务器浏览器内核
- Cookie:HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
- Connection:close/Keep-Alive 保持链接,发完数据后,不关闭链接
- Date:浏览器发送数据的请求时间
常用响应头
- Content-Type 服务端返回的实体内容的类型
- Cache-Control 指定请求和响应遵循的循环机制,如no-cache
- Last-Modified 请求资源的最后修改时间
- Expires 应该在什么时候认为文档已经过期,从而不再缓存它
- Max-age 客户端的本地资源应该缓存多少秒,开启Cache-Control后有效
- Etag 资源的特定版本标识符,类似于指纹
- Set-Cookie 设置和页面关联的Cookie,服务器通过这个头部把Cookie传给客户端
- Server 服务器的一些相关信息
- Access-Control-Allow-Origin 服务器端允许的请求Origin头部(譬如为*
缓存
缓存分为强缓存和协商缓存
强缓存
- Expires 时间戳
- Cache-Control
- 可缓存性
- 到期
- 重新验证 * 重新加载
协商缓存
- Etag/If-None-Match:资源的特定版本标识符,类似于指纹
- Last-Modified/If-Modified-Since: 请求资源的最后修改时间
cookie
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息
实际应用
- AJAX
- node
- 用户体验
写在最后
本篇因为时间关系仅仅对知识点作详细记录,部分介绍来源于百度百科、知乎。