美文网首页
http 协议 & curl命令

http 协议 & curl命令

作者: 秋水涟漪 | 来源:发表于2017-08-29 18:06 被阅读0次

    http 概述

    HTTP,全称 Hypertext Transfer Protocol,超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网数据通信的基础。
    此外HTTP协议是无状态协议,不会在客户端亦或服务端保存信息

    请求的过程:

    • 客户端:请求www.jianshu.com
      - 请求DNS获取www.jianshu.com的IP地址
      - HTTP生成请求www.jianshu.com页面的报文
      - TCP 将HTTP请求分隔为合适的长度 发送
    • IP 搜索并中转该请求知道到达服务端
    • 服务端:
      - TCP 解析报文
      - HTTP 解析请求
      - 回传请求的资源

    URL & URI

    • URL,全称 Uniform Resource Locator ,统一资源定位符;
    • URI, 全称 Uniform Resource Identifier, 统一资源标识符;

    请求报文&响应报文

    curl -v http://www.google.com
    * Rebuilt URL to: http://www.google.com/
    *   Trying 172.217.25.4...
    * Connected to www.google.com (172.217.25.4) port 80 (#0)
    > GET / HTTP/1.1
    > Host: www.google.com
    > User-Agent: curl/7.43.0
    > Accept: */*
    >
    < HTTP/1.1 302 Found
    < Cache-Control: private
    < Content-Type: text/html; charset=UTF-8
    < Referrer-Policy: no-referrer
    < Location: http://www.google.com.hk/?gfe_rd=cr&dcr=0&ei=TR-lWYnIK7Ol8wef3YGoAQ
    < Content-Length: 272
    < Date: Tue, 29 Aug 2017 08:01:17 GMT
    <
    <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
    <TITLE>302 Moved</TITLE></HEAD><BODY>
    <H1>302 Moved</H1>
    The document has moved
    <A HREF="http://www.google.com.hk/?gfe_rd=cr&dcr=0&ei=TR-lWYnIK7Ol8wef3YGoAQ">here</A>.
    </BODY></HTML>
    * Connection #0 to host www.google.com left intact
    
    请求报文-图解HTTP
    响应报文-图解HTTP
    Post请求

    HTTP 方法

    • GET
      访问URI标识的资源,经服务器解析请求后返回响应内容。
    curl http://www.google.com
    
    • POST
      用于传输实体的主体
    curl -d "test" www.example.com
    
    • PUT
      PUT 方法用来传输文件,要求在 请求报文的主体中包含文件内容,然后保存到请求 URI 指定的位置
    • HEAD
      只接收报文头部,用于确认URI的有效性及资源跟新的日期时间等。
    ## 仅HEAD
    curl -I http://www.google.com
    ## HEAD 和 响应主体
    curl -i www.sina.com 
    
    • OPTIONS
      用来查询针对请求 URI 指定的资源支持的方法。
    <!---请求---> OPTIONS * HTTP/1.1 Host: www.hackr.jp 
    <!---响应---> HTTP/1.1 200 OK 
                 Allow: GET, POST, HEAD, OPTIONS  
                 <!--- (返回服务器支持的方法)  --->
    

    cookie

    HTTP协议是无状态协议,一方面降低了服务端的内存和cpu消耗,另一方面需要其他方式记录客户端的状态。

    curl -c cookies http://example.com ## 没有保存?
    curl -b cookies http://example.com ## 以cookies文件为cookie发起请求
    curl -b "name=xxx" www.example.com ## 以字符串里的键值对作为cookie发起请求
    curl --cookie "NAME1=VALUE1; NAME2=VALUE2" www.example.com
    

    状态码

    类别 原因短语
    1XX Informational(信息性状态码) 接收的请求正在处理
    2XX Success(成功状态码) 请求正常处理完毕
    3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
    4XX Client Error(客户端错误状态码) 服务器无法处理请求
    5XX Server Error(服务器错误状态码) 服务器处理请求出错
    • 2XX 成功
      • 200 OK
        表示从客户端发来的请求在服务器端被正常处理了
      • 204 No Content
        该状态码代表服务器接收的请求已成功处理,但在返回的响应报文 中不含实体的主体部分。另外,也不允许返回任何实体的主体。
      • 206 Partial Content
        标识客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由 Content-Range 指定范围的实体内容。
    • 3XX 重定向
      • 301 Moved Permanently
        永久重定向,请求的资源以备分配了新的URI,以后应该使用新的URI请求。
    $ curl -I www.sina.com
    HTTP/1.1 301 Moved Permanently
    Server: nginx
    Date: Tue, 29 Aug 2017 09:19:19 GMT
    Content-Type: text/html
    Content-Length: 178
    Connection: close
    Location: http://www.sina.com.cn/
    Expires: Tue, 29 Aug 2017 09:20:54 GMT
    Cache-Control: max-age=120
    Age: 25
    Via: http/1.1 cnc.beixian.ha2ts4.214 (ApacheTrafficServer/4.2.1.1 [cRs f ])
    X-Cache: HIT.214
    X-Via-CDN: f=edge,s=cnc.beixian.ha2ts4.219.nb.sinaedge.com,c=103.37.140.12;f=Edge,s=cnc.beixian.ha2ts4.214,c=123.126.157.219
    
    ## 允许跳转
    $ curl -IL www.sina.com
    HTTP/1.1 301 Moved Permanently
    Server: nginx
    Date: Tue, 29 Aug 2017 09:20:09 GMT
    Content-Type: text/html
    Content-Length: 178
    Connection: close
    Location: http://www.sina.com.cn/
    Expires: Tue, 29 Aug 2017 09:21:51 GMT
    Cache-Control: max-age=120
    Age: 18
    Via: http/1.1 cnc.beixian.ha2ts4.214 (ApacheTrafficServer/4.2.1.1 [cRs f ])
    X-Cache: HIT.214
    X-Via-CDN: f=edge,s=cnc.beixian.ha2ts4.211.nb.sinaedge.com,c=103.37.140.12;f=Edge,s=cnc.beixian.ha2ts4.214,c=123.126.157.211
    
    HTTP/1.1 200 OK
    Server: nginx
    Date: Tue, 29 Aug 2017 09:20:09 GMT
    Content-Type: text/html
    Content-Length: 601168
    Connection: close
    Last-Modified: Tue, 29 Aug 2017 09:16:09 GMT
    Vary: Accept-Encoding
    Expires: Tue, 29 Aug 2017 09:21:09 GMT
    Cache-Control: max-age=60
    X-Powered-By: shci_v1.03
    Age: 0
    Via: http/1.1 cnc.beixian.ha2ts4.205 (ApacheTrafficServer/4.2.1.1 [cHs f ])
    X-Cache: HIT.205
    X-Via-CDN: f=edge,s=cnc.beixian.ha2ts4.219.nb.sinaedge.com,c=103.37.140.12;f=Edge,s=cnc.beixian.ha2ts4.205,c=123.126.157.219
    
    • 302 Found
      临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希 望用户(本次)能使用新的 URI 访问。
    curl -I www.google.com
    HTTP/1.1 302 Found
    Cache-Control: private
    Content-Type: text/html; charset=UTF-8
    Referrer-Policy: no-referrer
    Location: http://www.google.com.hk/?gfe_rd=cr&dcr=0&ei=XC-lWfuhNbCl8weshYbAAQ
    Content-Length: 272
    Date: Tue, 29 Aug 2017 09:09:48 GMT
    
    • 4XX 客户端错误

      • 400 Bad Request
        请求的报文中存在语法错误。
      • 401 Unauthorized
        该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、 DIGEST 认证)的认证信息。另外若之前已进行过 1 次请求,则表示用 户认证失败。
      • 403 Forbidden
        请求被服务器拒绝了
      • 404 Not Found
        服务器上没有找到资源
    • 5XX 服务器错误

      • 500 Internal Server Error
        服务器端执行请求是发生了错误。
      • 503 Service Unavailable
        服务不可用,无法处理请求

    HTTP 部首

    ➜  ~ curl -v www.google.com
    * Rebuilt URL to: www.google.com/
    *   Trying 216.58.199.4...
    * Connected to www.google.com (216.58.199.4) port 80 (#0)
    > GET / HTTP/1.1   ## 请求行
    > Host: www.google.com ## 请求资源所在互联网域名
    > User-Agent: curl/7.43.0 ## 请求的浏览器和用户代理名称等信息
    > Accept: */* ## 用户能处理的媒体类型及其相对优先级
    >
    < HTTP/1.1 302 Found   ## 状态行
    < Cache-Control: private  ## 缓存相应部首 仅向特定用户返回响应
    < Content-Type: text/html; charset=UTF-8 ## 实体首部 实体主体内对象的媒体类型
    < Referrer-Policy: no-referrer ## 
    < Location: http://www.google.com.hk/?gfe_rd=cr&dcr=0&ei=NJymWaaXM4rM8gec9IXoBg ## 将响应接收方引导至某个与请求 URI 位置不同的资源,该字段会配合 3xx :Redirection 的响应,提供重定向的 URI。
    < Content-Length: 272  ## 实体部首 实体主体部分的大小(单位是字 节)
    < Date: Wed, 30 Aug 2017 11:06:28 GMT
    <
    <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
    <TITLE>302 Moved</TITLE></HEAD><BODY>
    <H1>302 Moved</H1>
    The document has moved
    <A HREF="http://www.google.com.hk/?gfe_rd=cr&dcr=0&ei=NJymWaaXM4rM8gec9IXoBg">here</A>.
    </BODY></HTML>
    * Connection #0 to host www.google.com left intact
    

    相关文章

      网友评论

          本文标题:http 协议 & curl命令

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