web 应用交互
HTTP 协议基础
HTTP 请求
requests
分析 HTTP 响应
HTTP 协议基础
超文本传输协议 (HyperText Transfer Protocol, 缩写: HTTP) 是一种用于分布式, 协作式和超媒体信息系统的应用层协议. HTTP 是万维网的数据通信的基础.
设计 HTTP 最初的目的是为了提供一种发布和接收 html 页面的方法. 通过 HTTP 或者 HTTPS 协议请求的资源由统一资源标识符 (Uniform Resource Identifiers,URI) 来标识.
HTTP 的发展是由蒂姆. 伯纳斯 - 李于 1989 年在欧洲核子研究组织 (CERN) 所发起. HTTP 的标准制定由万维网协会 (World Wide Web Consortium,W3C) 和互联网工程任务组 (Internet Engineering Task Force,IETF) 进行协调, 最终发布了一系列的 RFC, 其中最著名的是 1999 年 6 月公布的 RFC 2616, 定义了 HTTP 协议中现今广泛使用的一个版本 --HTTP 1.1.
2014 年 12 月, 互联网工程任务组 (IETF) 的 Hypertext Transfer Protocol Bis(httpbis)工作小组将 HTTP/2 标准提议递交至 IESG 进行讨论[2], 于 2015 年 2 月 17 日被批准. HTTP/2 标准于 2015 年 5 月以 RFC 7540 正式发表, 取代 HTTP 1.1 成为 HTTP 的实现标准.
HTTP 是一个客户端终端 (用户) 和服务器端 (网站) 请求和应答的标准(TCP). 通过使用网页浏览器, 网络爬虫或者其它的工具, 客户端发起 HTTP 请求到服务器上指定端口(默认端口为 80). 我们称这个客户端为用户代理程序(user agent). 应答的服务器上存储着一些资源, 比如 HTML 文件和图像. 我们称这个应答服务器为源服务器(origin server. 在用户代理和源服务器中间可能存在多个 "中间层", 比如代理服务器, 网关或者隧道(tunnel).
尽管 TCP/IP 协议是互联网上最流行的应用, HTTP 协议中, 并没有规定必须使用它或它支持的层. 事实上, HTTP 可以在任何互联网协议上, 或其他网络上实现. HTTP 假定其下层协议提供可靠的传输. 因此, 任何能够提供这种保证的协议都可以被其使用. 因此也就是其在 TCP/IP 协议族使用 TCP 作为其传输层.
通常, 由 HTTP 客户端发起请求, 创建到服务器指定端口 (默认是 80 端口) 的 TCP 连接. HTTP 服务器则在那个端口监听客户端的请求. 一旦收到请求, 服务器会向客户端返回状态, 比如 "HTTP/1.1 200 OK", 以及返回的内容, 如请求的文件, 错误消息, 或者其它信息.
版本
超文本传输协议已经演化出了很多版本, 它们中的大部分都是向下兼容的. 在 RFC 2145 中描述了 HTTP 版本号的用法. 客户端在请求的开始告诉服务器它采用的协议版本号, 而后者则在响应中采用相同或者更早的协议版本.
HTTP/0.9
已过时. 只接受 GET 一种请求方法, 没有在通讯中指定版本号, 且不支持请求头. 由于该版本不支持 POST 方法, 因此客户端无法向服务器传递太多信息.
HTTP/1.0
这是第一个在通讯中指定版本号的 HTTP 协议版本, 至今仍被广泛采用, 特别是在代理服务器中.
HTTP/1.1
持久连接被默认采用, 并能很好地配合代理服务器工作. 还支持以管道方式在同时发送多个请求, 以便降低线路负载, 提高传输速度.
HTTP/1.1 相较于 HTTP/1.0 协议的区别主要体现在:
缓存处理
带宽优化及网络连接的使用
错误通知的管理
消息在网络中的发送
互联网地址的维护
安全性及完整性
HTTP/2
当前版本, 于 2015 年 5 月作为互联网标准正式发布.
HTTP 是无状态的, 服务器和客户端只有请求时知道对方, 为此很容易发动攻击. 所有的通信是明文, 易受截取和篡改.
image.PNG
1994 年引入了 HTTPS 以增强安全性. HTTPS 是基于 SSL(Secure Socket Layer)或 TLS(Transport Layer Security)的 HTTP.
HTTPS 在不安全的网络上创建安全通道, 免受窃听者和中间人攻击.
在 HTTP 中, 方法指示要对所选资源执行的操作, 也称为 HTTP 动词. HTTP / 1.0 定义了三种方法:
HEAD: 只返回标题和状态代码而不是内容
GET: 这是用于检索给定 URI 的标准方法
POST: 向服务器提交内容, 表单数据, 文件等的方法,
HTTP / 1.1 引入了以下方法:
OPTIONS: 这为目标资源提供了通信选项
PUT: 此请求存储由给定 URI 标识的资源
DELETE: 请求服务器删除 Request-URI 所标识的资源.
TRACE: 回显服务器收到的请求, 主要用于测试或诊断.
CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器. 通常用于 SSL 加密服务器的链接(经由非加密的 HTTP 代理服务器).
PATCH: 用于将局部修改应用到资源.
按照惯例, HEAD,GET,OPTIONS 和 TRACE 是安全的, 它们仅用于信息检索, 不应更改服务器状态. POST,PUT,DELETE 和 PATCH 等方法则可能更改服务器状态.
技术支持 qq 群: 144081101(后期会录制视频存在该群群文件) 591302926 567351477 钉钉免费群: 21745728
image.PNG
HTTP 头的常见内容:
User-agent 用户代理: 通知服务器操作系统, 浏览器和插件等信息.
Accept-encoding: 浏览器支持的编码, 通常是 GZip 或 Deflate. 会压缩内容以减少每次传输的带宽时间.
Referer: 它包含 referer URL, 一般为来源页面.
Cookie: 如果浏览器有该站点的 Cookie, 则会将其添加到 Cookie 头. 还有服务器端标头, 由 Web 服务器设置.
Cache-Control: 缓存指令.
Location:: 用于重定向. 301 或 302 响应, 服务器必须发送.
Set-Cookie: 在用户的浏览器中设置 cookie.
WWW-Authenticate: 请求认证. 当浏览器看到此标头时, 它将打开登录名窗口要求用户名和密码.
比如访问 https://www.jianshu.com/p/77b013a2a556 的 HTTP 头:
image.PNG
- $ telnet www.so.com 80
- Trying 125.88.193.243...
- Connected to so.qss-lb.com.
- Escape character is '^]'.
- GET /help/help_1_1.HTML HTTP/1.0
- HTTP/1.1 200 OK
- Server: openresty
- Date: Mon, 16 Jul 2018 08:30:24 GMT
- Content-Type: text/HTML
- ...
来源: http://www.jianshu.com/p/2562338eda66