zoukankan      html  css  js  c++  java
  • 【积硅计划】http协议基础

    http:超文本传输协议,它允许将超文本标记(html)文档从web服务器传送到浏览器。目前版本HTTP/1.1
     
    http请求过程
     
    proxy:代理服务器,网络信息的中转站。功能如下:
                 1.提高访问速度(缓存)
                 2.突破限制(FQ)
                 3.隐藏身份
     
    URl:统一资源定位符
             基本格式:schema://host[:port#]/path/…/[;url-params][?query-string][#anchor]
                              schema--底层协议 http,https,ftp
                              host--web服务器的ip或域名
                              port#--web服务器的端口,默认是80,可以省略
                              path,url-params--访问资源路径及参数
                              query-string--发送到服务器的get数据
                              anchor--锚
    http协议是有连接无状态,对于服务器来说,同一个客户端这次请求和上一次请求没有对应关系,它不知道两次请求来自同一个客户端。
     
    http消息结构
            request消息包括3部分:1、请求行  2、请求 header 3、body  其中header和body之间有空行
             method--请求的方法,get或者post
             path-to-resource--请求的资源
             http/version-number--http协议的版本号
             当method为get时,body为空
    response消息包括3部分:1、响应行 2、响应 header 3、body

                       http/version-number--http协议的版本号

                       status code & message--状态码及说明
    get和post的区别
           http定义了4种基本的与服务器交互的方法GET、POST,PUT、DELETE,分别对应查、改、增、删
           区别如下:
                   1.get提交的数据放在url上,post提交的数据放在request消息的body中
                   2.get提交的数据有大小限制(浏览器对url长度有限制),post没有限制
    状态码
          http/1.1中定义了5类状态码,状态码由三位数字组成,其中第一个数字定义响应的类别
                  1XX  提示信息 -- 表示请求已被成功接收,继续处理 -- 100~101
                  2XX  成功 -- 表示请求已被成功接收、理解、接受 -- 200~206
                  3XX  重定向 -- 要完成请求必须做进一步的处理 -- 300~307
                  4XX  客户端错误 -- 请求有语法错误或请求无法实现 -- 400~417
                  5XX  服务器错误 -- 服务器未能实现合法的请求 -- 500~505
         状态码详解
    100
    Continue继续
    收到了请求的起始部分,客户端应该继续请求
    101
    Switching Protocols切换协议
    服务器正根据客户端的指示将协议切换成Update Header列出的协议
    200
    ok
    服务器成功处理了请求
    201
    Created以创建
    对于那些要服务器创建对象的请求来说,资源已创建完毕。
    202
    Accepted已接受
    请求已接受, 但服务器尚未处理
    203
    Non-Authoritative Information非权威信息
    服务器已将事务成功处理,只是实体Header包含的信息不
    是来自原始服务器,而是来自资源的副本。
    204 No Content无内容 Response中包含一些Header和一个状态行, 但不包括实体的主题内容
    (没有response body
    205 Reset Content重置内容 另一个主要用于浏览器的代码。意思是浏览器应该重置当前页面上
    所有的HTML表单。
    206 Partial Content部分内容 部分请求成功
    300 Multiple Choices多项选择 客户端请求了实际指向多个资源的URL。这个代码是和一个选项列表一
    起返回的,然后用户就可以选择他希望的选项了
    301 Moved Permanently已移走 请求的URL已移走。Response中应该包含一个Location URL, 说明资源
    现在所处的位置
    302 Found已找到 与状态码301类似。但这里的移除是临时的。 客户端会使用Location中
    给出的URL,重新发送新的HTTP request
    303 See Other参见其他 类似302
    304 Not Modified未修改 客户的缓存资源是最新的, 要客户端使用缓存
    305 Use Proxy使用代理 必须通过代理访问资源, 代理的地址在Response 的Location中
    306 未使用 未使用
    307 Temporary Redirect临时重定向 类似302
    400 Bad Request坏请求 告诉客户端,它发送了一个错误的请求。
    401 Unauthorized未授权 需要客户端对自己认证
    402 Payment Required要求付款 这个状态还没被使用, 保留给将来用
    403 Forbidden禁止 请求被服务器拒绝了
    404 Not Found未找到 未找到资源
    405 Method Not Allowed不允许使用的方法 不支持该Request的方法
    406 Not Acceptable无法接受  
    407 Proxy Authentication Required请求
    进行代理认证
    与状态码401类似, 用于需要进行认证的代理服务器
    408 Request Timeout请求超时 如果客户端完成请求时花费的时间太长, 服务器可以回送这个状态码并
    关闭连接
    409 Conflict冲突 发出的请求在资源上造成了一些冲突
    410 Gone消失了 服务器曾经有这个资源,现在没有了, 与状态码404类似
    411 Length Required要求长度指示 服务器要求在Request中包含Content-Length。
    412 Precondition Failed先决条件失败  
    413 Request Entity Too Large请求实体太大 客户端发送的实体主体部分比服务器能够或者希望处理的要
    414 Request URI Too Long请求的url太长 客户端发送的请求所携带的URL超过了服务器能够或者希望处理的长度
    415 Unsupported Media Type不支持的媒体类型 服务器无法理解或不支持客户端所发送的实体的内容类型
    416 Requested Range Not Satisfiable所请求
    的范围未得到满足
     
    417 Expectation Failed无法满足期望  
    500 Internal Server Error内部服务器错误 服务器遇到一个错误,使其无法为请求提供服务
    501 Not Implemented未实现 客户端发起的请求超出服务器的能力范围(比如,使用了服务器不支持的请求
    方法)时,使用此状态码。
    502 Bad Gateway网管鼓掌 代理使用的服务器遇到了上游的无效响应
    503 Service Unavailable未提供此服务 服务器目前无法为请求提供服务,但过一段时间就可以恢复服务
    504 Gateway Timeout网关超时 与状态吗408类似, 但是响应来自网关或代理,此网关或代理在等待另一台
    服务器的响应时出现了超时
    505 HTTP Version Not Supported
    不支持的http版本
    服务器收到的请求使用了它不支持的HTTP协议版本。 有些服务器不支持HTTP
    早期的HTTP协议版本,也不支持太高的协议版本

    request header主要内容

            Cache头域
                            If-Modified-Since -- 发送浏览器缓存页面的最后修改时间
                            If-None-Match -- 与Etag一起使用,用于服务器辨别缓存文件是否过期。如果过期返回200及新的Etag,否则返回304告诉浏览器使用缓存
                           Pragma:no-cache -- 防止页面被缓存
                           Cache-Control:public(可以被任何缓存所缓存)、private内容只能被缓存至私有缓存中、no-cache(所有内容不会被缓存)
             Client头域
                           Accept -- 代表浏览器可以接受的媒体类型,如text/html
                           Accept-Encoding -- 浏览器申明自己接受的压缩方法,如gzip,defalte
                           Accept-Language -- 浏览器申明自己接受的语言
                           Accept-Charset -- 浏览器申明自己接受的字符集
                           User-Agent -- 告诉服务器客户端使用的操作系统和浏览器的名称和版本
             Cookie/Login头域
                           Cookie -- 将cookie值发送到服务器
             Entity头域
                           Content-Length -- 发送到服务器的内容长度
                           Content-Type -- 发送到服务器的内容类型
              Miscellaneous
                           Referer -- 告诉服务器我是从哪个链接过来的
              Transport头域
                           Connection -- keep-alive(内容传输完毕后保持tcp连接)、close(内容传输完毕后关闭tcp连接)
                           Host -- 指定被请求资源的 主机和端口号
    response header主要内容
     
             Cache头域
                           Date -- 生成消息的具体时间和日期
                           Expires -- 本地缓存的过期时间
                           Vary -- 
              Cookie/Login头域
                           P3P -- 用于跨域设置cookie,可以解决iframe跨域访问cookie的问题
                           Set-Cookie -- 将cookie值放松到客户端浏览器
              Entity头域
                           ETag -- 与If-None_Match配合使用
                           Last-Modified -- 指示资源的最后修改时间
                           Content-Type -- 告诉浏览器响应的类型和字符集
                           Content-Length -- 只是响应正文的长度
                           Content-Encoding -- 告诉浏览器服务器使用的压缩方法
                           Content-Language -- 只是响应的语言
               Miscellaneous头域
                           Server -- 服务器的软件信息
                           X-AspNet-Version -- Asp.Net的版本
                           X-Powered-By -- 指示网站用什么技术开发的
               Transport头域
                           Connection --  keep-alive(内容传输完毕后保持tcp连接)、close(内容传输完毕后关闭tcp连接) 
                Location头域
                          Location -- 告诉浏览器需要重定向的新url
     
    HTTP压缩的过程
               1. 浏览器发送http request给web服务器,request中有Content-Encoding:gzip/deflate,告诉浏览器支持压缩
               2. web服务器接受到request后,生成原始的response,其中有原始的Content-Type和Content-Length
               3. web服务器通过gzip,对response进行压缩编码,编码后的header中有压缩后的Content-Type和Content-Length,并且增加               Accept-Encoding,然后把response发送给浏览器
               4. 浏览器接到respon后,根据Content-Encoding来进行解码,获得原始response后显示网页
      
    *内容编码类型(Content-Encoding)
                gzip -- 采用GNU zip压缩
                compress -- 采用unix的文件压缩程序
                deflate -- 采用zlib格式压缩
                identity -- 表明没有对实体进行编码

                gzip,compress,deflate都是无损压缩算法,可以减少传输报文的大小,不会导致信息损失。其中gzip效率最高

              *压缩的好处
                         http压缩对纯文本可以压缩至原内容的40%,从而节省60%的数据传输
     

     
     
     
                
                       
     
     
     
  • 相关阅读:
    mongodb基础系列——数据库查询数据返回前台JSP(一)
    整型数组处理算法(十二)请实现一个函数:最长顺子。[风林火山]
    学习C++服务端一:MySql与C++
    【算法】深度优先搜索(DFS)III
    DOS cmd
    C# wpf程序获取当前程序版本
    Climbing Stairs
    Java深入
    非对称算法,散列(Hash)以及证书的那些事
    省市区镇(能够选四级)联动点击自己主动展开下一级
  • 原文地址:https://www.cnblogs.com/icewater506/p/3416782.html
Copyright © 2011-2022 走看看