HTTP协议

  TCP/IP和HTTP协议的关系:
我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如 果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也 可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上
 
socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议
TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。
 
WEB服务器
    浏览器和服务器软件就是通过socket通信的
    浏览器和服务器软件通过http协议的语法来规范发送的数据格式
 
HTTP协议1.1版本前使用的都是短连接,也就是浏览器发送任何一次请求来,服务器响应后会立即断开当前连接,如果浏览器再次请求,需要重建连接
    1.1版本, 开始使用长连接,服务器接收一次请求并发送响应报文后会等一段时间,这段时间如果浏览器继续发送新的请求时,可以直接使用当前连接,但是如果超过这段时间,那么服务器就会断开当前连接.
 
浏览器请求服务器过程:
    通过浏览器来访问网站时,其实就相当于你通过浏览器去访问一台电脑上的文件一样,只不过浏览器的访问请求是由被访问的电脑上的一个WEB服务器软件来接收处理,它会分析接收到的请求信息,从而按照请求信息来找到服务器电脑上的文件,经过处理,最终将生成的内容发回到浏览器。
 
浏览器:一个可以通过HTTP协议向服务器发送各种请求,并对从服务器发出的超文本信息和各种多媒体数据格式进行解释、显示和播放的程序
服务器:一个管理资源并为用户提供服务的计算机软件
 
浏览器和服务器软件,其实就是两个使用Socket进行通信的的两个应用程序:双方都发送按照Http协议语法规范组织的数据,接收到数据后都按照Http协议语法规范来解释。
 
浏览器只负责解释执行html+css+javascript代码
服务器可执行服务器端语言:.NET,JAVA,...分别同由不同的运行环境执行代码(Framework,JVM)等
 
HTTP协议:一个基于应用层的通信规范,现在主流的是Http/1.1版本
    连接(Connection):浏览器和服务器之间传输数据的通道。一般请求完毕就关闭,HTTP不保持连接,不保持连接会降低处理速度(因为建立连接速度很慢),保护连接的话会就会降低服务器处理的客户端请求数,而不保护连接,服务器可以处理更多的请求
    请求(Request):浏览器向服务器发送的"我要***"之类的消息,包含请求的类型、数据,浏览器的信息(语言、版本等)
    响应(Response):服务器对浏览器请求返回的数据,包含是否成功、状态码等
 
HTTP协议请求报文
    GET/HTTP/1.1 表示向服务器用GET方式请求首页,使用HTTP/1.1协议
    Accept-Encoding gzip, daflate表示浏览器支持gzip、deflate两种压缩算法
    Accept-Language zh-cn 表示浏览器支持的语言,很多进入后自动就是中文界面的国际网站就是通过读取这个值实现的
    Connection Keep-Alive 一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,如果浏览器在其头信息中加入了Connection Keep-Alive,则TCP连接在发送后将仍然保持打开这个状态,于是浏览器可以继续通过相同的连接发送请求,保持连节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
    Cookie 是浏览器向服务器发送和当前网站关联的Cookie,这样在服务器端也能读取浏览器端的Cookie了
    User-Agnet 是浏览器的版本信息,通过这个信息可以读取浏览器是IE还是FireFox、支持的插件、.NET版本等
 
HTTP协议-响应码
    浏览器向服务器发出请求,服务器处理可能是成功、可能是失败,可能没有权限访问等原因,服务器会通过响应码来告诉浏览器处理结果
        "200" OK
        "302" Found重定向
        "400" Bad Request错误请求,发出错误的不符合Http协议的请求
        "403" Forbidden禁止
        "404" NOT Found 未找到
        "500" Internal Server Error 服务器内部错
        "503" Service Unavaliable 一般是访问人数过多
        200段是成功,300段需要对请求做进一步处理,400段表示客户端请求错误,500段是服务器的错误
 
HTTP协议-响应报文
    Server:Cassinin/3.5.0.5 表示服务器的类型
    Content-Type:text/html; charset=utf-8 表示返回数据的类型
    服务器通过Content-Type告诉客户端响就的数据的类型,这样浏览器就根本返回数据的类型来时行不同的处理
    常用Conten-Type:text/HTML、image/GIF、image/JPEG、text/plain、text/javascript、application/x-excel、application/octet-stream(二进制文件)
    Content-Length:19944 表示响应报文体的字节长度,报文头只是个描述
 
HTTP协议-其它
    http是无状态的,不会记得"上个请求***",所以哪怕是同一个页面中的js、css、jpg也都要重复的提交Accept-Language、Accept-Encoding、Cookie等
    网页中如果有图片、css、js等外部文件的话图片、css、js都在单独的请求中,也就是并不是页面的所有内容都在一个请求中完成,而是每个资源一个请求
    一般情况下,只有浏览器请求服务器端,服务器端才有给浏览器响应数据,不会主动向浏览器推送数据,这样是安全考虑,也是提高服务器的性能考虑,如果要服务器推送数据,则需要使用ServerPush(ajax隔一段时间到服务器请求最新的数据)等额外的技术
    HTTP是“请求-响应”的工作方式,因此页面会不断刷新,如果不希望页面刷新则要使用AJAX等新技术
    断点续传的原理,多线程下载基于断点续传。
 
服务器编写基本步骤:
    1.监听浏览器连接
    2.接收浏览器发送的请求报文数据
    3.分析报文数据
    4.根本请求文件类型读取服务器响应资源
    5.生成响应报文
    6.向浏览器发送响应报文

posted on 2015-05-10 18:00  阿兴的平凡世界  阅读(155)  评论(0)    收藏  举报

导航