HTTP协议学习总结

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的工作方式
    客户端发送request请求到服务端,通报报文方式,服务器端返回结果(json格式或者html标签)给客户端浏览器,浏览器进行解析后展示数据或者页面元素

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

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

    如果你不想使用缓存数据,比如很多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服务器分辨不出,所以引入了Cookie(缓存)的概念

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


  • Request头详细信息:

    • cache头域
      • 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
        所有内容都不会被缓存 (对于每次返回的数据不同的请求)

  • Clint头域(浏览器声明部分)

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

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

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

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

  • Cookie/Login 头域


    将cookie值发送给服务器,在header信息中属于重要的级别

  • Entity头域

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

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

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

  • Transport 头域
    • Host
      发送请求时的必备参数之一, 指定了请求资源的internet地址和端口号(端口号可以省略)

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

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

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


  • Response头详细信息:

    • cache头域

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

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


    • Cookie/Login头域

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

        • Set-Cookie
          非常重要的header, 用于把cookie 发送到客户端浏览器, 每一个写入cookie都会生成一个Set-Cookie.
    • Entity头域

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

      • Server:

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

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

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

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

  • Transport头域
    本部分和request对应的该部分内容相同,请翻阅参考

  • Location头域
    location用来描述304的具体重定向url地址


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

随笔

你可能感兴趣的:(HTTP协议学习总结)