美文网首页蜂采
web之http协议解析

web之http协议解析

作者: 温暖的纯真 | 来源:发表于2019-02-12 21:42 被阅读11次

    http协议即HyperText Transfer Protocol超文本传输协议,特点:

    1. 灵活:允许传输任意类型的数据对象。
    2. 无连接:每次连接只处理一个请求。客户端请求request->服务器响应response->连接断开。
    3. 无状态:同一个客户端的这次请求和上次请求是没有对应关系。
    4. 处于应用层,基于IP(互联网层)/TCP(传输层)的连接(TCP三次握手建立客户端和服务端的连接)。

    TCP的三次握手

    1. 第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
    2. 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
    3. 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

    http明文传输不安全,使用安全版本https(使用SSL/TLS加密)

    1. CA(Certificate Authority)证书颁发机构,负责签发证书、认证证书、管理已颁发证书的机关。比较知名的国际品牌:Symantec,GeoTrust,GlobalSign,可以在阿里云等平台购买服务。
    2. 证书是(CA)采用PKI(Public Key Infrastructure)公开密钥基础架构技术,
      签发的对用户的公钥的认证,包括电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。

    客服端发送请求
    1. 请求行
    请求方法URI协议/版本
    1). GET 请求获取Request-URI所标识的资源
    2). POST 在Request-URI所标识的资源后附加新的数据
    3). HEAD 请求获取由Request-URI所标识的资源的响应消息报头
    4). PUT 请求服务器存储一个资源,并用Request-URI作为其标识
    5). DELETE 请求服务器删除Request-URI所标识的资源
    6). TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
    7). CONNECT 保留将来使用
    8). OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

    POST /index.php HTTP/1.1
    

    2. 请求头信息
    Transport 头域

    • Connection 表示是否需要持久连接
      Connection: keep-alive - Request后TCP连接不会关闭,被后续请求继续使用
      Connection: close - Request后TCP连接关闭
    • Host 指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。80端口可缺省

    Client 头域

    • Accept: 浏览器可以接受的媒体类型(MIME类型)
        Accept: text/html
       Accept: / 代表浏览器可以处理所有类型(经常使用
    • Accept-Encoding:浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)
    • Accept-Language:浏览器申明接收的语言
       Accept-Language:zh-cn:中文。如缺省,则服务器认为服务器对各种语言都接受
    • User-Agent:告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36
    
    • Accept-Charset:浏览器申明自己接收的字符集
       Accept-Charset:iso-8859-1,gb2312 如缺省,则接受任何字符集

    Cookie/Login 头域

    • Cookie: 最重要的header, 将cookie的值发送给HTTP 服务器

    Entity头域

    • Content-Length:发送给HTTP服务器数据的长度,即请求消息正文的长度
        Content-Length: 38
    • Content-Type:定义网络文件的类型和网页的编码,浏览器将以什么形式、什么编码读取这个文件
      Content-Type: application/x-www-form-urlencoded

    Miscellaneous 头域

    • Referer:提供了Request的上下文信息的服务器,来自于哪个链接

    Cache 头域

    • If-Modified-Since:把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。
      If-Modified-Since: Thu, 09 Feb 2012 09:07:57 GMT。
    • If-None-Match: If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag. 使用这样的机制将提高网站的性能
      If-None-Match: "03f2b33c0bfcc1:0"
    • Pragma: 防止页面被缓存, 在HTTP/1.1版本中,它和Cache-Control:no-cache作用一模一样
      Pragma: no-cache(只有一个用法)
    • Cache-Control:指定Response-Request遵循的缓存机制(非常重要)
      Cache-Control:Public 可以被任何缓存所缓存
      Cache-Control:Private 内容只缓存到私有缓存中
      Cache-Control:no-cache 所有内容都不会被缓存

    响应

    1. 状态行
    状态行由协议版本、数字形式的状态代码,及相应的状态描述组成,各元素之间以空格分隔,结尾时回车换行符,格式:
    HTTP-Version(服务器 HTTP 协议的版本) Status-Code(服务器发回的响应代码) Reason-Phrase(状态代码的文本描述) CRLF(回车换行)
    如:HTTP/1.1 200 OK (CRLF)

    • 状态代码
      1xx:指示信息——表示请求已经接受,继续处理
      2xx:成功——表示请求已经被成功接收、理解、接受
      3xx:重定向——要完成请求必须进行更进一步的操作
      4xx:客户端错误——客户端请求有错误或请求无法实现
      5xx:服务器端错误——服务器未能实现合法的请求
    • 常用编码
      200 OK //客户端请求成功
      303:重定向,即从原url重定向到新的url。 例如php 的hear函数header("localtion:/index.php")
      400 Bad Request //客户端请求有语法错误,不能被服务器所理解
      401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
      403 Forbidden //服务器收到请求,但是拒绝提供服务,一般是服务器路径没有权限或者是其他权限相关问题
      404 Not Found //请求资源不存在,eg:输入了错误的URL
      500 Internal Server Error //服务器发生不可预期的错误:一般来说,这个问题都会在服务器端的源代码出现错误时出现,比如出现死循环。
      502 Bad Gateway//作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。比如LNMP ,php-fpm没有启动就会报502错误。
      503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常,比如java 容器部署war的时候,就出现503, 或者是nginx处理的文件没有权限。
      504 Gateway Time-out:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应,比如nginx和php-fpm, php设置sleep(200),就会收到504 Gateway Time-out。
      注意:某些代理服务器在DNS查询超时时会返回400或者500错误

    2. 响应头信息
    Cache头域

    • Date:生成消息的具体时间和日期,即当前的GMT时间
    • Expires:浏览器会在指定过期时间内使用本地缓存,指明应该在什么时候认为文档已经过期,从而不再缓存它
    • Vary:告诉代理服务器缓存两种版本的资源:压缩和非压缩
       Vary: Accept-Encoding

    Cookie/Login 头域

    • P3P:用于跨域设置Cookie, 这样可以解决iframe跨域访问cookie的问题
    • Set-Cookie:把cookie 发送到客户端浏览器, 每一个写入cookie都会生成一个Set-Cookie(非常重要)

    Entity实体头域

    • ETag:和If-None-Match 配合使用
    • Last-Modified:用于指示资源的最后修改日期和时间
    • Content-Type:服务器告诉浏览器自己响应的对象的类型和字符集
       Content-Type: text/html; charset=utf-8
      -Content-Length:实体正文的长度,以字节方式存储的十进制数字来表示。在数据下行的过程中,Content-Length的方式要预先在服务器中缓存所有数据,然后再发给客户端。
    • Content-Encoding:文档的编码(Encode)方法。一般是压缩方式
       Content-Encoding:gzip
    • Content-Language:告诉浏览器自己响应的语言

    Miscellaneous 头域

    • Server:服务器的软件信息
       Apache/2.2.8 (Win32) PHP/5.2.5
    • X-Powered-By:网站的开发技术
       X-Powered-By: PHP/5.2.5

    Transport头域

    • Connection:TCP连接保持或关闭
       Connection: keep-alive,有一个保持时间,可以在服务器软件(如Apache)中设定这个时间。
       Connection: close

    Location头域

    • Location:用于重定向一个新的位置, 包含新的URL地址

    3. 响应正文
    服务器返回的资源的内容,响应头和正文之间也必须用空行分隔

    <html>...</html>
    

    例子,在chrome浏览器访问url,点击F12->Network->网址,可查看Headers信息

    1. 登录获取服务器授权(POST),获得cookie
    Response Headers
    Set-Cookie: key1=value1; Path=/; Max-Age=0; Expires=Mon, 11-Feb-2019 13:11:44 GMT
    
    2. 带着cookie请求服务器数据(GET)
    General
    Request URL: https://***.***.com/***.shtml
    Request Method: GET
    Status Code: 200 
    Remote Address: *.*.*.*:443
    Referrer Policy: no-referrer-when-downgrade
    
    Response Headers
    Connection: keep-alive
    Content-Disposition: inline;filename=f.txt
    Content-Type: application/json;charset=UTF-8
    Date: Tue, 12 Feb 2019 13:37:24 GMT
    Transfer-Encoding: chunked
    
    Request Headers
    authority: ***.com
    method: GET
    path: /***/***.shtml
    scheme: https
    accept: application/json, text/plain, */*
    accept-encoding: gzip, deflate, br
    accept-language: zh-CN,zh;q=0.9,en;q=0.8
    content-type: application/x-www-form-urlencoded
    cookie: key1=value1;key2=value2;
    host: ***.com
    referer: https://***.com/index.html
    user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36
    

    相关文章

      网友评论

        本文标题:web之http协议解析

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