• 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报文称为请求报文,响应端(服务器端)的叫响应报文.

    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》!复习计网!

  • 相关阅读:
    hdu 1896 stones
    各种类型的取值范围
    RSS/PSS/VSZ
    kasan BUG log
    ARM机器码分析
    Linux进程状态
    谢宝友: 深入理解RCU之七:分级RCU实现
    rcu_preempt detected stalls on CPUs/tasks
    Linux 内核 hlist
    linux cmd
  • 原文地址:https://www.cnblogs.com/zmj97/p/10161694.html
Copyright © 2020-2023  润新知