• HTTP请求报文、响应报文


    HTTP请求报文


    HTTP请求报文由3部分组成(请求行+请求头+请求体):

     

    请求行:
    是请求方法,GETPOST是最常见的HTTP方法,除此以外还包括DELETEHEADOPTIONSPUTTRACE
    为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL
    是协议名称及版本号。
    请求头:
    HTTP的报文头,报文头包含若干个属性,格式为属性名:属性值,服务端据此获取客户端的信息。
    与缓存相关的规则信息,均包含在header
    请求体:
    是报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。

    HTTP响应报文
    HTTP的响应报文也由三部分组成(响应行+响应头+响应体)

    响应行:
    报文协议及版本;
    状态码及状态描述;
    响应头:
    响应报文头,也是由多个属性组成;
    响应体:
    响应报文体,即我们真正要的干货

     

    响应状态码
      和请求报文相比,响应报文多了一个响应状态码,它以清晰明确的语言告诉客户端本次请求的处理结果。
    HTTP的响应状态码由5段组成:
    1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急...
    2xx 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息.
    3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。
    4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。
    5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。
    以下是几个常见的状态码:
    200 OK
    你最希望看到的,即处理成功!
    303 See Other
    我把你redirect到其它的页面,目标的URL通过响应报文头的Location告诉你。
    304 Not Modified
    告诉客户端,你请求的这个资源至你上次取得后,并没有更改,你直接用你本地的缓存吧,我很忙哦,你能不能少来烦我啊!
    404 Not Found
    你最不希望看到的,即找不到页面。如你在google上找到一个页面,点击这个链接返回404,表示这个页面已经被网站删除了,google那边的记录只是美好的回忆。
    500 Internal Server Error
    看到这个错误,你就应该查查服务端的日志了,肯定抛出了一堆异常,别睡了,起来改BUG去吧!
    ◆200 (OK): 找到了该资源,并且一切正常。
    ◆304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
    ◆401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
    ◆403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
    ◆404 (NOT FOUND): 在指定的位置不存在所申请的资源。

     

    常见的HTTP响应报文头属性

     

    Cache-Control
    响应输出到客户端后,服务端通过该报文头属告诉客户端如何控制响应内容的缓存。
    常见的取值有privatepublicno-cachemax-ageno-store,默认为private
    private: 客户端可以缓存
    public: 客户端和代理服务器都可缓存(前端的同学,可以认为publicprivate是一样的)
    max-age=xxx: 缓存的内容将在 xxx 秒后失效
    no-cache: 需要使用对比缓存来验证缓存数据(后面介绍)
    no-store: 所有内容都不会缓存
    默认为private,缓存时间为31536000秒(365天)也就是说,在365天内再次请求这条数据,都会直接获取缓存数据库中的数据,直接使用。

     

    ETag


      一个代表响应服务端资源(如页面)版本的报文头属性,如果某个服务端资源发生变化了,这个ETag就会相应发生变化。它是Cache-Control的有益补充,可以让客户端更智能地处理什么时候要从服务端取资源,什么时候可以直接从缓存中返回响应。


    Location
    我们在JSP中让页面Redirect到一个某个A页面中,其实是让客户端再发一个请求到A页面,这个需要Redirect到的A页面的URL,其实就是通过响应报文头的Location属性告知客户端的,如下的报文头属性,将使客户端redirectiteye的首页中:
    Location: http://www.iteye.com
    Set-Cookie
    服务端可以设置客户端的Cookie,其原理就是通过这个响应报文头属性实现的:
    Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1

  • 相关阅读:
    HDOJ 4747 Mex
    HDU 1203 I NEED A OFFER!
    HDU 2616 Kill the monster
    HDU 3496 Watch The Movie
    Codeforces 347A A. Difference Row
    Codeforces 347B B. Fixed Points
    Codeforces 372B B. Hungry Sequence
    HDU 1476 Sudoku Killer
    HDU 1987 How many ways
    HDU 2564 词组缩写
  • 原文地址:https://www.cnblogs.com/9420i/p/10265121.html
Copyright © 2020-2023  润新知