• Web&网络协议


    什么是网络协议

    网络协议和我们人类的协议一样,就是事先的一种约定、规范!

    协议为什么要分层?

    web程序员必知必会的网络协议

    分层的好处:

    1,每一层只需要做好每一层的本职工作就行了,层与层之间是相互独立的!

    2,下层永远为上层而服务,并且上层不需要知道下层究竟是如何实现的!

    3,每一层的升级不影响其他的层,只需要保持他们之间的接口不变就行了!

    4,每一层都有各自独立的协议!

    web程序员必知必会的网络协议

    三次握手协议:

    web程序员必知必会的网络协议

    http协议

    HTTP:Hypetext Transfer Protocol,超文本传输协议!专门用来浏览器端与服务器端的交互协议!

    浏览器请求服务器:要规定请求数据的格式

    服务器响应浏览器:要规定响应数据的格式

    HTTP协议的特点

    1,HTTP也支持c/s模型 HTTP通常是基于b/s结构的访问,但是也支持c/s

    2,灵活,可以用http协议传递任意类型的数据

    3,无连接请求,每次连接只能处理一个请求,浏览器向服务器发起一次请求后,只能得到服务器的一次响应!

    4,无状态(无记忆),意思是同一个浏览器向同一个服务器发起多次请求的时候,服务器不能识别该浏览器!

    http协议分成两个部分

    http请求:浏览器向服务器索要数据

    http响应:服务器向浏览器反馈数据

    注意:不管是请求还是响应,其实http协议都是由一个一个的简单的协议项组成的,形式如下:

    协议名:协议内容(值) 并且,每一个协议项都独占一行!

    http请求协议

    含义:用于规范浏览器向服务器发送数据的格式!

    http请求包含了四个部分:请求行(request_line)、请求头(request_header)、空行、请求数据(request_content)

    请求行:请求行独占一行,用来说明当前请求的最基本的信息,分成了三个部分:

    请求方式请求路径(资源地址)协议版本

    注意:三者之间都以空格分开!

    web程序员必知必会的网络协议

    比如:GET /model/register.php HTTP/1.1,GET就是请求方式,/model/register.php就是请求路径(资源地址),HTTP/1.1 就是协议版本(以前是HTTP/1.0)

    注意:请求路径不包含域名!

    请求头:请求头就是所有当前需要用到的协议项的集合,也就是浏览器在请求服务器之前事先告诉服务器的一些信息,每个协议项都要独占一行

    常见的请求头有下些:host:当前url中所要请求的服务器的主机名(域名) 比如:Host: www.php20.com

    accept-encoding:是浏览器发给服务器,声明浏览器支持的压缩编码类型 比如gzip

    比如:Accept-Encoding: gzip, deflate

    accept_charset:表示,浏览器支持的字符集

    referer:表示,此次请求来自哪个网址

    比如:Referer: http://www.test.com/test.html

    accept-language:可以接收的语言类型,cn,en等

    比如:Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

    cookie:如果之前当前请求的服务器在浏览器端设置了数据(cookie),那么当前浏览器再次请求该服务器的时候,就会把对应的数据带过去

    user-agent:用户代理,当前发起请求的浏览器的内核信息

    User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:47.0) Gecko/20100101 Firefox/47.0

    accept:表示浏览器可以接收的数据类型,text/html,image/img

    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

    content-length(post):只有post提交的时候才会有的请求头,显示的是当前要提交的数据的长度(字节)

    if-modified-since(get):表示,在客户端向服务器请求某个资源文件时,询问此资源文件是否被修改过

    content-type(post):用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件

    空行:空行是用来分离请求头和请求数据的,也就是说,请求头到此结束!

    请求数据:只有post方式提交的时候,才有会请求数据!除了firebug之外,还有一个查看http请求和响应数据更专业的工具:httpwatch

    客户端模拟http请求

    就是使用telnet客户端!

    第一步:开启telnet客户端

    控制面板→卸载程序→左边的打开或关闭windows功能,勾选上telnet客户端!

    第二步:进入到telnet连接的界面

    1,连接apache:telnet localhost 80

    web程序员必知必会的网络协议

    2,回车进入telnet连接界面,按ctrl+]进行数据回显!

    3,再按回车,进入http请求

    web程序员必知必会的网络协议

    http响应协议

    http响应也分成四个部分:状态行(响应行)、响应头、空行、响应数据(响应主体)

    响应行:独占一行,分成三个部分:协议版本状态码 状态描述

    比如:

    HTTP/1.1 200 OK

    状态码的基本描述:

    1XX:代表http请求尚未成功

    2XX:请求没有问题,同时服务器的响应也没有问题

    3XX:重定向,服务器要求浏览器重新发送一次请求

    4XX:请求错误,服务器不能正常的响应

    5XX:服务器出现了错误,不能正常的作出响应

    响应头:形式和请求头一样,也是响应头名称:值的形式,常见的有:server:服务器主机信息

    比如:Server: Apache/2.2.22 (Win32) PHP/5.4.8

    date:响应时间 比如:Date: Mon, 08 Aug 2016 02:04:46 GMT

    last-modified:文件最后修改时间(对应请求中:if-modified-since)

    content-length:响应主体的长度(字节)

    比如:Content-Length: 4282

    content-type:响应内容的数据类型:text/html,image/png等

    比如:Content-Type: text/html;Charset=utf-8

    location:重定向,浏览器遇到这个选项,就立马跳转(不会解析后面的内容)

    refresh:重定向(刷新),浏览器遇到这个选项就会准备跳转,刷新一般有时间限制,时间到了才跳转,浏览器会继续向下解析

    content-encodeing:文件编码格式

    cache-control:缓存控制,no-cached不要缓存

    空行:用来分割响应头和响应主体,响应主体(响应数据)就是服务器给浏览器发送的源码信息!

    web程序员必知必会的网络协议

    php模拟http响应

    php模拟http响应,其实就是通过header函数修改http协议的响应头部分(就是协议项),常见的有:跳转,刷新,下载

    跳转。意思就是浏览器请求到当前文件之后,直接跳转到其他的位置!对应的协议项:Location 具体的新位置

    在php中的语法就是:header(‘location:新的url或uri’);

    web程序员必知必会的网络协议

    如果是站内跳转,就应该使用uri

    web程序员必知必会的网络协议

    注意:采用站内跳转的时候,前面不需要加上域名,系统会自动绑定!

    刷新:刷新的本质其实还是跳转,不过刷新是告诉浏览器在多长时间之后进行刷新,可以是自己跳转到自己(也就是浏览器上的刷新按钮),也可以是请求其他的脚本:

    语法如下:header(‘refresh:刷新等待的时间;url=刷新要请求的目标脚本’);

    web程序员必知必会的网络协议

    下载:其实,可以通过a链接实现下载!

    但是,a链接在下载某个文件之前,浏览器会首先尝试去解析这个文件,如果解析成功,就直接在浏览器上输出,只有解析失败的时候,才通知用户进行下载操作!

    所以,使用a标签实现下载的方式不可靠!可以通过http协议,告诉浏览器,不要解析,直接给用户下载!那么,如果告诉浏览器不要下载呢,还是通过header函数来实现!

    1,告诉浏览器不要解析:header(‘content-type:application/octet-stream’);

    2,指导浏览器如何来保存这个文件:header(‘content-disposition:attachment;filename=文件名称’);

    web程序员必知必会的网络协议

    web程序员必知必会的网络协议

    file_get_contents的功能非常的强大,它不仅仅可以读取本地资源的内容,还能读取网络资源!

  • 相关阅读:
    javascript数组
    Javascript prototype理解
    Javascript中的类的创建
    Div拖动效果
    javascript, position
    getSelection();
    网页的宽和高
    javascript apply & call
    Hibernate数据丢失更新问题及解决 凡人
    招聘软件/网页UI设计师
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/8148956.html
Copyright © 2020-2023  润新知