美文网首页
HTTP基本知识

HTTP基本知识

作者: 小赵不在 | 来源:发表于2021-03-19 18:09 被阅读0次

    https://blog.csdn.net/qq_37964547/article/details/80314412
    基本概念:
    Http协议是超文本传输协议,它是TCP/IP协议的一个应用层协议,用语定义WEB浏览器与WEB服务器之间交换数据的过程。客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯规格,Http协议用于定义客户端与web服务器通讯的格式。
    基本特点:

    1. 基于请求和响应
      客户端向Http服务器发起一次请求,服务器对请求作出响应,一来一回。
    2. 无连接
      无连接是指在应用层无连接,限制每次连接只处理一次请求,也就是说客户发起请求,服务器做出响应。连接即终止。这么做的原因是http是基于互联网的。服务器可能同时面对数十万,百万的请求。由于请求具有瞬时性,突发性。网页浏览具有联想性等等。造成相邻两次请求之间的关系可能不大。如果采用长时间连接的方式,大部分的网络资源就会被空闲下来,造成浪费。所以讲http协议设计成,请求时建立连接,响应时释放连接,以尽快将资源释放出来去服务其他客户端。
    3. 无状态
      无状态是指http协议没有记忆能力,当一次请求完毕后,它并不会将这次的数据保存下来。
      缺点:下次请求的数据与上次相关联的话,就得进行数据重传,可能会造成每次传输的数据量都很大。
      优点:在不需要上次的数据时,应答比较快。
    4. 简单快速
      协议简单,一来一回就结束(一次请求,一次应答,也是所谓的短连接),使得http服务器的程序规模小,不需要去处理太复杂的逻辑,因而通信速度很快。
    5. 灵活
      http协议允许传输任意类型的数据,类型由报文头部的Content-Type指出。
      总之,http协议的种种特点,都简化http服务器的设计,使其可以接受大量高并发的请求。
    注意:HTTP协议永远是客户端发送请求,服务器端回送响应

    HTTP请求报文
    请求报文分为四部分:请求行、请求报头信息、空行和请求数据4个部分组成

    1、请求行

    http请求行由请求方法字段、URL字段和HTTP协议版本字段 3个字段组成,它们用空格分隔。

    例如:POST http://job.xjtu.edu.cn/companyLogin.do HTTP/1.1
    

    (1)http请求方法
    GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
    常用的时GET和POST
    GET:当客户端要从服务器中读取文档时,使用GET方法。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。
    POST:当客户端给服务器提供信息较多时可以使用POST方法。POST方法将数据发送给目的服务器,并且没有数据长度限制。
    (2)URL字段详解
    协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在”HTTP”后面的“//”为分隔符
    身份验证:其实这一块信息我们看到的比较少,这是一个可选部分,一般的协议(http\https之类)都会使用默认的匿名形式进行数据获取,该部分使用的是@作为该部分的结束符号。
    域名部分:可以使用IP地址或域名,这是一个很关键的部分,这关系到你需要从哪个服务器上去获取资源。
    端口:服务器设定的端口。像URL地址里一般无端口,那是因为服务器使协议的默认端口了,用户使用url访问服务器时,可以省略的。
    路径:访问的资源在服务器下的相对路径,不是在服务器的绝对路径,是服务器上的一个目录或者文件地址。
    参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“uid=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
    片段部分: 该部分与上面的?后面的表单信息本质的区别就是这部分内容不会被传递到服务器端。一般用于页面的锚。就是我们常见的网站右下脚一般有一个回到顶部的按钮,一般就是使用其实现的。

    2、请求报头信息

    3、空行

    4、请求正文

    5、响应报文

    响应行:响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK;
    其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。
    一般的常见状态码有以下:
    100~199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。
    200~299:表示成功接收请求并已完成整个处理过程。常用200
    300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(意味着你请求我,我让你去找别人),307和304(我不给你这个资源,自己拿缓存)
    400~499:客户端的请求有错误,常用404(意味着你请求的资源在web服务器中没有)403(服务器拒绝访问,权限不够)
    500~599:服务器端出现错误,常用500
    更详细的状态码信息

    响应头:响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
    常见的响应头部信息如下:
    Allow:服务器支持哪些请求方法(如GET、POST等)。
    Content-Encoding:文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE4、IE5才支持它。因此,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提供了一个专用的方法setContentType。
    Date:当前的GMT时间,例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。
    Expires:告诉浏览器把回送的资源缓存多长时间,-1或0则是不缓存。
    Last-Modified:文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。
    Location:这个头配合302状态码使用,用于重定向接收者到一个新URI地址。表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。
    Refresh:告诉浏览器隔多久刷新一次,以秒计。
    Server:服务器通过这个头告诉浏览器服务器的类型。Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。Servlet一般不设置这个值,而是由Web服务器自己设置。
    Set-Cookie:设置和页面关联的Cookie。Servlet不应使用response.setHeader(“Set-Cookie”, …),而是应使用HttpServletResponse提供的专用方法addCookie。
    Transfer-Encoding:告诉浏览器数据的传送格式。
    WWW-Authenticate:客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如,response.setHeader(“WWW-Authenticate”, “BASIC realm=\”executives\”“)。注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问。

    响应体:响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码。

    三、HTTP工作流程

    一次HTTP操作称为一个事务,其工作过程可分为四步:
    (1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
    (2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
    (3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
    (4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
    如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

    相关文章

      网友评论

          本文标题:HTTP基本知识

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