zoukankan      html  css  js  c++  java
  • HTTP相关知识

    1.HTTP的概念

    超文本传输协议(HTTP)是用于传输诸如HTML的超媒体文档的应用层协议。它被设计用于Web浏览器和Web服务器之间的通信,但它也可以用于其他目的。 HTTP遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待它收到服务器端响应。 HTTP是无状态协议,意味着服务器不会在两个请求之间保留任何数据(状态)。虽然通常基于TCP / IP层,但可以在任何可靠的传输层上使用
    2.URL和URI
    • URI:uniform resource identifier 统一资源标识符,一种资源的标识,它是一种抽象的资源标识,即可以是相对的,也可以是绝对的。
    • URL:uniform resource location 统一资源定位符,一用来标识抽象或物理资源的一个紧凑字符串。

    3.HTTP报文

    HTTP报文由报文首部、空行、报文主体构成:

    其中的空行用于区分报文首部和报文主体内容,是由一个回车符和一个换行符组成的。

    无论是请求报文还是响应报文都需要有报文首部,而报文主体有些请求报文是没有的。而请求报文的一般格式如下:

    而响应报文的格式是这样的:

    其中最常见的属性如下:

    1. URL, 即http访问的地址
    2. request method, 报文的请求方式
    3. status code, 状态码以及状态短语
    4. Accept Encoding, 内容编码
    5. Connection, 连接方式
    6. Cookie, 添加的cookie内容
    7. Host, 目标主机
    8. User-Agent, 客户端浏览器的相关信息
    9. Set-Cookie, 指定想要在Cookie中保存的内容

     

    请求方式(request method)——常见GET和POST

    GET方法可以用来请求访问已经被URL识别的资源。指定的资源经过服务端解析后返回响应的内容。简单来说,就是请求的资源是文本的话,那么就保持原样返回。

    POST方法可以用来传输实体的主体。

    两者区别:

    1.使用目标不同

    POST与GET都用于获取信息,但是GET方式仅仅是查询,并不对服务器上的内容产生任何作用结果;每次GET的内容都是相同的。POST则常用于发送一定的内容进行某些修改操作。

    2.大小不同

    由于不同的浏览器对URL的长度大小有一定的字符限制,因此由于GET方式放在URL的首部中,具体的大小要依浏览器而定。POST方式则是把内容放在报文内容中,因此只要报文的内容没有限制,它的大小就没有限制。

    3.安全性不同

    上面也说了GET是直接添加到URL后面的,直接就可以在URL中看到内容。而POST是放在报文内部的,用户无法直接看到。

    总的来说,GET用于获取某个内容,POST用于提交某种数据请求,从使用场景来看,一般用户注册的内容是私密的,应该使用POST方式来保持私密,而当需要查询某个内容时,需要快速响应,则使用GET。

    常见status code状态码

    • 200 通常的成功 OK

    GET:请求的对应资源会作为响应返回。响应将包含描述或操作的结果。 POST:返回处理对应请求的结果

    • 204 成功处理请求,没有返回任何内容 No Content

    表示服务器接收到的请求已经处理完毕,但是服务器不需要返回响应。比如,客户端是浏览器的话,那么浏览器显示的页面不会发生更新。

    • 206 Partial Content

    成功处理了部分GET请求

    • 301 Moved Permanently

    请求的网页已永久移动到新位置,永久性重定向

    • 302 Found

    网站临时性重定向,暂时不能访问(备案、被查)

    • 303 See Other

    该状态码表示由于请求对应的资源存在另一个URI,并指定必须使用GET方法定向获取请求的资源。和302不同的是,302是不会改变上次的请求方法

    • 304 Not Modified

    访问不了,并返回和上次一样的话,表示资源未被修改过,还是和上次访问时一样。

    • 307 Temporary Redirect

    临时重定向,和302、303类似,不同的是,不会指定客户端要用什么样的方法请求,

    • 400 Bad Request

    表示客户端中存在语法错误,导致服务器无法理解该请求。客户端需要修改请求的内容后再次发送请求。

    • 401 Unauthorized

    即用户没有必要的凭据。该状态码表示当前请求需要用户验证。

    • 403 Forbidden

    服务器已经理解请求,但是拒绝执行它。

    • 404 Not Found

    服务器找不到请求的网页。

    • 500 Internal Server Error

    服务器遇到错误,无法完成请求。

    • 503 Service Unavailable

    由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是暂时的.

    内容编码 Accept Encoding

    由于有些报文的内容会过大,为了减少传输时间,HTTP会采取一些压缩的措施,例如上面的报文信息中,Accept-Encoding就定义了内容编码的格式gzip。

    总的来说内容编码的格式有以下几种:

    • gzip:GNU压缩格式
    • compress:UNIX系统的标准压缩格式
    • deflate:是一种同时使用了LZ77和哈夫曼编码的无损失压缩格式
    • identity:不进行压缩

    持久化connection

    正常发送HTTP时,我们需要建立TCP的连接,然后再发送报文:

    如果每次都要发送HTTP报文都需要经历上面的拿过过程,无疑将会耗费很多时间在建立和断开连接的过程中,因此HTTP使用了connection属性,用于指定连接的方式,当当设置成keep-alive时,就会建立一条持久化的连接。这样就不需要每次都建立连接在中断连接:
    (HTTP1.1中connection默认开启keep-alive)
     
    报文首部总结

    4.HTTP方法

    HTTP 支持几种不同的请求命令,这些命令被称为 HTTP 方法(HTTP method)。每 条 HTTP 请求报文都包含一个方法。这个方法会告诉服务器要执行什么动作(获取 一个 Web 页面、运行一个网关程序、删除一个文件等)。下表是一些常见的HTTP方法:

    PUT传输文件

    PUT方法用于传输文件,就像FTP协议的上传一样,要求在请求报文的主题中包含文件内容,然后保存到请求URI指定的位置。由于PUT方法不带验证机制,任何人都可以任何人都可以上传文件,存在安全性问题,因此一般的web网站不适用该方法。

    DELETE删除文件

    DELETE方法用来删除文件,是与put相反的方法,DELETE方法按照请求url删除指定的资源。其本质和PUT方法一样不带验证机制,所以建议少用DELETE方法。

    HEAD获取报文首部

    HEAD和GET方法一样,只是不返回报文主体部分,通常用于确认url的有效性及资源更新的日期时间等。

    5.HTTPS的概念

    HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单来说就是是HTTP的安全版本,即在HTTP下加入SSL层,HTTPS的安全基石是SSL,因此加密的详细内容就需要SSL。
     由于HTTP有以下几个缺点:
    • 传输的时候使用明文,这显然会被不法者截取干一些见不得人的勾当。
    • 没有认证机制,这样我们就可以伪造一些HTTP访问,这显然会造成一些困扰。比如Jmeter就是典型的例子,伪造一大堆的HTTP URL然后压力测试,这也就是DOS攻击的一种。
    • 无法验证报文的完整性,比如一个HTTP的报文已经被不法者截取并且篡改,而服务器端却无法验证。


    HTTP与HTTPS的区别

    正是由于以上这些缺点,HTTPS作出了以下一些改变:

    • HTTP 是明文传输,HTTPS 通过 SSLTLS 进行了加密;
    • HTTP 的端口号是 80,HTTPS 是 443;
    • HTTPS 需要到 CA 申请证书,一般免费证书很少,需要交费;
    • HTTP 的连接很简单,是无状态的。而 HTTPS 协议则是由 SSL+HTTP; 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全
    HTTPS的缺点:
    • 通信的速度变慢,由于需要加密,一个握手就多了好几个往返;
    • 对用户的机器负载的增加。
    补充:
    HTTP协议与TCP协议
    TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。
     
    TCP与UDP的区别
    1.TCP面向连接(如拨打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
    2.TCP提供可靠的服务。即通过TCP连接传送的数据,无差错,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
    3.TCP面向字节流,实际上是把TCP数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络上出现拥塞不会使源主机的发送效率降低(对实时应用很有用,如IP电话,实时视频会议等)
    4.每一条TCP连接只能是点到点;UDP支持一对一,一对多,多对一,多对多的交互通信
    5.TCP的首部开销20字节;UDP的首部开销小,只有8个字节
    6.TCP的逻辑通信信道是全双工的可靠信道;UDP则是不可靠信道
     
    流媒体协议:RTP、RTCP、RTSP、MMS、HLS、HTTP progressive streaming

    当前在internet上传送音频和视频等信息主要有两种方式:

    1. 下载,完整下载一个视频,再去播放
    2. 流式传输,如优酷、爱奇艺等视频网址
    作用:RTP位于传输层(通常是UDP)之上,应用程序之下,实时语音、视频数据经过模数转换和压缩编码处理后,先送给RTP封装成为RTP数据单元,RTP数据单元被封装为UDP数据报,然后再向下递交给IP封装为IP数据包。这么说RTP是没有保证传输成功的,要保证成功,就要用到RTCP,RTCP消息含有已发送数据的丢包统计和网络拥塞等信息,服务器可以利用这些信息动态的改变传输速率,甚至改变净荷的类型。RTCP消息也被封装为UDP数据报进行传输。
     
     
     
     
    部分参考:
    https://juejin.im/post/5afad7f16fb9a07abf72ac30?utm_medium=fe&utm_source=weixinqun
  • 相关阅读:
    WCF之Binding
    Coding获取站点中被任何用户标记为I like it的项
    CSS兼容性
    CSS Hacker
    putty配置
    css中fontfamily的中文字体
    Linux下 zip 和 unzip的用法
    搭建WebService服务 【转】
    【基于spark IM 的二次开发笔记】第一天 各种配置
    在DirectX环境下读入3DS模型并显示
  • 原文地址:https://www.cnblogs.com/lhh520/p/10272449.html
Copyright © 2011-2022 走看看