HTTP学习记录
Posted zmj97
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP学习记录相关的知识,希望对你有一定的参考价值。
title: HTTP学习记录
toc: true
date: 2018-09-21 20:40:48
HTTP协议,HyperText Transfer Protocol,超文本传输协议,是因特网上应用最为 广泛的一种网络传输协议。
版本
HTTP/0.9
已过时,只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。
因为这个版本不支持POST方法,因此客户端无法向服务器传递太多信息。
HTTP/1.0
第一个在通讯中指定版本号的版本,至今仍被广泛采用,特别是在代理服务器中。
HTTP/1.1
当前版本,默认采用持久连接,并能很好地配合代理服务器工作。
支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度。
SPDY
SPDY (发音为"speedy") ,是一个由 Google 主导的研究项目发明的HTTP替代协议。SPDY一开始主要关注降低延迟,采用了TCP通道,但是使用了不同的协议来达到此目的。
HTTP/2.0
简称为h2(基于TLS/1.2或以上版本的加密连接)或h2c(非加密连接)。
协议之间的比较
HTTP/1.1相较于HTTP/1.0的主要区别
- 缓存处理
- 带宽优化及网络连接的使用
- 错误通知的管理
- 消息在网络中的发送
- 互联网地址的维护
- 安全性及完整性
HTTP/2与HTTP/1.1比较
HTTP/2 相比 HTTP/1.1 的修改并不会破坏现有程序的工作,但是新的程序可以藉由新特性得到更好的速度。
HTTP/2 保留了 HTTP/1.1 的大部分语义,例如请求方法、状态码乃至URI和绝大多数HTTP头部字段一致。
但是 HTTP/2 采用了新的方法来编码、传输客户端/服务器间的数据。
HTTP/1.1与SPDY的区别
其与HTTP/1.1相比,SPDY主要的改变有:
- 实现无需先入先出的多路复用
- 为简化客户端和服务器开发的消息—帧机制
- 强制性压缩(包括HTTP头部)
- 优先级排序
- 双向通讯
HTTP/2与SPDY的比较
HTTP/2的开发基于SPDY进行跃进式改进。在诸多修改中,最显著的改进在于,HTTP/2使用了一份经过定制的压缩算法,基于霍夫曼编码,以此替代了SPDY的动态流压缩算法,以避免对协议的Oracle攻击——这一类攻击以CRIME为代表。此外,HTTP/2禁用了诸多加密套件,以保证基于TLS的连接的前向安全。
简介
基于TCP/IP通信协议传递数据。
工作原理
HTTP协议工作在客户端-服务端架构(C/S)上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器有Apache服务器、IIS(Internet Informatica Services)服务器等。
Web服务器根据接收到的请求,向客户端发送响应信息。
HTTP默认端口号为80,我们也可以改为8080或者其他端口。
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)定位互联网上的资源。
注意事项
HTTP是:
- 无连接的:每次连接只处理一个请求。服务器处理完客户的请求并受到客户的应答后就断开连接。采用这种方式可以节省传输时间。
- 媒体独立的:只要客户端和服务端都知道如何处理数据内容,任何类型都可以通过HTTP发送。客户端和服务器指定合适的MIME-tyoe内容类型。
- 无状态的:协议对于事务处理没有记忆能力。HTTP协议自身不对请求和响应之间的通信状态进行保存。
- 这是为了更快地处理大量事务,确保协议的可伸缩性而特意设计的。但这也导致业务处理变得棘手的情况增多,比如要保持登录状态,因为HTTP无状态,因此需要额外保存用户状态。
- HTTP/1.1虽然也是无状态协议,但是为了实现比如保持状态的功能,引入了Cookie技术,这让管理状态变得简单。
- Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
HTTP协议通信流程:
Web浏览器<=HTTP协议=>HTTP服务器<=>CGI(通用网关接口)应用程序<=>数据库
其中CGI:
是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为html文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。
HTTP报文
用于HTTP协议交互的信息称为HTTP报文。请求端(客户端)的HTTP报文称为请求报文,响应端(服务器端)的叫响应报文.
HTTP报文本身是由多行(用CR+LF作为换行符)数据构成的字符串文本。
HTTP报文大致可分为报文首部和报文主体,两者由最初出现的空行(CR+LF)来划分。
通常并不一定要有报文主体。
报文首部
服务器端或客户端需处理的请求或响应的内容及内容
请求报文的报文首部由请求行、请求首部字段、通用首部字段、实体首部字段、其他组成
响应报文的报文首部由状态行、响应首部字段、通用首部字段、实体首部字段、其他组成
CR+LF
CR,Carriage Return,回车符,16进制0x0d
LF,Line Feed,换行符,16进制0x0a
报文主体
应被发送的数据
常用请求首部信息
(参考自红宝书)
虽然不同浏览器实际发送的头部信息会有所不同,但下边这些基本上是所有浏览器都会发送的:
- Accept:浏览器能够处理的内容类型
- Accept-Charset:浏览器能够显示的字符集
- Accept-Encoding:浏览器能够处理的压缩编码
- Accept-Language:浏览器当前设置的语言
- Connection:浏览器与服务器之间连接的类型
- Cookie:当前页面设置的任何Cookie
- Host:发出请求的页面所在的域
- Referer:发出请求的页面的URI。注意HTTP规范将这个字段拼写错了(正确拼法为Referrer),但为了保证与规范一致,也只能将错就错了。
- User-Agent:浏览器的代理用户字段。
注意,这些字段名是一个字母都不应有区别的,一旦有区别,那它就不是首部字段。
请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
GET
GET方法请求指定的页面信息. 使用GET的请求应该只被用于获取数据.
HEAD
HEAD方法请求一个与GET请求的响应相同的响应,但没有响应体.
POST
POST方法用于向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT
PUT方法从客户端向服务器传送的数据取代指定的文档的内容。
注意:因为HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,因此一般的web网站不使用该方法。
DELETE
DELETE方法删除指定的资源。
注意:和PUT一样,因为HTTP/1.1的DELETE方法自身不带验证机制,存在安全性问题,因此一般的web网站不使用该方法。
CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS
询问支持的方法,查询请求URI指定的资源支持的方法。
TRACE
回显服务器收到的请求,查询发送出去的请求是怎样被加工/修改的,主要用于测试或诊断(因为从代理服务器路由中转时请求可能被篡改)。不常用。
PATCH
PATCH方法用于对资源进行部分修改。(PUT为对资源进行整体覆盖)
HTTP状态码
- 1XX信息,服务器收到请求,需要请求者继续执行操作
- 2XX成功,操作被成功接收并处理
- 3XX重定向,需要进一步的操作以完成请求
- 4XX客户端错误,请求包含语法错误或无法完成请求
- 5XX服务器错误,服务器在处理请求的过程中发生了错误
常见状态码:
- 200 OK, 一切正常,对GET和POST请求的应答文档跟在后面
- 301 Moved Permanently,客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
- 302 Found,类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。
- 304 Not Modified,客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
- 307 Temporary Redirect,和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是 POST,即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清楚地区分几个状态代码: 当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。
- 400 Bad Request,请求出现语法错误。
- 401 Unauthorized,客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求
- 403 Forbidden, 资源不可用。
- 404 Not Found,无法找到指定位置的资源
- 410 Gone, 所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用
- 500 Internal Server Error,服务器遇到了意料不到的情况,不能完成客户的请求
- 501 Not Implemented,服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求
- 503 Service Unavailable ,服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头
Content-Type
Content-Type: text/html; charset=UTF-8
实体首部字段,表示实体主体的媒体类型。
字段值采用type/subtype形式赋值。
对照表链接:https://www.w3cschool.cn/http/ahkmgfmz.html
W3C的教程的学习笔记,过两天再啃一下MDN和《图解HTTP》,还要再复习一下计网,很多都忘了...
emmmW3C有的是错的...使用网络教程需谨慎....
关于HTTP/2.0以及SPDY等均来自维基百科。
这里只是重新回忆一下什么是HTTP,还是要看文档!啃《图解HTTP》!复习计网!
以上是关于HTTP学习记录的主要内容,如果未能解决你的问题,请参考以下文章