• HTTP请求过程


    参考:HTTP POST GET 本质区别详解

    假设请求URL: http://www.helloworld.com:8080/page/index.html

    可以采用Fiddler或者浏览器内置的开发者工具进行抓包查看请求以及响应内容。

    1. 建立连接

    首先DNS会解析 www.helloworld.com,把它映射到相应的IP地址。

    如果URL里面有端口号,则使用该端口号。否则端口号使用该协议的默认端口号。比如HTTP协议的默认端口号是80。

    有了IP地址以及端口号,就开始通过三次握手建立TCP连接。

    2. 客户端发送请求

    连接成功建立后,客户端就可以开始向服务器发送请求。这个请求类型一般是GET或POST,还有一些不常用的PUT、DELETE等。

    请求的格式:

    <request line>

    <headers>

    <blank line>

    <request body>

    说明:

    1)request line: 在HTTP请求中,第一行必须是一个请求行,用来说明请求类型、要访问的资源以及使用的HTTP版本。

    2) header:用来说明服务器要使用的附加信息。

    3) blank line: 用来分隔header和request body。

    4)request body:主体,可以添加任意的其他数据。

    GET请求示例:

    # request line,请求的类型是GET,要访问的资源是“/books/?sex=man&name=Professional”,使用的HTTP版本是1.1 
    GET /books/?sex=man&name=Professional HTTP/1.1     
    #下面全部是header。说明了要访问的host,使用的浏览器是“Mozilla/5.0”等等。
    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请求示例:

    # request line,请求的类型是POST,要访问的资源是“/”,使用的HTTP版本是1.1
    POST / HTTP/1.1
    # header, 说明了要访问的host,使用的浏览器,Body部分传送的格式以及长度。
    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
    #blank line
    #request body
    name=Professional%20Ajax&publisher=Wiley

    备注:

    1)GET请求的Params。

    GET请求的参数会直接显示在URL里面,我们在request line中也可以看到参数。

    URL采用?来分割前面的部分和后面的传输参数。多个传输参数用&连接。

    参数采用key-value对的方式。

    例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。

    2) URL的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在URL中包含任何非ASCII字符,所有非ASCII字符均需要编码再传输。

    3) GET请求的数据一般放置在URL里面,而POST请求的传输数据放置在 request body中。

    4) Content-type

    这个表面body返回的文件格式。比如POST的Content-type 是“application/x-www-form-urlencoded ”,表明传输的是表单格式的数据。其他的还有“text/xml”,表示body部分是xml格式。

    3. 服务器应答

    服务器收到请求后,会进行相应的处理并返回数据进行响应。

    HTTP响应的格式:

    <status line>

    <headers>

    <blank line>

    <response body>

    说明:

    1)status line:用来说明HTTP版本,以及应答状态码。

    常用的状态码:

    200(OK):找到了该资源,并且一切正常。

    304(NOT MODIFIED):该资源在上次请求后没有任何修改。通常用于浏览器的缓存机制。

    401(UNAUTHORIZED):客户端无权访问该资源。这通常会使浏览器要求用户输入用户名和密码,以登录到服务器。

    403(FORBIDDEN):客户端未能获得授权。这通常是在401之后输入了不正确的用户名和密码。

    404(NOT FOUND): 在指定的位置不存在所申请的资源。

    示例:

    HTTP/1.1 200 OK
    Date: Sat, 31 Dec 2005 23:59:59 GMT
    Content-Type: text/html;charset=ISO-8859-1
    Content-Length: 122
    
    <html>
    <head>
    <title>Wrox Homepage</title>
    </head>
    <body>
    <!-- body goes here -->
    </body>
    </html>

    4. 关闭连接

    一般情况下,一旦服务器向浏览器发送了应答数据,它就要关闭TCP连接。关闭TCP连接采用四次分手。

    然而如果浏览器或者服务器在其头信息中加入了“Connection: keep-alive”,TCP连接在发送后将仍然保持打开状态,于是浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

  • 相关阅读:
    mac安装搜狗
    idea的阿里代码规范检查
    记录windows10闪屏
    github访问不了
    线程安全问题例子
    简单负载均衡工具类
    git将远程分支回归到指定版本
    minio的使用
    php禁止浏览器使用缓存页面的方法
    百度seo
  • 原文地址:https://www.cnblogs.com/miniren/p/5662291.html
Copyright © 2020-2023  润新知