美文网首页
HTTP协议学习总结

HTTP协议学习总结

作者: Mr_魏 | 来源:发表于2017-08-22 17:29 被阅读0次

    HTTP协议学习总结

    友情提示,本文档的图床使用极简图床进行图片存储,默认存储到七牛云空间


    本文是对HTTP协议详解的学习记录贴,非原创,向原作者致敬!!

    正文

    • HTTP是超文本传输协议,并非某种技术

    • HTTP的网络传输实现依靠的是TCP协议

    • MIME类型有上千种,是一种文本标记,用对象类型/子类型表示:xml文档 .xml text/xml

    • URL是全球唯一定位符,有两种方式

      • URL

      组成方式:协议://ip地址:端口号(可省略)/资源标识符?参数
      举个栗子:https://portal.qiniu.com/bucket/weihao/index

      • URN

      常用来做下拉菜单,不常用


    • HTTP的请求方法 不光有 get和post两种,具体分为以下:

      • HEAD 获得服务器头部 不含主体
      • GET 从服务器获得文档 不含主体
      • POST 向服务器提交数据 包含主体
      • PUT 请求存储在服务器 包含主体
      • DELETE 从服务器删除文档 不包含主体
      • TRACE 从服务器获得报文跟踪 不包含主体
      • OPTIONS 决定服务器操作类型 不包含主体
    • HTTP的工作方式
      客户端发送<font color='red' >request</font>请求到<font color='red' face='宋体'>服务端</font>,通报报文方式,服务器端返回结果(json格式或者html标签)给客户端浏览器,浏览器进行解析后展示数据或者<font color='red'>页面元素</font>

    • HTTP状态码 代表了服务器的返回结果的标识,常用的有以下几个:

      • 200 请求成功并返回
      • 302 请求被重定向 返回头有location确定重定向地址
      • 304 上次请求被缓存,这次直接在缓存中获取 很多<font color ='red'>静态文件</font>会被缓存

      如果你不想使用缓存数据,比如很多js或者css被修改了可以使用ctrl+F5进行强制刷新浏览器

      • 400 提交的参数和服务器映射方法接受的参数不一致 (4开头为客户端错误)
      • 403 服务器接收到了请求,但是拒绝提供服务
      • 404 页面不存在
      • 500 服务器处理请求时内部发生了错误
      • 503 服务端暂时 不能正确处理,稍后可能会恢复(比如部署IIS,webconfig有问题的时候会报)
    • HTTP报文(F12后的请求详情页)

      按照接收方和发送方可以分为:

      • 请求报文
      • 相应报文
    • HTTP的报文组成

      • 请求行
      • 请求头
      • 报文体

      其中1,2,3组成了请求行,既请求地址,请求方法,和网络协议
      4是具体的请求头,里面的内容采用键值对的方式进行表示

    参数是报文体,用来携带请求参数,也可以通过get方式的?后携带
    • 对于HTTP的get请求有个显著的特点就是 body是空的

    • TCP/IP是HTTP的传输依赖.HTTP处于TCP/IP的应用层范围
      TCP/IP的层分类

      • 网络接口层
      • 网络层
      • 传输层
      • 应用层

    TCP的补充说明:HTTP位于TCP的上层,TCP其实也位于IP的上层.

    • HTTP协议发送报文前需要 建立TCP/IP连接,其中IP地址类似于小区地址,而端口号相当于门牌号,两者确定唯一的网络地址

    • HTTP代理是位于服务器和客户端中间实体,作为中间人角色转发HTTP请求

    对代理服务器的补充: 目前HTTP支持两种发送方式

    方式一 服务端和客户端直连
    方式二 服务端和客户端无法直接连接,需要通过代理服务器 连接,以突破网络限制

    • 代理服务器的访问不仅可以突破IP网络限制,而且可以提高网速,原理是,当大部分请求url相同时,网络代理服务器一般会做缓存处理
      下一次其他用户访问时,缓存会大大提高访问速度

    • 代理服务器也可以隐藏真实IP地址

    • HTTP请求时无状态的.对于来自同一个客户端的两次相同请求,http服务器分辨不出,所以引入了<font color='red'>Cookie(缓存)</font>的概念

    • 一个请求无法返回呈现出的页面,但请求返回的html中有其他引用,比如jpg,css,javascript等静态文件时,客户端会再次发送请求


    • Request头详细信息:

      • <font color='red'size='4'>cache头域</font>
        • If-Modified-Since

          客户端第一次发送请求时会缓存页面到本地文件,并记录文件修改时间,第二次发送时会将该时间作为比对字符串和服务器返回的Last-Modified(最后修改时间)做比较
          如果时间相同,则使用本地缓存,如果时间不同,则替换本地文件并保存缓存

        • If-None-Match

          该参数在HTTP1.1协议上产生,是为了更精准的细化确定缓存资源,If-Modified-Since因为采用的时间戳,所以精度有限,只精确到秒,所以只适用于不经常变化的静态资源文件.  
          这个参数需要和response头信息中的`Etag`配合验证,在第一次请求时,服务器会设置Etag,之后用于二次请求时的验证依据  
          

          关于该参数的具体使用,请参考REST笔记(五):你应该知道的HTTP头------ETag

        • cache-control
          该参数是用来指定response头的缓存机制

           ![](http://or316jtnw.bkt.clouddn.com//17-8-22/48059186.jpg)    
           常用的配置是:  
          
        • Cache-Control:Public
          可以被任何缓存所缓存()

        • Cache-Control:Private
          内容只缓存到私有缓存中

        • Cache-Control:no-cache
          所有内容都不会被缓存 (对于每次返回的数据不同的请求)

    • <font color='red'size='4'>Clint头域(浏览器声明部分)</font>

      • Accept
        客户端发送请求时,告诉服务端 接受什么样的返回数据,*/*代表接受所有类型参数,如果不做特别处理,一般浏览器的Accept接受*/*(比如AJAX特别指定参数类型)

      • Accept-Language
        浏览器声明的自己可以接受的语言类型

      • Accept-Encoding
        浏览器声明的可以接受的压缩方式

      • User-Agent
        告诉服务器当前客户端的操作系统的版本号,位数及浏览器的相关信息

    • <font color='red'size='4'>Cookie/Login 头域</font>


      将cookie值发送给服务器,在header信息中属于重要的级别
    • <font color='red'size='4'>Entity头域</font>

      • Content-Type
        描述发送或者接受的实体类型

      • Content-Length
        描述发送或者接受的实体长度

    • <font color='red'size='4'>Miscellaneous 头域</font>
      提供了上下文服务器地址,可以通过Referer参数查询该链接的产生是通过何种路径引导过来的(上个访问的服务器地址)

    • <font color='red'size='4'>Transport 头域</font>
      • Host
        发送请求时的必备参数之一, 指定了请求资源的internet地址和端口号(端口号可以省略)

      • Connection
        指定了获取TCP/IP连接后的处理方式 分为以下两种

      • Connection: keep-alive
        完成请求后,TCP/IP连接保持连接,当有新的请求产生时,依然使用该TCP/IP连接

      • Connection: close
        当一个请求完成后,立马关掉TCP/IP请求,当有新的请求产生时,会重新进行TCP/IP连接


    • Response头详细信息:

      • <font color='red'size='4'>cache头域</font>

        • Data
          生成消息的具体时间和日期

        • Expires
          缓存过期时间设置(多用于静态资源)


      • <font color='red'size='4'>Cookie/Login头域</font>

        • P3P
          作用: 用于跨域设置Cookie, 这样可以解决iframe跨域访问cookie的问题

          • Set-Cookie
            非常重要的header, 用于把cookie 发送到客户端浏览器, 每一个写入cookie都会生成一个Set-Cookie.
      • <font color='red'size='4'>Entity头域</font>

        • ETag
          详情参考 request头中的If-None-Match
        • Last-Modified
          详情参考 request头中的'If-Modified-Since'
        • Content-Type
          描述了 服务器返回的实体类型
        • Content-Length
          描述了实体长度
        • Content-Encoding
          描述了服务端的压缩方式
        • Content-Language
          描述了服务端返回的语言类型
      • <font color='red'size='4'>Miscellaneous 头域</font>

        • Server:

          作用:指明HTTP服务器的软件信息

          例如:Server: Microsoft-IIS/7.5 或者 Apache

        • X-AspNet-Version
          如果.net平台开发,会有这个选项,说明了.net的版本号

        • X-Powered-By:
          说明了服务端采用的后台编程语言类型 ,下图中百度采用的是HPHP

    • <font color='red'size='4'>Transport头域</font>
      本部分和request对应的该部分内容相同,请翻阅参考

    • <font color='red'size='4'>Location头域</font>
      location用来描述304的具体重定向url地址


    • HTTP1.1的默认 TCP连接方式是保持TCP/IP连接,连接时间取决于发布服务器平台(比如APACHE,IIS等的详细设置) Connection:keep-active

    随笔

    相关文章

      网友评论

          本文标题:HTTP协议学习总结

          本文链接:https://www.haomeiwen.com/subject/wyildxtx.html