美文网首页
HTTP(S)协议基础

HTTP(S)协议基础

作者: 皮一下怎么了 | 来源:发表于2018-09-17 00:48 被阅读0次

    基础知识

    URL:统一资源定位符,表明所请求资源的位置和请求方法
    格式:schema://host[:port#]/path/.../[?query-string][#anchor]
    含义:底层协议://服务器域名或IP[:端口#]/路径/.../[发送给服务器的数据][锚]
    其中域名结构为:[子域名].[域名].[根域名]

    Web通信基本流程

    1. 建立连接。在浏览器打开www.baidu.com,本机会把这个url发给DNS服务器,如果能够解析到域名对应的ip则返回其ip,否则该DNS将继续将该解析请求发送给上级DNS服务器,整个DNS可以看做是一个树状结构,该请求将一直发送到根域名服务器直到得到结果。DNS服务器通过域名找到服务器ip地址后,建立一个socket连接。socket是通过ip和端口建立的,如果url里不包含端口号,则会使用该协议的默认端口号。http默认端口号为80,https为443
    2. Web浏览器发送请求
    3. Web服务器做出响应, 语言解释器执行脚本,从数据库调取相应的数据返回给服务器,服务器组装成HTML页面再返回给客户端
    4. 关闭连接

    Web服务端组成

    1. 操作系统
    2. Web服务器
    3. 语言解释器
    4. 数据库

    流行的Web服务端架构:操作系统+WEB服务+解释执行环境+数据库服务

    1. .NET:Windows+IIS+ASP(.NET) +MSSQL
    2. LAMP:Linux +Apache+PHP+MySQL
    3. LNMP:Linux +Nginx+PHP+MySQL
    4. J2EE:UNIX/Windows +Tomcat +JSP +Oracle

    HTTP:超文本传输协议,基于请求和响应模式,是一种是无状态的应用层协议,下一次请求与上一次请求无关
    HTTP请求报文组成:请求行(请求方法)、请求头(消息报头)、请求正文。请求头后面以空白行代表请求头结束
    HTTP响应报文组成:响应行、响应头、响应正文。响应头后面以空白行代表响应头结束
    请求报文的第一行为请求行,格式通常为:请求方法/所请求资源的路径/HTTP协议版本

    如:GE/index.php HTTP/1.1

    HTTP请求方法

    GET(直接在url显示):请求获取由Request-URL所标识的资源
    POST(登录时较多):在Request-URL所标识的资源后附加新的数据
    HEAD:请求获取由Request-URL所标识的资源的响应消息报头
    OPTIONS:请求查询服务器的性能,或查询与资源相关的选项和需求
    PUT:请求服务器存储一个资源,并用Request-URL作为其标识
    DELETE:请求服务器删除由Request-URL所标识的资源
    TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
    CONNECT:要求用隧道协议连接代理

    日常绝大多数请求方法为GET或POST,但是对其他请求方法也要了解
    请求行和空白行之间的全部属于请求头的内容,请求头的参数在不同场景不尽相同,我们抓个完整的数据包分析

    HTTP请求报文

    POST /dvwa/login.php HTTP/1.1
    Host: 192.168.3.113
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 88
    Referer: http://192.168.3.113/dvwa/login.php
    Cookie: security=low; PHPSESSID=9uh9403hnaesaomusm5l0d1673
    Connection: close
    
    username=admin&password=password&Login=Login&user_token=0405b0cd775307c0bd91e28779c2db94
    

    请求头参数含义

    Host:指定请求的主机地址和端口号
    User-Agent:用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及 版本、浏览器渲染引擎、浏览器语言、浏览器插件等
    Accept:代表客户端希望接受的数据类型
    Accept-Language:指定一种客户端希望接受的自然语言
    Content-Type:向接受端表明发送的介质类型
    Content-Length:用于描述HTTP消息实体的传输长度
    Referer:包含一个URL,告诉服务器该请求的来源,可用来判断来源的合法性,防止盗链和CSRF
    Cookie:一段文本,表示请求者身份。Cookie 重要字段:名称[name]值[value]所属域名[domain]所属相对根路径[path]过期时间[expires][http-only][secure]。若没设置cookie过期时间则为内存Cookie :浏览器关闭而消失;本地Cookie :保存在本地;部分cookie具有httponly属性,目的是阻止客户端脚本访问Cookie,防止XSS攻击
    Connection:当前链接是否保持

    初此之外还有其他重要参数
    X-Forward-for:XFF头,代表请求端的IP,可以有多个,以逗号隔开,用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段

    HTTP响应头报文

    HTTP/1.1 200 OK
    Server: nginx
    Date: Sun, 30 Jul 2017 09:22:41 GMT
    Content-Type: text/html; charset=UTF-8
    Connection: close
    Vary: Accept-Encoding
    X-Powered-By: PHP/7.0.7
    Link: <http://www.hzwang.top/wp-json/>; rel="https://api.w.org/"
    Content-Length: 40228
    

    第一行为响应行,表明了HTTP协议版本和服务器响应状态
    状态码第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:
    1xx:信息响应类,表示接收到请求并且继续处理
    2xx:处理成功响应类,表示动作被成功接收、理解和接受
    3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
    4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
    5xx:服务端错误,服务器不能正确执行一个正确的请求

    server:包含了服务器用来处理请求的软件信息及其版本
    Set-Cookie:向本地保存cookie

    下面使用telnet模拟http
    先编写请求报文
    GET(POST或HEAD) / HTTP/1.1
    HOST:www.baidu.com

    DOS命令窗口执行:telnet www.baidu.com 80
    按下ctrl + ]
    然后回车
    粘贴我们编写好的请求报文
    连续两次回车

    可以看到成功获取到了响应报文信息,还可以将GET方法改为POST或HEAD,这里不再赘述,大家自行尝试

    HTTPS协议是比HTTP更为安全的一种协议,这种关系可以比喻为telnet和ssh,HTTP和telnet的数据都是明文进行传输的,例如我们上面抓取的登录DVWA的数据包,用户名和密码都是明文的,而HTTPS和ssh都是加密传输的。HTTPS是在传输层和应用层之间加了一层SSL,所有的信息都会进行加密传输,并且在数据开始传输之前要互相进行身份认证。SSL是通过证书来验证服务器的身份的,因此HTTPS需要申请CA证书,一般是需要付费的

    SSL协议提供的安全通道有以下三个特性

    机密性:SSL协议使用密钥加密通信数据
    可靠性:服务器和客户都会被认证,客户的认证是可选的
    完整性:SSL协议会对传送的数据进行完整性检查

    相关文章

      网友评论

          本文标题:HTTP(S)协议基础

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