美文网首页
HTTP笔记

HTTP笔记

作者: xingkong_s | 来源:发表于2018-08-14 18:16 被阅读21次

    如果你的代码是主要处理数据库和数据之间的逻辑 那么你就算是个后端
    如果你的代码主要处理交互(用户的点击事件 鼠标事件 用户的一些流程)那么您就是一个前端

    什么是服务端和客户端

    server服务端是一个机器
    client客户端也是一个机器
    如果我们在chorme中输入一个网址
    它会发一个请求到server //发起请求 request
    一般server使用80端口 来接收这个请求
    server呢 就返回一个响应 //返回响应 response

    //注意:
    在mac 或者 linux 系统上 80 端口是不能被普通用户使用的
    用了就会报错
    端口号只要大于1024 就可以了
    那我非要用呢
    可以 前面加 sudo

    想知道的详细点
    curl -v
    v //verbose 啰嗦

    ➜  http-demo curl -v http://localhost:9999/main.css
    *   Trying 127.0.0.1...
    * TCP_NODELAY set
    * Connected to localhost (127.0.0.1) port 9999 (#0)
    > GET /main.css HTTP/1.1
    > Host: localhost:9999
    > User-Agent: curl/7.52.1
    > Accept: */*
    > 
    < HTTP/1.1 404 Not Found
    < Content-Type: text/html;charset=utf-8
    < Date: Mon, 13 Aug 2018 02:48:26 GMT
    < Connection: keep-alive
    < Transfer-Encoding: chunked
    < 
    * Curl_http_done: called premature == 0
    * Connection #0 to host localhost left intact
    呜呜呜% 
    

    链接过程

    *   Trying 127.0.0.1...
    * TCP_NODELAY set
    * Connected to localhost (127.0.0.1) port 9999 (#0)
    

    发起请求

    > GET /main.css HTTP/1.1
    > Host: localhost:9999
    > User-Agent: curl/7.52.1
    > Accept: */*
    > 
    

    大于号 表示我们发起的请求
    小于号 表示 我们得到的响应
    User-Agent 你用什么上网
    Accept: / 你给我什么样的东西 我都要
    > //回车也是一句话

    response.end('sldf')
    返回一个什么

    返回的数据后 有一个 %
    为什么? 表示 文件结尾

    请求 request

    • 请求行
    • *请求头
    • 回车
    • 请求体

    响应 response

    • 响应行 状态行
    • *响应头
    • 回车
    • 响应体

    js css html json xml image jsonp本质

    • 都是字符串 不过 Content-Type 不同

    text/javascript application/javascript
    text/css
    text/html
    text/json
    text/xml application/xml text/xml+html
    image/png
    image/jpeg
    image/gif
    text/javascript =>jsonp

    你浏览器地址栏 输入地址 默认请求 html
    link 标签 请求css
    script 标签 请求js
    json 怎么请求

    let request = new XMLHttpRequest()
    request.open('GET','/3.json')
    request.onload  = function(){
       console.log(request.responseText)
    }
    request.send()
    

    jsonp就是在json的基础上 加 函数名(json)

    Content-Type: application/x-www-form-urlencoded

    • 用key=value的方式来表示
    • 如果你有多个key value 请用&连接
    • 如果你有特殊字符 将转换成%开头的数字
    缓存

    /style response.setHeader('Cache-Control','max-age=3600')
    浏览器在得到 /style 响应之后 3600s之内 不会再请求服务器
    如果你想抛弃之前的缓存 , 你只需要把 /style 改下
    /style?v=1

    response.setHeader('Etag','xxx')
    if(resquest.headers('if-none-match')==='xxx'){
        response.statusCode = 304
        response.end()
    }
    

    如果你第二次请求服务器时,带的特征值不变 我就304跳转,返回空
    所以cache 和 Etag的区别就是 有没有请求服务器

    cookie

    cookie用来标示用户, 如那些用户登录了

    if(query.xxx='xxx'){
        //如果查询参数里的xxx的值为...
        response.setHeader('Set-Cookie','login=true')
    }
    
    • cookie过期
      设置 cookie过期的时间为前一秒或者 最早
    let d = new Date(0) // 1970
    let xyz = d.toGMTString()
    response.setHeader('Set-Cookie',`login=true;Expries=${xyz}`)
    //过期的时间 为 GMT 时间
    

    如果只是用简单的标记 true或者false 来表示用户的登录
    前端很容易伪造的

    document.cookie= "login=true"
    
    session

    为了 既能 标示用户 又能 防止用户篡改 引入了session
    session={} 不能放到 createServer里面
    不然每次启动的时候 都会重新创建

    • session存储
      你不可能只把session 放内存里 一旦你重启服务器 内存就挂了
      一般 你在关闭服务器的时候
      要把 session 存文件里面
      或者你平时就 存文件里面
      这样session 不会丢失
      如果你真正存session 你不能只存内存里面
      你可以同时存 session 和内存里面
      或者同时存 内存或数据库里面
      我只存内存里面 重启服务器 内存就关掉了 关掉之后 你就完了

    • cookie session 的区别
      1.目的
      我需要标志一个用户和另一个用户是不一样的 我就用cookie 除此之外我没有其他任何方法 当然也可以用gwt
      我想记录某一个用户信息的时候 session 不是用来区分用户的 session 用来记录用户的敏感信息 是否登录的了密码是什么 有没有购买这些东西 是不是vip 是不是 管理员
      2.实现原理
      cookie 就是响应的时候 设置一个 Set-Cookie 这么一个头 Set-Cookie 是写死在http协议里面的 cookie存在浏览器上
      session 和http 没有任何关系 session 没有规定如何实现 session 是不同的后台框架用不同的方式实现的 他存在服务器的一个地方 可以是内存 (维护一个redis里面) 可以是文件可以是数据库
      一般来说 session的实现是基于cookie的 我必须要用一个id放到用户那里 放cookie是最好的 因为它每次都带着
      //注意:
      除此之外还可以放到那里吗?
      可以 可以不放到cookie里面
      你可以放到 localstorage
      localstorage 不是每次都随浏览器 复制到请求里面 你用js去读 读了之后放到请求头里面
      或者 , 你可以放到 url的查询参数里
      /login?sessionId=0.1661568
      访问另一个页面 可以把查询参数拷贝到另一个url后 这是一种最龊的方法
      3.不是区别的区别
      cookie最大 4k
      废话 你发的请求只能那么大嘛 请求发大了 网速就慢了嘛
      session 为什么无限大
      你的后台服务器有多大 你的session就可以有多大喽 你存你自己服务器当然可以控制session的大小
      cookie是存在别人电脑 你当然不能控制别人电脑 cookie的大小
      4.cookie可以清除 session不能清除
      用户清除 当然只能清除cookie 怎么能清除session了

    反向代理

    正向代理 代理客户端
    方向代理 代理服务端

    买房的人 找中介买房 找房源 中介就是正向代理
    卖房的人 也找中介卖房 找买房的人 中介就是反向代理

    一般用nginx 来做反向代理

    baidu server               nginx                     baidu
    google server                                        google
    

    命令

    which nginx // 查询nginx位置
    nginx -t  //查询 nginx 配置
    service nginx start
    sudo nginx
    

    搜索

    nginx 配置 静态 目录
    nginx 配置 server name
    

    相关文章

      网友评论

          本文标题:HTTP笔记

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