Http请求

作者: 狒狒_b5c7 | 来源:发表于2018-02-06 21:56 被阅读0次

    HTTP简介

    HTTP协议,全称为Hyper Text Transfer Protocol,中文名为超文本传输协议,是互联网中最常用的一种网络协议。

    当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方怎么干。HTTP协议传输的消息也是这样规定的,每一个HTTP包都分为HTTP头和HTTP体两部分,消息体是可选的,而消息头是必须的。每当我们打开一个网页,在上面点击右键,选择“查看源文件”,这时看到的HTML代码就是HTTP的消息体,那么消息头可以通过浏览器的开发工具或者插件可以看到,如果火狐的Firebug,IE的Httpwatch。

    客户端通过发送 HTTP 请求向服务器请求对资源的访问。 它向服务器传递了一个数据块,也就是请求信息,HTTP 请求由三部分组成:请求行、 请求头和请求正文。

    请求行:请求方法 URI 协议/版本

    请求头(Request Header)
    请求正文

    下面是一个HTTP请求的数据:

    POST /index.php HTTP/1.1
    Host: localhost
    User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-cn,zh;q=0.5
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Referer: <a target=_blank href="http://localhost/" style="color: rgb(51, 102, 153); text-decoration: none;">http://localhost/</a>
    Content-Length:25
    Content-Type:application/x-www-form-urlencoded
     
    username=aa&password=1234
    

    HTTP协议中最主要的是HTTP/1.0HTTP/1.1,其中HTTP/1.0是第一个得到广泛使用的版本,而1.1逐渐成为当前使用的主流。

    HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:


    Client-Server.jpg
    1、HTTP请求行:请求方法URI协议/版本

    HTTP1.0定义了三种请求方法: GET, POSTHEAD方法。
    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACECONNECT 方法。

    HTTP1.1 中的请求方式:

    序号 方法 作用
    1 GET 请求获取由 Request-URI 所标识的资源
    2 POST 请求服务器接收在请求中封装的实体,并将其作为由 Request-Line中的 Request-URI 所标识的资源的一部分
    3 HEAD 请求获取由 Request-URI 所标识的资源的响应消息报头
    4 PUT 请求服务器存储一个资源,并用 Request-URI 作为其标识符
    5 DELETE 请求服务器删除由 Request-URI 所标识的资源
    6 TRACE 请求服务器回送到的请求信息,主要用于测试或诊断
    7 CONNECT 保留将来使用
    8 OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
    2、请求头

    每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

    HTTP最常见的请求头如下:

    Transport 头域
    Connection:
    作用:表示是否需要持久连接。

    例如: Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的 网页,会继续使用这一条已经建立的连接

    例如: Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。

    HTTP响应格式

    在接收和解释请求消息后,服务器会返回一个 HTTP 响应消息。与 HTTP 请求类似,HTTP 响应也是由三个部分组成,分别是:状态行、消息报头和响应正文。如:

    <p>HTTP/1.1 200 OK
    Date: Sun, 17 Mar 2013 08:12:54 GMT
    Server: Apache/2.2.8 (Win32) PHP/5.2.5
    X-Powered-By: PHP/5.2.5
    Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Content-Length: 4393
    Keep-Alive: timeout=5, max=100
    Connection: Keep-Alive
    Content-Type: text/html; charset=utf-8</p><p>
    <html>
    <head>
    <title>HTTP响应示例<title>
    </head>
    <body>
    Hello HTTP!
    </body>
    </html></p><p> </p>
    
    1、状态行

    状态行由协议版本、数字形式的状态代码,及相应的状态描述组成,各元素之间以空格分隔,结尾时回车换行符,格式如下:

    HTTP-Version Status-Code Reason-Phrase CRLF

    HTTP-Version 表示服务器 HTTP 协议的版本,Status-Code 表示服务器发回的响应代码,Reason-Phrase 表示状态代码的文本描述,CRLF 表示回车换行。例如:

    HTTP/1.1 200 OK (CRLF)

    状态代码与状态描述

    状态代码由 3 位数字组成, 表示请求是否被理解或被满足,状态描述给出了关于状态码的简短的文字描述。状态码的第一个数字定义了响应类别,后面两位数字没有具体分类。第一个数字有 5 种取值,如下所示。

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

    常见状态代码、状态描述、说明:
    200 OK //客户端请求成功
    400 Bad Request //客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
    403 Forbidden //服务器收到请求,但是拒绝提供服务
    404 Not Found //请求资源不存在,eg:输入了错误的URL
    500 Internal Server Error //服务器发生不可预期的错误
    503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    2、响应正文

    响应正文就是服务器返回的资源的内容,响应头和正文之间也必须用空行分隔。如:

    <html>  
    <head>  
    <title>HTTP响应示例<title>  
    </head>  
    <body>  
    Hello HTTP!  
    </body>  
    </html> 
    
    3 、响应头信息

    HTTP最常见的响应头如下所示:
    Cache头域
    Date:

    作用:生成消息的具体时间和日期,即当前的GMT时间。
    例如: Date: Sun, 17 Mar 2013 08:12:54 GMT

    浏览器缓存

    浏览器缓存:包括页面html缓存和图片js,css等资源的缓存。如下图,浏览器缓存是基于把页面信息保存到用户本地电脑硬盘里。


    浏览器缓存

    缓存的优点:
    1)服务器响应更快:因为请求从缓存服务器(离客户端更近)而不是源服务器被相应,这个过程耗时更少,让服务器看上去响应更快。
    2)减少网络带宽消耗:当副本被重用时会减低客户端的带宽消耗;客户可以节省带宽费用,控制带宽的需求的增长并更易于管理。

    相关文章

      网友评论

        本文标题:Http请求

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