美文网首页
计算机网络基础:HTTP 协议

计算机网络基础:HTTP 协议

作者: Rimson | 来源:发表于2019-01-18 12:10 被阅读0次

    一、HTTP简介

    HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

    HTTP基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

    HTTP工作原理

    HTTP协议工作于客户端-服务端架构上,浏览器作为HTTP客户端通过 URI 向HTTP服务端即WEB服务器发送所有请求。

    Web服务器根据接收到的请求后,向客户端发送响应信息。

    HTTP默认端口号为80,但是也可以改为8080或者其他端口。


    URL与URI

    HTTP使用URI(Uniform Resource Identifiers,统一资源标识符)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。

    URL(Uniform Resource Locator,统一资源定位符)是互联网上用来标识某一处资源的地址。

    HTTP URL的格式:http://host[":"port][abs_path]

    http表示要通过HTTP协议来定位网络资源;
    host表示合法的Internet主机域名或者IP地址;
    port指定一个端口号,为空则使用缺省端口80;
    abs_path指定请求资源的URI;
    如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

    HTTP特点

    • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    • 无状态:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    二、HTTP消息结构

    客户端请求消息

    客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。


    客户端请求消息

    GET的请求消息

    GET /562f25980001b1b106000338.jpg HTTP/1.1
    Host    img.mukewang.com
    User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
    Accept    image/webp,image/*,*/*;q=0.8
    Referer    http://www.imooc.com/
    Accept-Encoding    gzip, deflate, sdch
    Accept-Language    zh-CN,zh;q=0.8
    
    

    第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本
    GET说明请求类型为GET;[/562f25980001b1b106000338.jpg]为要访问的资源;该行的最后一部分说明使用的是HTTP1.1版本。

    第二部分:请求头部,用来说明服务器要使用的附加信息
    HOST指出请求的目的地;User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础,该信息由你的浏览器来定义,并且在每个请求中自动发送等等。

    第三部分:空行,请求头部后面的空行是必须的
    即使第四部分的请求数据为空,也必须有空行。

    第四部分:请求数据也叫主体,可以添加任意的其他数据
    这个例子的请求数据为空。

    POST的请求消息

    POST / HTTP1.1
    Host:www.wrox.com
    User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
    Content-Type:application/x-www-form-urlencoded
    Content-Length:40
    Connection: Keep-Alive
    
    name=Professional%20Ajax&publisher=Wiley
    

    第一部分:请求行,第一行明了是post请求,以及http1.1版本。
    第二部分:请求头部,第二行至第六行。
    第三部分:空行,第七行的空行。
    第四部分:请求数据,第八行。

    服务器响应消息

    HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

    服务器响应消息
    第一部分:状态行,由HTTP协议版本号,状态码,状态消息 三部分组成
    第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)

    第二部分:消息报头,用来说明客户端要使用的一些附加信息
    Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8

    第三部分:空行,消息报头后面的空行是必须的

    第四部分:响应正文,服务器返回给客户端的文本信息
    空行后面的html部分为响应正文。

    三、HTTP请求方法

    HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

    HTTP1.1新增了五种请求方法:OPTIONS,PUT, DELETE, TRACE 和 CONNECT 方法。

    方法 描述
    GET 请求指定的页面信息,并返回实体主体。
    POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。
    HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
    OPTIONS 允许客户端查看服务器的性能。
    PUT 用客户端向服务器传送的数据取代指定URI的内容。
    DELETE 请求服务器删除指定的页面。
    TRACE 请求查询服务器的性能,或者查询与资源相关的选项和需求,主要用于测试或诊断。
    CONNECT 预留给能够将连接改为管道方式的代理服务器,保留将来使用。

    GET和POST的区别

    GET请求(注意最后一行是空行)

    GET /books/?sex=man&name=Professional HTTP/1.1
    Host: www.wrox.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
    Gecko/20050225 Firefox/1.0.1
    Connection: Keep-Alive
    
    

    POST请求

    POST / HTTP/1.1
    Host: www.wrox.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
    Gecko/20050225 Firefox/1.0.1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 40
    Connection: Keep-Alive
    
    name=Professional%20Ajax&publisher=Wiley
    

    提交数据的位置(安全性)

    GET:请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

    POST提交:把提交的数据放置在是HTTP包的包体中。

    因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变,所以POST比GET更安全,更适合提交敏感数据

    传输数据的大小限制

    首先,HTTP协议没有对传输的数据大小进行限制,也没有对URL长度进行限制。而在实际开发中存在的限制主要有:

    GET:特定浏览器和服务器对URL长度有限制,例如 IE对URL长度的限制是2083字节(2K+35),因此对于GET提交时,传输数据就可能会受到URL长度的限制。

    POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。

    总结

    GET请求:/test/demo_form.asp?name1=value1&name2=value2

    • GET 请求可被缓存
    • GET 请求保留在浏览器历史记录中
    • GET 请求可被收藏为书签
    • GET 请求不应在处理敏感数据时使用
    • GET 请求有长度限制
    • GET 请求只应当用于取回数据

    POST请求:

    POST /test/demo_form.asp HTTP/1.1
    Host: w3schools.com
    name1=value1&name2=value2
    
    • POST 请求不会被缓存
    • POST 请求不会保留在浏览器历史记录中
    • POST 不能被收藏为书签
    • POST 请求对数据长度没有要求

    四、HTTP状态码

    常见的状态码:

    • 200 - 请求成功
    • 301 - 资源(网页等)被永久转移到其它URL
    • 404 - 请求的资源(网页等)不存在
    • 500 - 内部服务器错误

    HTTP状态码分类

    分类 描述
    1** 信息,服务器收到请求,需要请求者继续执行操作
    2** 成功,操作被成功接收并处理
    3** 重定向,需要进一步的操作以完成请求
    4** 客户端错误,请求包含语法错误或无法完成请求
    5** 服务器错误,服务器在处理请求的过程中发生了错误

    相关文章

      网友评论

          本文标题:计算机网络基础:HTTP 协议

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