zoukankan      html  css  js  c++  java
  • HTTP协议

    最近开始了基础的巩固复习::记录一下学习过程吧

    第二篇从http协议开始

    http 超文本传输协议  基于TCP/IP通信协议来传输数据 

    它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应

    经典的响应模型

    请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。

    什么是MIME类型?-在把输出结果传送到浏览器上的时候,浏览器必须启动适当的应用程序来处理这个输出文档。这可以通过多种类型MIME(多功能网际邮件扩充协议)来完成。在HTTP中,MIME类型被定义在Content-Type header中。

    请求方式:::

        GET      请求获取由Request-URI所标识的资源。
        POST     在Request-URI所标识的资源后附加新的数据。
        HEAD     请求获取由Request-URI所标识的资源的响应消息报头。
        PUT      请求服务器存储一个资源,并用Request-URI作为其标识。
        DELETE   请求服务器删除由Request-URI所标识的资源。
        TRACE    请求服务器回送收到的请求信息,主要用语测试或诊断。
        CONNECT  保留将来使用。
        OPTIONS  请求查询服务器的性能,或查询与资源相关的选项和需求。
        Request-URI     统一资源标识。
        HTTP-Version    HTTP的版本。
        CRLF      回车换行。(/r/n)
    //////////////////////////////////////////////////////////////////////////////////////////
      HEAD就像GET,只不过服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。
      HEAD更高效
    • HTTP请求的基本方法和产生的请求结果

      请求:

      组成 请求行,消息报头,请求正文

      又是经典:

      响应:

      状态行、消息报头、响应正文

      状态行由协议版本、数字形式的状态代码、及相应的状态描述,各元素之间以空格分隔

      消息报头,用来说明客户端要使用的一些附加信息(Content-Type就在消息报头里:指定了MIME类型)

      状态码:::

     1xx:   指示信息—表示请求已接收,继续处理。
     2xx:   成功—表示请求已经被成功接收、理解、接受。
     3xx:   重定向—要完成请求必须进行更进一步的操作。
     4xx:   客户端错误—请求有语法错误或请求无法实现。
     5xx:   服务器端错误—服务器未能实现合法的请求

       200      OK    客户端请求成功

       400      Bad Request   由于客户端请求有语法错误,不能被服务器所理解。

       401      Unauthonzed   请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用

       403      Forbidden   服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因

       404      Not Found   请求的资源不存在,例如,输入了错误的URL。

       500     Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。

       503      Service Unavailable   服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。

     

    常见的响应头:

    直接摘自https://www.cnblogs.com/laoluoits/p/10855051.html

    Allow:服务器支持哪些请求方法(如GET、POST等);
    
    Content-Encoding:文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面;
    
    Content-Length:表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容;
    
    Content-Type: 表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentTyep。 可在web.xml文件中配置扩展名和MIME类型的对应关系;
    
    Date:当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦;
    
    Expires:指明应该在什么时候认为文档已经过期,从而不再缓存它。
    
    Last-Modified:文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置;
    
    Location:表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302;
    
    Refresh:表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。注意这种功能通常是通过设置HTML页面HEAD区的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">实现,这是因为,自动刷新或重定向对于那些不能使用CGI或Servlet的HTML编写者十分重要。但是,对于Servlet来说,直接设置Refresh头更加方便。注意Refresh的意义是“N秒之后刷新本页面或访问指定页面”,而不是“每隔N秒刷新本页面或访问指定页面”。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV="Refresh" ...>。注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。

     url:::::

  • 相关阅读:
    FileItem类的常用方法
    spring mvc(注解)上传文件的简单例子
    Linux下安装Tomcat服务器和部署Web应用
    防止表单重复提交的几种策略
    Rancher 2.0 学习目录
    Prometheus 学习目录
    k8s学习目录
    python之路——目录
    Mac OS X生成RSA公钥和私钥
    Django设置 DEBUG=False后静态文件无法加载解决
  • 原文地址:https://www.cnblogs.com/tiaopidejun/p/12494872.html
Copyright © 2011-2022 走看看