http协议 订阅
http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使得开发和部署是那么的直截了当。 [1] 展开全文
http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使得开发和部署是那么的直截了当。 [1]
信息
外文名
HTTP
适用浏览器
Firefox、Google chrome等
作    用
规定WWW服务器与浏览器之间信息传递规范
中文名
超文本传输协议
工作层
应用层
基    础
架构在TCP协议上
http简介
万维网WWW(world wide web)发源于欧洲日内瓦量子物理实验室CERN,正是WWW技术的出现使得因特网得以超乎想象的速度迅猛发展。这项基于TCP/IP的技术在短短的十年时间内迅速成为已经发展了几十年的Internet上的规模最大的信息系统,它的成功归结于它的简单、实用。在WWW的背后有一系列的协议和标准支持它完成如此宏大的工作,这就是Web协议族,其中就包括HTTP超文本传输协议。 在1990年,HTTP就成为WWW的支撑协议。当时由其创始人WWW之父蒂姆·贝纳斯·李(TimBerners—Lee)提出,随后WWW联盟(WWW Consortium)成立,组织了IETF(Internet Engineering Task Force)小组进一步完善和发布HTTP协议。 [2]  HTTP是应用层协议,同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP是一种协议规范,这种规范记录在文档上,为真正通过HTTP协议进行通信的HTTP的实现程序。HTTP协议是基于C/S架构进行通信的,而HTTP协议的服务器端实现程序有httpd、nginx等,其客户端的实现程序主要是Web浏览器,例如Firefox、InternetExplorer、Google chrome、Safari、Opera等,此外,客户端的命令行工具还有elink、curl等。Web服务是基于TCP的,因此为了能够随时响应客户端的请求,Web服务器需要监听在80/TCP端口。这客户端浏览器和Web服务器之间就可以通过HTTP协议进行通信了。 [3] 
收起全文
精华内容
参与话题
问答
  • 浅析HTTP协议

    千次阅读 多人点赞 2016-07-30 17:24:37
    HTTP协议

    以下内容是本人阅读《图解HTTP》后的个人笔记和总结

    一、HTTP入门

    1、HTTP是一个属于应用层的面向对象的协议,它是基于TCP协议的可靠传输,采用客户端/服务器端模式,由客户端发起请求,服务端进行响应。

    2、HTTP是一种无状态协议,即不保存状态,它不对之前发生过的请求和响应的状态进行管理。每当有新的请求发送时,就会有对应的新响应产生,协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性而设计的。但同时也带来了一些不便,比如,用户登录到一家购物网站,即使他跳转到该网站的其他页面,也需要能继续保持登录状态,为了实现期望的保持状态功能,于是就引入了Cookie技术。(Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie,当客户端下次再往服务器端发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检和比对服务器上的记录,最后得到之前的状态信息。)

    3、URL(Uniform Resource Locator,统一资源定位符)是我们使用Web浏览器等访问Web页面时需要输入的网页地址,比如http://www.baidu.com。URI(Uniform Resource Identifier,统一资源标识符)是由某个协议方案表示的资源的定位标识符,协议方案是指访问资源所使用的协议类型名称。URI用字符串标识某一互联网资源,而URL表示资源的地址,可见URL是URI的子集。

    二、HTTP中的方法

    HTTP/1.1中可使用的方法(方法名区分大小写):
    (1)GET:获取资源
    GET方法用来请求访问已被URI识别的资源,指定的资源经服务器端解析后返回响应内容。
    (2)POST:传输实体主体
    POST方法用来传输实体的主体。虽然GET方法也可以传输,但一般不用GET方法进行传输。虽说POST的功能与GET很相似,但POST的主要目的并不是获取响应的主体内容。
    (3)HEAD:获得报文首部
    HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性和资源更新的日期时间等。
    (4)PUT:传输文件
    PUT方法用来传输文件,就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。但是由于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,所以一般不使用该方法。
    (5)DELETE:删除文件
    DELETE方法用来删除文件。DELETE方法按请求URI删除指定的资源。但是和PUT一样不带验证机制,所以一般也不是用该方法。
    (6)OPTIONS:询问支持的方法
    OPTIONS方法用来查询针对请求URI指定的资源支持的方法。
    (7)TRACE:追踪路径
    TRACE方法时让Web服务器端将之前的请求通信环回给客户端的方法。
    (8)CONNECT:要求用隧道协议连接代理
    CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输安全层)协议把通信内容加密后经网络隧道传输。

    三、HTTP报文概要

    用于HTTP协议交互的信息被称为HTTP报文。请求端的HTTP报文叫做请求报文,响应端的叫做响应报文。HTTP报文由报文首部、空行和报文主体三部分组成,通常,并不一定要有报文主体。请求报文和响应报文的结构如下图:

    这里写图片描述这里写图片描述
    请求报文和响应报文的首部内容由以下数据组成:

    • 请求行:包含用于请求的方法、请求URI和HTTP版本。
    • 状态行:包含表明响应结果的状态码,原因短语和HTTP版本。
    • 首部字段:包含表示请求和响应的各种条件和属性的各类首部。
    • 其他:可能包含HTTP的RFC里未定义的首部(Cookie等)。

    四、HTTP状态码

    状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。状态码的类别有以下5种:

    类别 原因短语
    1xx 信息性状态码 接收的请求正在处理
    2xx 成功状态码 请求正常处理完毕
    3xx 重定向状态码 需要进行附加操作以完成请求
    4xx 客户端错误状态码 服务器无法处理请求
    5xx 服务端错误状态码 服务器处理请求出错

    常见的状态码如下:
    2xx 成功

    • 200 OK:表示从客户端发来的请求在服务器端被正常处理了。
    • 204 No Content:该状态码代表服务器接收的请求已经成功处理,但在返回的响应报文中不含实体的主体部分。
    • 206 Partial Content:该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的请求。响应报文中包含由Content-Range指定范围的实体内容。

    3xx 重定向

    • 301 Moved Permanently:永久性重定向。该状态码表示请求的资源已被分配了新的URI,以后应该使用现在资源所指的URI。
    • 302 Found:临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户本次能使用新的URI访问。
    • 303 See Other:该状态码表示由于请求对应的资源存在着另外一个URI,应使用GET方法定向获取请求的资源。
    • 304 Not Modified:该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后直接返回304。304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3XX类别中,但是和重定向没有关系。(附带条件的请求时指采用GET方法的请求报文中包含If-Match、If-Modified-Since、If-Range等任一首部)
    • 307 Temporary Redirect:临时重定向。该状态码与302 Found有着相同的含义。

    4xx 客户端错误

    • 400 Bad Request:该状态码表示请求报文中存在语法错误。

    • 401 Unauthorized:该状态码表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。另外若之前已进行过1次请求,则表示用户认证失败。

    • 403 Forbidden:该状态码表明对请求资源的访问被服务器拒绝了。未获得文件系统的访问授权,访问权限出现某些问题等情况都可能发生403。

    • 404 Not Found:该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。

    5xx 服务器错误

    • 500 Internal Server Error:该状态码表明服务器端在执行请求时发生了错误,也有可能是Web应用存在的Bug或某些临时的故障。

    • 503 Service Unavailable:该状态码表明服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求。

    五、HTTP报文首部详解

    HTTP请求报文由方法、URI、HTTP版本、HTTP首部字段等部分构成。
    HTTP响应报文由HTTP版本、状态码、HTTP首部字段三部分组成。
    HTTP首部字段是构成HTTP报文的要素之一,无论是请求还是响应都会使用首部字段,它能起到传递额外信息的重要作用。
    HTTP首部字段根据实际用途被分为以下4种类型:

    • 通用首部字段:请求报文和响应报文都会使用的首部。
    • 请求首部字段:客户端向服务器端发送请求报文时使用的首部。
    • 响应首部字段:服务器端向客户端返回响应报文时使用的首部。
    • 实体首部字段:针对请求报文和响应报文的实体部分使用的首部。

    1、通用首部字段

    (1)Cache-Control
    通过指定首部字段Cache-Control的指令,就能控制缓存的行为。例如:Cache-Control: private, max-age=0, no-cache
    缓存请求指令:

    指令参数说明
    no-cache强制向源服务器再次验证,客户端不会接收缓存过的响应
    no-store不缓存请求或响应的任何内容
    max-age = [秒]必需 响应的最大时间值(会使Expires字段失效)
    max-stale( = [秒])可省略即使过期,只要处于指定时间内,也照常接收资源
    min-fresh = [秒]必需要求返回至少还未过指定时间的缓存资源
    no-transform代理不可更改媒体类型
    only-if-cached仅从缓存获取资源,如果无响应则返回504 Gateway Timeout
    cache-extension 新指令标记,可以扩展Cache-Control首部字段内的指令

    缓存响应指令:

    指令参数说明
    public 可向任意方提供响应的缓存
    private可省略仅向特定用户返回响应
    no-cache可省略缓存前必须先确认其有效性,不缓存过期的资源
    no-store不缓存请求或响应的任何内容(这个才是真正的不进行缓存)
    no-transform要求代理不可更改媒体类型,可防止缓存或代理压缩图片等类似操作
    must-revalidate代理会向源服务器再次验证即将返回的响应缓存是否仍然有效(会使max-stable失效)
    proxy-revalidate 要求中间缓存服务器对缓存的响应有效性再进行确认
    max-age = [秒]必需 响应的最大时间值(会使Expires字段失效)
    s-maxage = [秒]必需公共缓存服务器响应的最大时间值(会使Expires字段失效)
    cache-extension 新指令标记,可以扩展Cache-Control首部字段内的指令

    (2)Connection
    Connection字段用来控制不再转发给代理的首部字段和管理持久连接。HTTP/1.1版本的默认连接都是持久连接,当服务端想断开连接时,可以指定Connection首部字段的值为Close。HTTP/1.1之前的版本默认都是非持久化连接,如果想维持持续连接,则需要指定Connection的值为Keep-Alive。
    (3)Date
    首部字段Date表明创建HTTP报文的日期和时间。
    (4)Pragma
    这个字段是HTTP/1.1之前的版本遗留下来的,仅作为向后兼容而定义的。它只用在客户端发送的请求中,要求中间服务器不返回缓存的资源(no-cache)。
    (5)Trailer
    首部字段Trailer会事先说明在报文主体后记录了哪些首部字段,该首部字段可应用在HTTP/1.1版本分块传输编码时。
    (6)Transfer-Encoding
    首部字段Transfer-Encoding规定了传输报文主体时采用的编码方式。
    (7)Upgrade
    首部字段Upgrade用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。
    (8)Via
    使用首部字段Via是为了追踪客户端与服务器之间的请求和响应报文的传输路径,还可以避免请求回环的发生。报文经过代理或网关时,会先在首部字段Via中附加该服务器的信息,然后再进行转发。
    (9)Warning
    首部字段Warning会告知用户一些与缓存相关的问题的警告。

    2、请求首部字段

    (1)Accept
    Accept首部字段可通知服务器用户代理能够处理的媒体类型及媒体类型的相对优先级。比如,如果浏览器不支持gif图片的显示,那Accept就不指定image/gif,而可以指定image/png和image/jpeg等类型。当有多种类型时,可以使用q来表示权重,范围为0~1,不指定权重时,默认为1.0。比如下面,表示给我HTML格式的啊,没有的话text格式也行:

    Accept: text/plain; q=0.3, text/htm

    (2)Accept-Charset
    Accept-Charset首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。比如:

    Accept-Charset: iso-8859-5, unicode-1-1; q=0.8

    (3)Accept-Encoding
    Accept-Encoding首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。比如:

    Accept-Encoding: gzip, deflate

    (4)Accept-Language
    Accept-Language首部字段用来告知服务器用户代理能够处理的自然语言集,以及自然语言集的相对优先级。比如,表示的意思是有中文版的给我中文版的,没有的话英文也行。

    Accept-Language: zh-cn,zh; q=0.7, en-us,en; q=0.3

    (5)Authorization
    Authorization首部字段是用来告知服务器用户代理的认证信息。
    (6)Expect
    客户端使用Expect来告知服务器,期望出现的某种特定行为。如果服务器无法理解客户端的期望而发生错误时,会返回417 Expectation Failed。
    (7)Form
    Form首部字段用来告知服务器使用用户代理的用户的电子邮件地址。
    (8)Host
    首部字段Host会告知服务器,请求的资源所处的互联网主机名和端口号。它是唯一一个必须被包含在请求内的首部字段。当相同的IP地址下部署运行着多个域名,就需要使用首部字段Host来指出请求的主机名。比如:

    Host: sp0.baidu.com

    (9)If-xxx
    If-Match、If-None-Match、If-Modified-Since、If-Unmodified-Since、If-Ranged都为条件请求,服务器接收到附带条件的请求后,只有判定指定条件为真时才会执行请求。
    (10)Max-Forwards
    通过TRACE或OPTIONS方法发送包含首部字段Max-Forwards的请求时,指定了可经过的服务器最大数目。当服务器接收到Max-Forward值为0的请求时,则不再进行转发,而是直接返回响应。比如:

    Max-Forwards: 6

    (11)Proxy-Authorization
    接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息。
    (12)Range
    对于只需获取部分资源的范围请求,包含首部字段Range即可告知服务器资源的指定范围。格式如下,表示请求获取5001字节到10000字节的资源:

    Range: bytes=5001-10000

    (13)Referer
    首部字段Referer会告知服务器请求的原始资源的URI。
    (14)TE
    首部字段TE会告知服务器客户端能够处理响应的传输编码方式及相对优先级。比如:

    TE: gzip, deflate; q=0.5

    (15)User-Agent
    首部字段User-Agent会将创建请求的浏览器和用户代理名称等信息传达给服务器。比如,已经暴露了我正在使用chrome浏览器:

    User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36

    3、响应首部字段

    (1)Accept-Ranges
    首部字段Accept-Ranges是用来告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源。当可处理范围请求时其值为bytes,否则会none。比如:

    Accept-Ranges: bytes

    (2)Age
    首部字段Age能告知客户端,源服务器在多久前创立了响应,单位为秒。若创建该响应的服务器是缓存服务器,Age值是指缓存后的响应再次发起认证到认证完成的时间值。比如:

    Age: 300

    (3)ETag
    首部字段ETag能告知客户端实体标识。它是一种可将资源以字符串形式做唯一标识的方式,服务器会为每份资源分配对应的ETag值。
    (4)Location
    使用首部字段Location可以将响应接收方引导至某个与请求URI位置不同的资源。基本上,该字段会配合3xx Redirection的响应,提供重定向的URI。比如,当我们访问https://www.baidu.com/sample.html时,它会把我们重定向到如下URI:

    Location:https://www.baidu.com/search/error.html

    (5)Proxy-Authenticate
    首部字段Proxy-Authenticate会把由代理服务器所要求的认证信息发送给客户端。
    (6)Retry-After
    首部字段Retry-After告知客户端应该在多久之后再次发送请求,主要配合状态码503 Service Unavailable响应或3xx Redirect响应一起使用。字段值可以是具体日期,也可以是秒数,比如:

    Retry-After: 120

    (7)Server
    首部字段Server告知客户端当前服务器上安装的HTTP服务器应用程序的信息。比如:

    Server: Apache

    (8)Vary
    首部字段Vary可对缓存进行控制。源服务器会向代理服务器传达关于本地缓存使用方法的命令。
    (9)WWW-Authenticate
    首部字段WWW-Authenticate用于HTTP访问认证。它会告知客户端适用于访问请求URI所指定资源的认证方案和带参数提示的质询。

    4、实体首部字段

    (1)Content-Encoding
    首部字段Content-Encoding会告知客户端服务器对实体的主体部分选用的内容编码方式。内容编码食指在不丢失实体信息的前提下所进行的压缩。比如:

    Content-Encoding: gzip

    (2)Content-Language
    首部字段Content-Language会告知客户端,实体主体使用的自然语言。比如:

    Content-Language: zh-CN

    (3)Content-Length
    首部字段Content-Length表明了实体主体部分的大小(字节)。比如:

    Content-Length: 15000

    (4)Content-Location
    首部字段Content-Length给出与报文主体部分相对应的URI。和首部字段Location不同,Content-Location表示的是报文主体返回资源对应的URI。
    (5)Content-MD5
    首部字段Content-MD5是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完成,以及确认传输到达。
    (6)Content-Range
    针对范围请求,返回响应时使用的首部字段,能告知客户端作为响应返回的实体的哪个部分符合范围请求。比如下面,表示一共10000字节,返回第5001-10000字节:

    Content-Range: bytes 5001-10000/100000

    (7)Content-Type
    首部字段Conteng-Type说明了实体主体内对象的媒体类型,和首部字段Accept一样,字段值用type/subtype形式赋值。
    (8)Expires
    首部字段Expires会将资源失效的日期告知客户端,缓存服务器在接收到含有首部字段Expires的响应后,会以缓存来应答请求,在Expires字段值指定的时间之前,响应的副本会一直被保存。当超过指定的时间后,缓存服务器在请求发送来时,会转向源服务器请求资源。
    (9)Last-Modified
    首部字段Last-Modified指明资源最终修改的时间。

    5、其他首部字段

    (1)X-Frame-Options
    首部字段X-Frame-Options属于HTTP响应首部,用于控制网站内容在其他Web网站的Frame标签内的显示问题。其主要目的是为了防止点击劫持攻击。此字段有两个字段值,分别为DENY和SAMEORIGN。
    (2)X-XSS-Protection
    首部字段X-XSS-Protection属于HTTP响应首部,它是针对跨站脚本攻击的一种对策,用于控制浏览器跨站脚本攻击防护机制的开关。此字段有两个字段值,分别为0和1,对应关和开。
    (3)DNT
    首部字段DNT属于HTTP请求首部,其中DNT是Do Not Track的简称,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法。此字段有两个字段值,分别为0和1,对应同意被追踪和拒绝被追踪。
    (4)P3P
    首部字段P3P属于HTTP响应首部,通过利用P3P技术,可以让Web网站上的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的。

    六、HTTP的安全性

    1、HTTP的不足

    到目前为止,我们看到了HTTP的许多优点,但是它也有不足之处,例如:
    (1)通信使用明文,内容可能会被窃听
    由于HTTP本身不具备加密的功能,所以也无法做到对通信整体进行加密。同时,TCP/IP是可能被窃听的网络,即使报文经过加密,也只是可能让人无法破解而已,加密后的内容还是能被窥视到。
    目前最为普及的加密技术的对象有:

    • 通信的加密:
        HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)和TLS(Transport Layer Security,安全传输层协议)的组合使用,加密HTTP的通信内容。
    • 内容的加密:
        另一种是将参与通信的内容本身加密的方式。由于HTTP协议中没有加密机制,那么就对HTTP协议传输的内容本身加密。

    (2)不验证通信方的身份,因此有可能遭遇伪装
    在HTTP协议通信时,由于不存在确认通信方的步骤,任何人都可以发起请求,服务器不管对方是谁都会进行响应,因此会存在一些隐患:

    • 无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器。即我发送给A服务器的请求,被一台伪装成A的服务器给接收了。
    • 无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。即服务器想发送给我的东西,被一个伪装成我的人给拿走了。
    • 无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限。
    • 无法判定请求是来自何方,出自谁手。
    • 即使是无意义的请求也会照单全收,无法阻止海量请求下的DoS攻击。

    虽然使用HTTP协议无法确定通信方,但是如果使用SSL则可以。SSL不仅提供加密处理,还是用了一种被称为证书的手段,可用户确定方,可以减少个人信息泄露的危险性。
    (3)无法验证报文的完整性,所以有可能已遭篡改
    由于HTTP协议无法证明通信的报文完整性,因此在请求或响应的传输的过程中,即使内容遭到篡改也无法获悉。比如,有可能你从服务器请求一张正常的图片,结果在传输过程中被人改成了一张限制级的图片,结果你就被查水表了。

    2、HTTPS

    为了统一解决上述问题,需要在HTTP上再加入加密处理和认证等机制,最后就诞生了HTTPS了。最常出现HTTPS的地方应该是在购物结算或银行网站等着一些地方。HTTPS并非是应用层的一种新协议,它只是HTTP通信接口部分用SSL和TSL协议代替而已。简而言之,HTTPS就是身披SSL协议的HTTP了。在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。
    那么问题来了,既然HTTPS安全可靠,为什么Web网站不一直使用呢?原因其一就是加密通信会消耗更多的CPU及内存资源,因此只有涉及到重要信息的数据才使用HTTPS。除此之外,购买证书也是要花钱的。

    展开全文
  • 文章目录网络协议TCP/IP协议IP协议TCP协议(传输控制协议)HTTP协议(超文本传输协议)网络参考模型1、OSI参考模型(开放系统互连参考模型 )2、TCP/IP参考模型(简化的七层OSI模型) 网络协议 网络协议为计算机...


    网络协议

    网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
    常见的协议有:TCP/IP协议、IPX/SPX协议、NetBEUI协议 等。
    TCP/IP协议 毫无疑问是这三大协议中最重要的一个,作为互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操作都离不开TCP/IP协议。

    TCP/IP协议

    TCP/IP协议是一个协议集合。 互联网协议是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。它常被通称为TCP/IP协议族,简称TCP/IP。因为该协议家族的两个核心协议:TCP(传输控制协议)和IP(网际协议),为该家族中最早通过的标准。

    TCP使用三次握手协议建立连接。三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

    IP协议

    规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。
    IP实现两个基本功能:寻址和分段。IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

    TCP协议(传输控制协议)

    UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。为了解决这个问题,提高网络可靠性,TCP协议就诞生了。
    TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。

    为了确保信息能够确保准确无误的到达,TCP采用了著名的三次握手策略

    IP协议是找到对方的详细地址,TCP协议是把安全的把数据传输给对方。
    

    HTTP协议(超文本传输协议)

    HTTP协议是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。HTTP是一个客户端和服务器端请求和应答的标准(TCP),它是建立在TCP协议之上的一种应用。

    阅读更多点→:HTTP协议


    网络参考模型

    1、OSI参考模型(开放系统互连参考模型 )

    网络七层协议

    应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
    表示层 数据格式化,代码转换,数据解密
    会话层 解除或建立与其他接点的联系
    传输层 提供端对端的接口 TCP,UDP
    网络层 为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP
    数据链路层 传输有地址的帧,错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
    物理层 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802

    2、TCP/IP参考模型(简化的七层OSI模型)

    网络四层协议:网络访问层、网际互联层、传输层(主机到主机)、和应用层。

    OSI是一个理论上的网络通信模型,而TCP/IP则是实际运行的网络协议。
    

    — The end —

    展开全文
  • HTTP协议之multipart/form-data请求分析

    万次阅读 多人点赞 2012-01-06 15:36:34
    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂...根据http/1.1 rfc 2616的协议规定,我们的请求方式只有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE等,那为为何我们还...

    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。

    首先来了解什么是multipart/form-data请求:

    根据http/1.1 rfc 2616的协议规定,我们的请求方式只有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE等,那为为何我们还会有multipart/form-data请求之说呢?这就要从头来说了。

    http协议大家都知道是规定了以ASCII码传输,建立在tcp、ip协议之上的应用层规范,规范内容把http请求分为3个部分:状态行,请求头,请求体。所有的方法、实现都是围绕如何运用和组织这三部分来完成的。换句话来说就是万变不离其中,只要我们了解了http请求的组成部分后,自然就可以应变任何实际工作中的需求和问题了。

    关于状态行,请求头,请求体等三部分的具体内容,大家可以参考官方的协议文档http://www.faqs.org/rfcs/rfc2616.html,这里主要分析multipart/form-data请求具体是怎么一回事。

    既然http协议本身的原始方法不支持multipart/form-data请求,那这个请求自然就是由这些原始的方法演变而来的,具体如何演变且看下文:

    • multipart/form-data的基础是post请求,即基于post请求来实现的
    • multipart/form-data形式的post与普通post请求的不同之处体现在请求头,请求体2个部分

    multipart/form-data请求头:

    必须包含Content-Type信息,且其值也必须规定为multipart/form-data,同时还需要规定一个内容分割符用于分割请求体中不同参数的内容(普通post请求的参数分割符默认为&,参数与参数值的分隔符为=)。具体的头信息格式如下:

    Content-Type: multipart/form-data; boundary=${bound}    

    其中${bound} 是一个占位符,代表我们规定的具体分割符;可以自己任意规定,但为了避免和正常文本重复了,尽量要使用复杂一点的内容。如:--------------------56423498738365

    样例:

    Content-Type: multipart/form-data; boundary=--------------------56423498738365


    multipart/form-data请求体:

    它也是一个字符串,不过和普通post请求体不同的是它的构造方式。普通post请求体是简单的键值对连接,格式如下:

    k1=v1&k2=v2&k3=v3

    而multipart/form-data则是添加了分隔符、参数描述信息等内容的构造体。具体格式如下:

    ${bound}
    Content-Disposition: form-data; name="Filename"
    
    HTTP.pdf
    ${bound}
    Content-Disposition: form-data; name="file000"; filename="HTTP协议详解.pdf"
    Content-Type: application/octet-stream
    
    %PDF-1.5
    file content
    %%EOF
    ${bound}
    Content-Disposition: form-data; name="Upload"
    
    Submit Query
    ${bound}--

    其中${bound}就是之前请求头信息中的分割符,如果头信息中规定为123,那么这里也要为123(其作用等同于普通post请求中的&符号的作用,即分割参数)。很明显如果按照之前请求头的样例来,则这里的${bound}值应该替换为--------------------56423498738365,注意最后一个${bound}后需要固定添加两个横杆--

    另外可以很容易的看出,这个请求体被分隔符划分为3个部分,而每个部分其实就是一个参数的键值描述(其作用等同于普通post请求的k1=v1的部分),但对参数信息的描述可以比普通post请求更加丰富,这就是为什么multipart/form-data能发送文件的原因。

    每一个部分都是以分隔符开始的,接着是该部分内容的描述信息,然后是一个回车,最后是描述信息的具体内容。如果传送的内容是一个文件的话,那么还会包含文件名信息,以及文件内容的类型;上面的第二个小部分其实是一个文件体的结构,最后的分割符后会以--结尾,表示请求体结束。

    综上,可以知道要发送一个multipart/form-data的请求,其实任何支持post请求的工具或语言都可以支持,只是自己要稍微包装一下便可。

     

    参考资料:

    百度百科: http://baike.baidu.com/view/9472.htm  

    http1.1协议规范: http://www.faqs.org/rfcs/rfc2616.html

    分析工具:httpAnalyzer

     

    ==========================纯文本格式分割线=========================

     

    Header = {"Content-type" : "multipart/form-data, boundary=AaB03x"}
    
    Data =	"--AaB03x\r\n" +
    		"content-disposition: form-data; name=\"field1\"\r\n" +
    		"\r\n" + 
    		"Joe Blow\r\n" +
    		"--AaB03x\r\n" +
    		"content-disposition: form-data; name="pics"; filename=\"file1.txt\"\r\n" +
    		"Content-Type: text/plain\r\n" +
    		"\r\n" +
    		"...binary contents of file1.txt ...\r\n" +
    		"--AaB03x--\r\n"

    其中:...binary contents of file1.txt ... 要替换成真实的文件二进制内容。

    ===========================请求代码分割线============================

     

     

    如何使用Python发送multipart/form-data请求,请查看 http://blog.csdn.net/five3/article/details/74913742

    展开全文
  • 网络协议 -- HTTP协议

    万次阅读 多人点赞 2018-03-09 13:46:25
    一、HTTP协议介绍 1.1 什么是HTTP HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议位于TCP/IP协议栈的传输层。 HTTP是一个客户端和服务器端请求和应答的标准,主要用于从万维网(即WWW...

    一、HTTP协议介绍

    1.1 什么是HTTP

    HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议位于TCP/IP协议栈的应用层。

    HTTP是一个客户端和服务器端请求和应答的标准,主要用于从万维网(即WWW,全称 World Wide Web)服务器传输超文本到本地浏览器之间的请求数据和响应数据的协议。客户端通过使用网页浏览器或者其它的工具发起一个HTTP请求到服务器上指定端口(默认端口为80),服务器在收到请求之后,返回响应内容(文本、图片等)。

    HTTP协议是基于TCP协议来进行数据传输的。

    1.2 HTTP的版本

    HTTP协议已经演化出了很多版本,它们中的大部分都是向下兼容的。客户端在请求的开始告诉服务器它采用的协议版本号,而后者则在响应中采用相同或者更早的协议版本。现在大多使用的都是1.1版本。

    • 1.0版本: HTTP 协议非常老的标准,为了提高系统的效率,HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。正式因为这种特性造成了一些性能上的缺陷。

    • 1.1版本: 克服了HTTP 1.0的缺陷,HTTP 1.1支持持久连接(HTTP/1.1的默认模式使用带流水线的持久连接),在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。同时还增加更多的请求头和响应头来改进和扩充HTTP 1.0的功能(如POST请求头字段等)。

    • 2.0版本: 2015年5月作为互联网标准正式发布。主要新增如下特性:多路复用,二进制分帧,首部压缩,服务端推送。

    三、HTTP消息请求

    3.1 URI、URL、URN

    通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource IdentifiersURI)来标识。我们常用的是URL,那么URI, URL, URN之前有什么区别和联系了?

    URI = Uniform Resource Identifier 统一资源标识符
    URL = Uniform Resource Locator    统一资源定位符
    URN = Universal Resource Name     统一资源名称
    

    三者关系如下图:
    这里写图片描述

    URI用来唯一标识符来标识一个资源,是一个通用的概念,URIURLURN两个子集组成。

    URL通过描述资源的位置来标识资源。

    URN通过资源的名字来标识资源,与其所处的位置无关,这样即使资源的位置发生变动,其URN也不会变化。

    HTTP规范将更通用的概念URI作为其资源标识符,但是实际上,HTTP应用程序处理的只是URI的URL子集.

    3.1 消息请求格式

    这里写图片描述

    3.2 HTTP常见的请求方法

    HTTP消息请求的第一个字段就是“请求方法”,HTTP 1.1 中定义的几种常见的请求方法如下(只列出了常用的):

    • GET
      向服务器获取数据。使用GET请求方法时,消息Body中没有“请求数据”(见上面消息格式的图)部分,所以将需要提交到服务器的数据放在URL中,因此能够提交到服务器的数据会受到URL长度的限制。
      这里写图片描述
     各个浏览器对URL长度的限制如下(这些限制值可能随着浏览器的版本的更新而发生改变,仅供参考):
    1. IE浏览器(Microsoft Internet Explorer) 对URL长度限制是2083(2K+53),超过这个限制,则自动截断(若是form提交则提交按钮不起作用)。
    2. Firefox
    Firefox(火狐浏览器)对URL长度限制是65536字符,但实际上有效的URL最大长度不少于100,000个字符。
    3. Chrome
    chrome对URL长度限制是8182个字符。
    4. Safari
    Safari对URL长度限制是80000字符。
    5. Opera
    Opera浏览器对URL长度限制是190000 字符。
    
    • POST
      向服务器提交数据(例如提交表单或者上传文件)。提交的数据包含在Body中。
      这里写图片描述

    四、HTTP消息响应

    4.1 消息响应格式

    这里写图片描述

    这里写图片描述

    4.2 HTTP状态码

    状态代码由三位数字组成,第一个数字定义了响应的类别,共分五种类别:

    1xx消息—— 请求已被服务器接收,继续处理
    2xx成功 —— 请求已成功被服务器接收、理解、并接受
    3xx重定向 —— 需要后续操作才能完成这一请求
    4xx请求错误 —— 请求含有词法错误或者无法被执行
    5xx服务器错误 —— 服务器在处理某个正确请求时发生错误
    

    常见的状态码有:

    200 OK                        //客户端请求成功
    400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
    403 Forbidden                 //服务器收到请求,但是拒绝提供服务
    404 Not Found                 //请求资源不存在,比如:输入了错误的URL
    500 Internal Server Error     //服务器发生不可预期的错误
    503 Server Unavailable        //由于超载或系统维护,服务器暂时的无法处理客户端的请求
    

    关于HTTP状态码的完整定义见:https://tools.ietf.org/html/rfc2616#page-39

    展开全文
  • HTTP和HTTPS协议,看一篇就够了

    万次阅读 多人点赞 2019-08-03 11:22:16
    一、前言: 我们上网很简单,只需要...当我们打开谷歌浏览器输入www.12306.cn,回车很快在浏览器上就看到页面,其中的浏览器就是客户端,负责接受浏览器的是服务器,两者的通信是通过HTTP协议。 什么是HTTP? ...
  • 本课程包含了socket网络编程常用的所有特性,包括tcp、udp协议的基础编程,广播包,超时连接,多路复用,高并发的epoll多路复用,多线程的服务端。课程讲解理论与实践相结合,实践以代码延时讲解为主。
  • HTTP协议详解

    千次阅读 多人点赞 2013-01-22 14:05:44
    无论Web技术在未来如何发展,理解Web程序之间通信... 本文将对HTTP协议进行详细的实例讲解,内容较多,希望大家耐心看。也希望对大家的开发工作或者测试工作有所帮助。使用Fiddler工具非常方便地捕获HTTP Request和HT
  • HTTP协议分析

    万次阅读 多人点赞 2019-06-23 12:30:24
    HTTP简介 HTTP(HyperText Transfer Protocol)即超文本传输协议,是一... HTTP协议目前最新版的版本是1.1,HTTP是一种无状态的协议,无状态是指Web浏览器与Web服务器之间不需要建立持久的连接,这意味着当一个客户...
  • HTTP协议知识梳理

    万次阅读 2019-03-27 09:08:38
    面试官:请问你了解HTTP协议吗? 前端开发:这不是应该后端清楚的吗? 后端开发:这不是前端知道的吗? 面试官:…… 我们先一本正经的来了解下HTTP(不包含传输层TCP),然后总结其中的精华回复面试官。 ...
  • 这几天在网络上搜罗了一些HTTP协议的相关知识,并对这些知识做了一番整理,由于内容较多,预计会写成数篇博客。文章中大部分内容都来源于网络,其中也加入了一些自身的理解。对有明确来源的都会给出参考链接,但由于...
  • HTTP协议

    万次阅读 2019-05-09 08:58:38
    1.http协议的简介 HTTP,HyperText Transfer Protocol。超文本传输协议,是互联网上应用最为广泛的一种网络协议。基于TCP的协议,HTTP是一个客户端和服务器端请求和应答的标准 2.TCP三次握手过程 SYN是请求同步的...
  • 最全最常用的RTMP、RTSP、HTTP协议流常用直播流地址

    万次阅读 多人点赞 2018-07-24 17:07:52
    一、RTMP、RTSP、HTTP协议 这三个协议都属于互联网TCP/IP五层体系结构中应用层的协议。理论上这三种都可以用来做视频直播或点播。但通常来说,直播一般用RTMP、RTSP。而点播用HTTP。下面分别介绍下三者的特点。 ...
  • http协议详解

    千次阅读 2008-04-17 21:39:00
    张孝祥_JAVA课堂_HTTP协议详解:讲解的不错ftp://61.135.203.11/upload/computer/张孝祥_JAVA课堂_HTTP协议详解第1讲[www.TopSage.com].zipftp://61.135.203.11/upload/computer/张孝祥_JAVA课堂_HTTP协议详解第2讲1...
  • 背景:Jmeter工具使用一段时间后,每次创建脚本都要右键...再来解释http sampler这个采样器,不单可以做http接口请求、还支持web功能请求、webservice的接口测试。所以要先了解所做测试的类型及请求类型: 1、HT...
  • 在服务器方面,使用Web服务器,采用HTTP协议来代替底层的socket,是常见的选择。采用HTTP协议更加除了能得到稳定的服务器支持外,更加可以兼容各种客户端(手机、PC、浏览器)等等。这样实现了一个服务器之后,多个...
  • HTTP协议和HTTPS协议初探

    千次阅读 2016-03-23 09:17:56
    概况HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的...
  • http协议

    千次阅读 2016-05-09 19:39:47
    学习HTTP协议是进入B/S业务最初的一步,正式开启浏览器工作区的服务模式,作为互联网上应用最为广泛的协议之一,以其简单、应用广泛等特点,使得我们很有必要研究一番。个人总结粗浅入门,若要更为深层次学习,建议...
  • Http协议

    千次阅读 2016-05-18 16:06:41
    URIURI是uniform locator identifier的缩写,意义为统一资源标识符.包括两个子分类,一个是URL(uniform resource locator),另... URL格式例 : http://user:pass@www.example.com:80/dir/index.htm?uid=1#ch1 样例 描述
  • HTTP协议:无状态协议

    千次阅读 2017-09-27 20:20:41
    HTTP属于无状态协议 为什么? HTTP是不会为了下一次连接而维护这次连接所传输的信息,这是为了保证服务器内存。 比如客户获得一张网页之后关闭浏览器,然后再一次启动浏览器,再登陆该网站,但是服务器并不知道...
  • TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。 1,http对应于应用层 2,Tcp协议对应于传输层 3,http协议是在Tcp协议之上建立的,http在发起请求时通过tcp协议建立起连接服务器...
  • HTTP 协议详解与HTTP 协议压缩

    千次阅读 2013-05-21 10:01:27
    ... 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当... 本文将对HTTP协议进行详细的实例讲解,内容较多,希望大家耐心看。也希望对大家的开发工作或者测试工作有所帮助。使用Fiddler工具非常方便
  • HTTP协议与攻击

    千次阅读 2018-12-28 09:51:28
    文章目录Web基础TCP/IPHTTP协议概念HTTP协议是个无状态协议HTTP方法持久连接节省通信量Cookie状态管理HTTP报文内的HTTP信息 Web基础 首先总所周知,HTTP是建立在TCP/IP之上的,也就是说,HTTP是TCP/IP的一个子集。 ...
  • Http协议处理器——Http11Processor

    千次阅读 2015-04-19 10:11:52
    Http11Processor组件提供了对Http协议通信的处理,包括对套接字的读取过滤、对http协议的解析并封装成请求对象、http响应对象的生成、套接字的过滤写入等等操作。

空空如也

1 2 3 4 5 ... 20
收藏数 4,019,135
精华内容 1,607,654
关键字:

http协议