http协议


服务器与浏览器如何对话

HTTP:hyper text transport protocal 超文本传输协议

http协议:
    1.HTTP协议是一个不对等协议,通信的双方不是在同一个层次上
    一端发起请求,一端做出响应,发请求端只能发请求,响应端只能作出响应,两者不能交换,这是不平等的
    2.HTTP是一个无状态协议,本次请求和上次请求没有任何关系(举例:人与人对话有上下文关系,比如:网银登录,今天登陆后,明天用还要登录)

1.作用:
    1)规定了客户端和服务器之间的数据传输格式
    2)让客户端和服务器能够进行有效的数据沟通

2.优势:
    1)简单快速
    2)灵活 http允许传输任意类型的数据
    3)1.1版本之前非持续性链接,限制每次连接只处理一个请求,
          服务器对客户端做出回应之后,马上断开链接。

3.http通信过程
    打开百度首页的操作为例:
    --1,把百度域名baidu.com转化为IP地址 (DNS)
    --2,使用ip定位到百度服务器
    --3,客户端与服务器建立链接
    --4,客户端发送数据请求
    --5,服务器接收到数据请求,分析处理
    --6,服务器反馈数据给客户端
    --7,客户端接收返回的数据,解析,渲染,显示出来
    --8,客户端继续发送多次请求,获取需要的所有信息,html,css,js,img.audio,video,flash
    --9, 断开链接

4,关于数据请求和数据响应的结构

    请求(request): 客户端发送给服务器的数据
    其中包括:
    1,请求行 :请求方法(get/post)请求资源路径  请求的协议名称(http)和版本
    2,请求头 :字段信息,域名,主机   
    3,空行 : 分隔请求头和请求体
    4,请求体:浏览器发送给服务器的主要数据

    响应(response):服务器发送给浏览器的数据
    其中包括:
    1,响应行:协议名称(http)和版本  状态码  状态信息
    2,相应头:字段信息
    3,空行: 分隔响应头和响应体
    4,响应体:服务器发送给浏览器的主要数据

5, 常见的响应状态码:
    状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
    1xx:指示信息--表示请求已接收,继续处理
    2xx:成功--表示请求已被成功接收、理解、接受
    3xx:重定向--要完成请求必须进行更进一步的操作
    4xx:客户端错误--请求有语法错误或请求无法实现
    5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
    200 OK      //客户端请求成功
    400 Bad Request  //客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
    403 Forbidden  //服务器收到请求,但是拒绝提供服务
    404 Not Found  //请求资源不存在,eg:输入了错误的URL
    500 Internal Server Error //服务器内部发生不可预期的错误,无法完成请求
    503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
    eg:HTTP/1.1 200 OK

6, http发送请求的方法:
    请求方法(所有方法全为大写)有多种:
    GET     请求获取URL所标识的资源
    POST    在URL所标识的资源后附加新的数据
    HEAD    请求获取由URL所标识的资源的响应消息报头
    PUT     请求服务器存储一个资源,并用URL作为其标识
    DELETE  请求服务器删除URL所标识的资源
    TRACE   请求服务器回送收到的请求信息,主要用于测试或诊断
    CONNECT 保留将来使用
    OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

    最常用的请求方法:GET 和 POST

    参数:就是传递给服务器的具体数据,比如登陆时候的(用户名、密码)
    username:jxz
    password:123

    关于数据请求,常用的两种请求方法是,get请求和post请求,两者的区别
    get请求:
    1,请求的参数会拼接到url中
    2,提交的数据大小有限制(因为url长度限制)一般在1024字节之内
    3,数据不安全,容易信息泄露,不适合提交隐私信息,如账号密码

    post请求 :
    1,请求的参数不会拼接到url中,会放到请求体中
    2,提交数据大小没有限制,可以传输大文件
    3,请求方法安全可靠,不容易泄露信息


    GET和POST的选择:
    1.如果要传递大量数据、文件,只能用POST请求    
    2.GET比POST安全性差,如果包含敏感机密信息,建议POST
    3.如果仅仅只是索取数据,建议使用GET
    4.如果客户端跟服务器有很多格式的数据操作,使用POST

    
    更对详情请参考:http://www.cnblogs.com/yin-jingyu/archive/2011/08/01/2123548.html


7.http请求与响应实例讲解:以www.baidu.com为例

http请求:客户端向服务器索要数据
由三部分组成:请求行、请求头、请求体
请求行
请求头
空行
请求体


请求行:请求方法,请求资源路径,http协议版本
    请求资源路径:https://www.baidu.com/
    请求方法:GET
    http协议版本:HTTP/1.1


请求头:包含了对客户端的环境描述,客户端请求的主机地址等信息。
    Host: www.baidu.com 区分是请求哪个网站
    
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0
    Mozilla运行在兼容Mozilla下的浏览器
    Gecko/20100101 浏览器的内核
    Firefox/55.0 浏览器名称/版本
    
    Accpet: 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
    语言偏好,此处是中文优先,如果返回英文版也能接受
    
    Accept-Encoding: gzip, deflate, br
    接受什么样的编码格式,是否可以接受压缩版
    gzip 、deflate两种压缩方式
    
    Cookie: BAIDUID=EF288C4E5A3B4E2379A45925CD7604D1:FG=1; BIDUPSID=C5140E033FE0E0E84A096852A8548D88; PSTM=1500617585; BD_UPN=1352; BD_HOME=0; H_PS_PSSID=1423_19036_21082_18559_20929
    第1次请求(拿HTML)
    请求头  Cookie   Cookie是空的
    响应头  Set-Cookie=ABC 可以返回服务器想返回的任意数据
    
    第2次/3次/4次
    请求头 Cookie = ABC
    响应头 Set-Cookie=123
    
    第N次请求
    请求头 Cookie=ABC;123
    
    第X次请求
    请求头 Cookie=ABC;123
    响应头 声明Set-Cookie=ABC 过期(下次再次请求时,数据ABC就没有了)
    
    第Y次请求
    请求头 Cookie=123
    
    浏览器通过Cookie来保存上下文,可以小范围解决HTTP协议的失忆状态

    Connection:"keep-alive"
    保持连接

    If-Modified-Since:"Thu, 22 Sep 2016 05:21:23 GMT"
    上次打开时间
    询问上次打开时间到现在打开的时间,服务器端有无变化,如果没有变化,直接使用之前的Cookie即可,这样网页加载更快
    比如:新闻,从发布一直都不变化
          股票:时刻都在变化
        
    If-None-Match:""e0a6f9289114d21:0""
    检测是否匹配,如果服务端数据没有变化,可使用If-None-Match判断是否可以使用之前Cookie内容
    
    Cache-Control:"max-age=0"
    缓存控制

请求体:客户端发给服务器的具体数据
    通过请求体向服务器发送多种格式的数据,请求体的几种数据格式:
    1.urlencoded    application/x-www-form-urlencoded
    2.json            application/json
    3.multipart        multipart/form-data 通过表单上传文件时必须使用
                         enctype='multipart/form-data' method='POST'
    4.text            text/plan
    5.二进制          application/oct
    


http响应:服务器返回给客户端数据
HTTP响应也是由三个部分组成,分别是:响应行、响应头、响应体
    响应行
    响应头
    空行
    响应体


响应行:包含http协议的版本、状态码、状态码的英文名称
    请求协议版本:HTTP/1.1
    状态码:200 OK 请求成功
           304 Not Modified  表示没有变化
    
    
响应头:包含了对服务器的一些描述,对返回数据的描述。
    Cache-control: private 缓存控制(private内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存))
    Content-Length:"35935"         响应头的长度
    Content-Type:"text/html"     响应头的类型
    Date: Sun, 20 Aug 2017 10:29:45 GMT        服务端生成网页的时间
    Expires: Sun, 20 Aug 2017 10:29:45 GMT 通常被理解为失效日期及相关意义
    Etag:""e0a6f9289114d21:0""    网页信息摘要值,通过这个值可以判读网页的值是否发生变化
    Last-Modified:"Thu, 22 Sep 2016 05:21:23 GMT" 网页最后的修改时间
    Server:"IIS"        网页使用的服务器
    Strict-Transport-Security: max-age=172800
        HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式.
    X-Powered-By:"WAF/2.0"    扩展的响应头   X-*自定义的响应头
    
响应体:服务器返回给客户端的具体数据。
    任何数据都可以进入响应体:HTML文件、js、css、jpeg图片等

------------------------------------------------------------

1.服务端开发的本质
处理数据
从请求中获取数据 + 然后跟服务器本地数据(文件、数据库)= 响应数据

学习从请求中获取数据的API
学习从本地获取数据的API
学习响应数据的API

2.服务器端开发的时序问题

浏览器端:
    1.请求数据准备好
    2.发送数据
    3.等待服务端响应
    4.下载响应数据并对数据进行分析
请求和响应不是同时出现的,而一定是先有请求,过一段时间再有响应(异步编程)

在服务端:
请求和响应是同时存在的
服务器进程会首先得到数据
得到数据之后会创建一个表示请求的对象同时还会创建一个表示响应的对象

服务端编程(我们自己写的代码)
从请求对象中获取数据
再从其他地方(文件、数据库)获取数据
将上述两拨数据加工之后设置到响应对象中


服务器接收数据:
    要进行数据验证,比如:接受用户注册的用户名和密码,对用户名进行验证

posted @   前端小胖仔  阅读(129)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示