zoukankan      html  css  js  c++  java
  • [TCP/IP] HTTP概述

    HTTP

    请求访问文本或图像等资源的一端称为客户端

    提供资源响应的一端称为服务器端

    请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段、内容实体

    响应报文是由协议版本、状态码、原因短语、可选响应首部字段、实体

    HTTP是一种无状态协议

    HTTP协议自身不具备保存之前发送过的请求或响应的功能

    可以通过Cookie技术来实现保持状态的功能

    HTTP使用URI让客户端定位到资源

    HTTP方法

    GET:获取资源

    访问服务器的某个资源

    GET方法用来请求访问已被URI识别的资源。

    POST:传输实体主体

    把某条信息告诉服务器

    POST用来传输实体的主体。

     

    PUT:传输文件

    传输文件给服务器

    PUT用来传输文件,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置

    HEAD:获得报文首都

    从服务器获得相关信息

    和GET一样只是不返回报文主体部分,用于确认URI的有效性及资源更新的时间等

    DELETE:删除文件

    从服务器删除文件

    和PUT方法相反,DELETE按请求URI删除指定的资源

    OPTIONS:询问支持的方法

    询问服务器支持哪些方法

    OPTIONS用来查询针对请求URI指定的资源支持的方法。

    TRACE:追踪路径

    TRACE让Web服务器将之前的请求通信环回给客户端的方法。

    用来确认连接过程中发送的一系列操作。

    CONNECT:要求用隧道协议链接代理

    CONNECT要求在与代理服务器通信时建立隧道,实现用隧道技术进行TCP通信

    使用Cookie状态管理

    Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

    Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器发现客户端发送过来的Cookie后,会去检查服务器上的记录并比对,最后得到之前的状态信息。

    HTTP报文

    用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。

    HTTP报文本身是由多行(用CR+LF作换行符)数据构成的字符串文本。

    HTTP报文大致可分为报文首部和报文主体两块。两者由空行(CR+LF)来划分。通常不一定有报文主体。

    请求报文结构

    报文首部(含请求行、请求首部字段、通用首部字段、实体首部字段、其他)

    空行(CR+LF)

    报文主体

    响应报文结构

    报文首部(含状态行、响应首部字段、通用首部字段、实体首部字段、其他)

    空行(CR+LF)

    报文主体

    请求行:包含用于请求的方法,请求URI和HTTP版本

    状态行:包含表明响应结果的状态码,原因短语和HTTP版本

    首部字段:包含表示请求和响应的各种条件和属性的各类首部,一般有4种首部,分别是:通用首部、请求首部、响应首部和实体首部

    其他:可能包含HTTP的RFC里未定义的首部

    报文:是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输

    实体:作为请求或响应的有效载荷数据被传输,其内容由实体首部和实体主体组成

    HTTP报文的主体用于传输请求或响应的实体主体。

    通常,报文主体等于实体主体。只有当在传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。

    内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。

    常见内容编码:gzip、compress、deflate、identity

    分块传输编码:把实体主体分块进行传输。每一块都会用十六进制标记块的大小,而实体主体的最后一块会使用0(CR+LF)标记。

    MIME,多用途因特网邮件机制,它允许邮件处理文本、图片、视频等多个不同类型的数据

    HTTP状态码

    状态码:告知从服务器返回的请求结果。

    2XX 成功

    200 OK

    表示从客户端发来的请求在服务器端被正常处理了。

    204 No Content

    代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分,也不允许返回任何实体的主体。

    206 Partial Content

    表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。

    3XX重定向

    301 Moved Permanently

    永久性重定向。表示请求的资源已被分配到了新的URI,以后应使用资源现在所指向的URI。

    302 Found

    临时性重定向

    表示请求的资源已被分配了新的URI,希望用户能使用新的URI访问。

    303 See Other

    表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。

    304 Not Modified

    表示客户端发送附带条件的请求时,服务器允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304 Not Modified。

    4XX客户端错误

    400 Bad Request

    表示请求报文中存在语法错误。

    401 Unauthorized

    表示发送的请求需要有通过HTTP认证的认证信息。

    返回含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部用于询问用户信息。当浏览器初次接收到401响应时,会弹出认证用的对话窗口。

    403 Forbidden

    表示对请求资源的访问被服务器拒绝了。

    404 Not Found

    表明在服务器上无法找到请求的资源。

    还可以在服务器拒绝请求且不想说明理由时使用。

    5XX服务器错误

    500 Internal Server Error

    表明服务器端在执行请求时发生了错误。

    503 Service Unavailable

    表明服务器暂时处于超负荷或正在进行停机维护现在无法处理请求。

    HTTP/1.1允许一台HTTP服务器搭建多个Web站点。

    在相同的IP下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。

    HTTP通信时,除了客户端和服务器外,还有一些用于通信数据转发的应用程序,例如代理、网关和隧道。它们可以配合服务器工作。

    代理

    代理是一种有转发功能的应用程序,它接收客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

    代理不改变URI,会直接发送给前方持有资源的目标服务器。

    代理服务器级联。转发时需要附加Via首部字段以标记出经过的主机信息。

    使用代理服务器的理由有:

    利用缓存技术减少网络带宽的流量

    组织内部针对特定网站的访问控制,以获取访问日志为主要目的等。

    网关

    网关是转发其他服务器通讯数据的服务器,接收从客户端发送过来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。

    网关使通信线路上的服务器提供非HTTP协议服务,以提高通信的安全性。

    隧道

    隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。

    目的是确保客户端与服务器可以通过SSL等加密手段进行安全通信。

    缓存

    缓存是指代理服务器或客户端本地磁盘内保存的资源副本。

    缓存服务器是代理转发从服务器返回的响应时保存一份资源的副本。

    客户端缓存

    客户端缓存称为临时网络文件,其中也包含缓存有效期的问题。

    HTTP报文首部

    报文首部:在客户端和服务器处理时起至关重要作用的信息几乎都在这边

    报文主体:所需要的用户和资源的信息都在这边

    4种HTTP首部字段类型

    通用首部字段

    请求报文和响应报文两方都会使用的首部

    请求首部字段

    从客户端向服务器发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息

    响应首段字段

    从服务器向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容消息

    实体首部字段

    针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的消息

    通用首部字段:请求报文和响应报文双方都会使用的首部。

    Cache-Control

    操作缓存的工作机制

    Cache-Control

    public指令:表明其他用户也可利用缓存。

    private指令:响应只以特定的用户作为对象,与public相反。

    no-cache指令:防止从缓存中返回过期的资源。

  • 相关阅读:
    Tensorflow
    EM算法
    神经网络 CNN
    神经网络总结(tensorflow)
    Chrome扩展程序和油猴推荐
    机器学习(贝叶斯,K-means,ROC,AUC)
    机器学习随笔(决策树,集成算法,交叉验证)
    机器学习随笔(线性回归,逻辑回归原理)
    @PropertySource加载文件的两种用法以及配置文件加载顺序
    JNDI(Java Naming and Directory Interface )
  • 原文地址:https://www.cnblogs.com/immjc/p/7761702.html
Copyright © 2011-2022 走看看