zoukankan      html  css  js  c++  java
  • 7.13一次完整的Http请求过程(2)

    7.13一次完整的Http请求过程(2)

    一次完整请求的图解

    Web浏览器之Http协议

    Http接口

    Http的接口特点:

    • 短连接

    • 无状态

    • 支持客户/服务器模式。

    • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。

    • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type标记正在传输的对象类型

    • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。

    • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    Http连接的过程:

    当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开

    TCP连接是确定了源路径和目标路径(向哪里请求资源),有了Http协议以后是确定了通过什么方式请求资源。

    接下来需要的就是请求资源的定位了

    URL解析

    组成:

    URI包括URL和URN两个类别,URL是URI的子集,所以URL一定是URI,而URI不一定是URL

    URI=URL+URN

    URL一般的语法格式:(带[]的为可选项)

    protocol :// hostname[:port] / path / [;parameters][?query]#fragment
    //在最前面的是应用层协议资源类型、存放资源的主机域名、资源文件名。
    • 协议部分:代表页面使用的是http协议,在Internet中可以使用多种协议,如HTTP,FTP等等。在"HTTP"后面的“//”为分隔符;

    • 域名部分:IP地址+端口(注册域名)。如果省略端口部分,将采用默认端口80/tcp;

    • 虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录不是URL必须的部分

    • 文件名部分:域名后的最后一个“/”开始到“?”为止,如果没有?则是到#,如果都没有则是从域名后的最后一个“/”开始到结束,都是文件名部分。

    • 锚部分:从“#”开始到最后,都是锚部分。锚部分也不是一个URL必须的部分(可以理解为定位)

    • 参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分

    Http协议构造

    Http请求消息组成部分
    • 请求行(Request Line)

    • 请求头部(Header)

    • 空行

    • 请求数据(request body)

    请求行

    请求方法字段、URL字段和HTTP协议版本字段3个字段组成

    HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

    请求头部

    由Key-Value键值对组成,有关于客户端请求的信息--->通常来说会包含这三部分其他的Header信息都是可选的

    1. User-Agent:产生请求的浏览器类型。

    2. Accet:客户端可识别的内容类型列表。

    3. Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

    可选部分:

    1. Accept:用户的设置信息

    2. Accept-Language:说明用户的默认语言设置。如果网站有不同的语言版本,那么就可以通过这个信息来重定向用户的浏览器。

    3. Accept-Encoding:服务端可接受的消息主体编码格式

    4. Accept-Charset:服务端可接受的字符集编码

    5. if-Modified-Since:如果一个页面已经在你的浏览器中被缓存,那么你下次浏览时浏览器将会检测文档是否被修改过,那么它就会发送这样的头部:

      1. If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT

      2. 如果自从这个时间以来未被修改过,那么服务器将会返回“304 Not Modified”,而且不会再返回内容。浏览器将自动去缓存中读取内容

    6. 还有一个叫Etag的HTTP头信息,它被用来确定缓存的信息是否正确

    7. cookie:发送浏览器中存储的Cookie信息给服务器。

    8. referer:头部将会包含referring url信息。--->我访问Nettuts+的主页并点击了一个链接,这个头部信息将会发送到浏览器:Referer: http://www.baidu.com/

    9. Authorization:当一个页面需要授权,浏览器就会弹出一个登陆窗口,输入正确的帐号后,浏览器会发送一个HTTP请求,但此时会包含这样一个头部:

      Authorization: Basic bXl1c2VyOm15cGFzcw==

      包含在头部的这部分信息是base64 encoded。例如,base64_decode(‘bXl1c2VyOm15cGFzcw==’) 会被转化为 ‘myuser:mypass’ 。

    请求正文
    • 请求数据不在GET方法中使用

    • 在POST方法中用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。

    一次Http请求报文([]表示非必选)
    <request-line>
    <headers>
    <blank line>
    [<request-body>]
    Http响应消息

    在接收和解释请求消息后,服务器返回一个Http响应消息

    组成部分:

    • 状态行

    • 消息报头

    • 响应正文

    状态行

    HTTP-Version Status-Code Reason-Phrase CRLF

    • HTTP-Version表示服务器HTTP协议的版本

    • Status-Code表示服务器发回的响应状态代码

      • 1xx:指示信息--表示请求已接收,继续处理

      • 2xx:成功--表示请求已被成功接收、理解、接受

      • 3xx:重定向--要完成请求必须进行更进一步的操作

      • 4xx:客户端错误--请求有语法错误或请求无法实现

      • 5xx:服务器端错误--服务器未能实现合法的请求

    • Reason-Phrase表示状态代码的文本描述

    响应报头

    描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据

    响应正文

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

    Get请求与Post请求的区别

    • Get:向服务端获取请求;数据放在URL里,有长度限制

    • Post:向服务端发送请求;数据放在body里,无长度限制;更安全

    •  

    It's a lonely road!!!
  • 相关阅读:
    Azure PowerShell (7) 使用CSV文件批量设置Virtual Machine Endpoint
    Windows Azure Cloud Service (39) 如何将现有Web应用迁移到Azure PaaS平台
    Azure China (7) 使用WebMetrix将Web Site发布至Azure China
    Microsoft Azure News(4) Azure新D系列虚拟机上线
    Windows Azure Cloud Service (38) 微软IaaS与PaaS比较
    Windows Azure Cloud Service (37) 浅谈Cloud Service
    Azure PowerShell (6) 设置单个Virtual Machine Endpoint
    Azure PowerShell (5) 使用Azure PowerShell创建简单的Azure虚拟机和Linux虚拟机
    功能代码(1)---通过Jquery来处理复选框
    案例1.用Ajax实现用户名的校验
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15008035.html
Copyright © 2011-2022 走看看