`

web http协议学习

 
阅读更多
HTTP协议是web开发必须掌握的协议之一,文章的内容并没有按照教科书式对协议本身进行说明。这里特意将一些web开发遇到的常见问题进行了总结。也方便以后自己开发进行迅速查阅。



1、Http的报文结构
http的报文分为请求报文和响应报文,请求报文结构包括:请求行、请求头、请求体;
响应报文结构包括响应行、响应头、响应体。下图简要表示了请求报文的结构:

下面是我输入www.baidu.com获取的请求信息和响应信息:

请求报文:

/*请求行,get是请求方法,http://www.baidu.com/是我访问的URL,HTTP/1.1表示http协议的版本号*/
GET http://www.baidu.com/ HTTP/1.1
//从这行开始是请求头
//Host表示要访问的主机
Host: www.baidu.com
//Connection表示其连接属性,keep-alive就是保持连接
Connection: keep-alive
//Accept属性告诉服务端客户端要接受什么类型的数据
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
//表示客户端的浏览器信息
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.69 Safari/537.36 QQBrowser/9.1.4060.400
HTTPS: 1
//DNT就是Do Not Track,要求应用程序不要跟踪用户的浏览信息,1表示true0表示false
DNT: 1
//列出客户端可接受的编码
Accept-Encoding: gzip, deflate, sdch
//列出客户端可接受的语言类型
Accept-Language: zh-CN,zh;q=0.8
//客户端就是通过这个报文属性给服务器发送cookies
Cookie: BAIDUID=19EDEC9B9CC10B7F16C0C832A656734B:FG=1; BIDUPSID=19EDEC9B9CC10B7F16C0C832A656734B; PSTM=1438532720; BDUSS=ktSU2hkQVpXVzRZcFJ3dFlrZ2U1a


响应报文:

//302是http响应的状态码,302代表永久重定向
HTTP/1.1 302 Moved Temporarily
Date: Wed, 30 Sep 2015 04:40:53 GMT
//Content-Type是MIME的类型
Content-Type: text/html
//响应的字节长度
Content-Length: 215
Connection: Keep-Alive
//在重定向时使用,在请求一个新的资源的时候使用
Location: https://www.baidu.com/
//服务器的一个名称
Server: BWS/1.1
//建议的浏览器渲染引擎
X-UA-Compatible: IE=Edge,chrome=1
//设置客户端cookies
Set-Cookie: BD_LAST_QID=14746362566880008569; path=/; Max-Age=1

//下面是响应正文
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>pr-nginx_1-0-249_BRANCH Branch
Time : Wed Sep 23 14:17:25 CST 2015</center>
</body>
</html>


2、Http的状态码含义
http的状态码是针对响应来讲的,http状态码分为5类33种:
* 1XX
* 2XX
* 3XX
* 4XX
* 5XX
1XX:告诉客户端已经收到了请求
2XX:表示处理成功,包括收到请求、解析了请求信息、受理请求、响应请求等内容
3XX:表示重定向其他URL,客户端要重新发送请求完成后面的处理
4XX:表示客户端错误,如语法错误、资源不存在、访问禁止等
5XX:表示服务端错误,后台异常、版本异常等
更详细的状态码信息可以访问更多Http状态码

3、Http request的几种类型

4、Http1.1和Http1.0的区别
可扩展性:HTTP/1.1定义Via头域,增加了版本号的支持
缓存:HTTP/1.1增加对缓存的重激活机制(revalidation),使用ETag头域唯一描述一个资源;HTTP/1.1增加了Cache-Control头域支持可扩展的指令集
带宽优化:HTTP/1.1中允许请求资源的某部分,而不是整个资源
长连接:HTTP/1.0只支持浏览器与服务器保持短暂的连接,浏览器的每次请求都要建立一个新的连接。而HTTP/1.1允许在一个TCP连接上可以传送多个HTTP请求和响应。HTTP/1.1协议的持续连接有两种方式,即非流水线方式和流水线方式。非流水线方式的特点是,客户在收到前一个响应后才能发出下一个请求;流水线方式的特点是,客户在收到HTTP的响应报文之前就能接着发送新的请求报文
以上就是认为比较重要的区别,其他的区别可以参看这篇文章,翻译版可以参看这篇博客

5、Http怎么处理长连接
在HTTP/1.1中长连接是指一次TCP连接可以处理多次请求与响应,这样可以产生较少的网络流量,提高处理效率。在请求报文中Connection:keep-alive就是告诉服务端保持长连接的作用

6、Cookie与Session的作用与原理
HTTP本身是无状态的,刚开始设计HTTP时,客户端只要完成了其所请求的内容就可以say bye了。但是人们逐渐发现,如果可以让服务器选择性响应内容,客户端获取的信息或更多针对性。但是由于http没有状态,怎么办呢?Cookie与Session就是两种解决方案,简单来说,Cookie是在客户端保持状态的方法,而Session是在服务器保持状态的方法,但是服务器必须和客户端建立联系才能把状态维持下去,所以在客户端的Cookie中有一个Session的标识,称为SessionId。
Cookie机制:服务器通过键值对的形式给客户端发送Cookie信息,当再次访问的时候从Cookie中直接读取,Cookie的内容包括:域和路径、过期时间、名字、值
以上面访问baidu.com为例:域就是baidu.com,路径就是域后面的URL,路径与域构成了Cookie的作用范围,过期时间是指cookie的生存时间,如果不指定过期时间,则默认就是浏览器会话时间,只要关闭了浏览器cookie就失效了。但是这样并不是cookie设计的初衷,通过cookie信息保存在硬盘上,当即使关闭浏览器下次打开cookie仍然是有效的。
Session机制:是一种在服务端保持状态的机制,当客户端需要为请求创建一个session的时候,服务端会检查在客户端是否包含一个session id,如果有就把这个session检索出来,如果没有就会为客户端创建一个session并且生成一个session id保存在客户端。保存session id的方式是cookie,当客户端发送请求的时候,服务器会从发送的cookie检索是否包含有session id。但是cookie是可以用户手动禁止的,那么如何在被禁止的条件下把session ID发送给服务端呢?有一种技术可以实现,就是URL重写。具体是怎么样呢?简单说就是把session id附在URL后面,这里又有两种方式:作为附加信息;作为查询参数;表单隐藏字段

“只要关闭浏览器,session就失效”的误解
要知道,虽然用户把浏览器关闭了,但是服务器对这点是透明的,服务器根本知道用户什么时候关闭了浏览器。所以简答说关闭浏览器session就消失是错误的。我们这么理解基于一个假设,由于sessionId采用的会话cookie来保存的,而会话cookie的一个特点是当浏览器关闭cookie的信息就会失效,那么session id在再次打开浏览器自然是无法找到,也就无法检索原来的session了。但是如果通过硬盘的方式存储session id,这样把原来的session id发送给服务器,就可以检索出来了。

7、电脑上访问一个网页,整个过程是怎么样的
完整的描述应该包括DNS、HTTP、TCP、OSPF、IP、ARP
简略描述如下:
1)DNS把域名解析成对应的IP
2)发送一次请求,服务器返回一个永久重定向响应,这样浏览器就知道要访问的正确网址
3)发送请求html的请求,这个连接过程基于TCP/IP三次握手四次挥手的,建立连接
4)服务器返回一个html响应
5)浏览器根据渲染引擎解析返回的html响应,呈现内容
6)继续发送内嵌在html文件其他资源的请求,比如css、js、图片资源等
7)加载整个页面

8、Ping的整个过程。ICMP报文是什么?
ICMP也叫互联网控制报文协议,是IP层的组成部分,ICMP主要用于传递差错报文以及一些不可达信息。ICMP报文分为查询报文和差错报文,当IP传输发生错误的时候会产生一个差错报文,这个报文会发送给源主机,源主机根据这个报文做出处理。

下面讲一下Ping的过程:
分为两种情况,同网段以及不同网段
先说相同网段:
1)主机A要去Ping主机B, 主机A会封装两层报文,主机A先检查自己MAC地址中是否有B的MAC地址,如果没有就向外发送一个ARP广播包
2)交换机收到这个ARP后,会检查在交换机中是否包含B的MAC地址,如果有就直接返回给A;如果没有就向所有端口发送ARP,该网段的主机的MAC如果与B的MAC地址不同就丢弃,如果主机B收到了该ARP就马上返回相同格式的ARP
3)这时主机A已经有了B的MAC地址,就把B的MAC地址封装到ICMP报中,向主机B发送一个回显请求
4)主机B收到该报文后,知道是主机A的一个回显请求,就会返回一个相同格式的报文。这样就完成了同一个网段的Ping的过程

再说不同网段:
1)主机A要去Ping一个不同网段的主机C,主机A会去找网关转发
2)如果主机A不知道网关的MAC地址,就会发送一个ARP广播一下,这样就知道了网关的MAC地址
3)网关收到主机A的ICMP报文,根据上面的目的IP,会去查找路由表,找到一个出口指针,给主机C发送一个ICMP报文
4)如果网关不知道主机C的MAC地址,就会给网关内所有的主机发送一个ARP,从而找到主机C的MAC地址
5)主机C收到主机A的报文就会给主机A发送一个回显请求。这样就完成了不同网段的Ping的请求

9、C/S模式下使用socket通信,几个关键函数
服务端涉及的关键函数有ServerSocket,accept(),IO流,close(),客户端涉及的函数有Socket,IO流,close()

10、路由器与交换机区别
路由器包含了交换机的功能,交换机主要的作用是扩展接口。比如原来只有一个接口,但是有两个人需要使用,这时就可以使用交换机来扩展接口,两个人使用各自的宽带账号上网,所以彼此的网速不会受到影响。而路由器处理扩展接口,还可以一个账号多个人上网,然而由于所有人共用一个上网账号,必然彼此的网速会收到影响,所以经常会出现,一个人在下载文件的时候,其他人的上网速率会下降的情况。









  • 大小: 51.1 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    web2.4协议辅助

    1. **Web协议理解**:用户可以通过此工具学习和理解Web2.4协议的工作原理,包括HTTP/2.4可能引入的新特性、优化措施等。 2. **网络优化**:工具可能提供网络连接的优化功能,比如减少延迟、提高数据传输效率等。 3...

    HTTP协议和WEB服务器工作原理

    ### HTTP协议和WEB服务器工作原理 #### 一、HTTP协议详解 HTTP协议,即超文本传输协议(HyperText Transfer Protocol),是互联网应用最为广泛的一种网络协议。它是一种用于分布式、协作式和超媒体信息系统的应用层...

    HTTP协议学习心得体会[参考].pdf

    HTTP 协议学习心得体会 概述: HTTP 协议(HyperText Transfer Protocol)是 TCP/IP 协议集中的一个应用层协议,用于定义浏览器和 Web 服务器之间交换数据的过程以及数据本身的格式。HTTP 协议是无状态的,通信过程...

    基于Http协议的Web服务端程序

    基于HTTP协议的WEB服务器,简易版的Tomcat.服务端读取配置文件完成对服务 器的初始化,并通过Socket网络编程架构服务器端.浏览器作为客户端,向服务器发送请求.服务端接受请求并将其封装为一个HTTPRequest对象,并对其...

    http协议学习

    HTTP协议学习资料主要为初学者提供了对HTTP协议基本概念、工作原理以及相关开发工作的详细介绍,内容全面,帮助开发者和测试人员深入理解Web程序间通信的机制。HTTP协议作为Web开发的基础,对于每个IT专业人员都是一...

    HTTP协议原理+实践 Web开发工程师必学

    理解HTTP协议的原理对于Web开发工程师来说至关重要,因为这直接影响到网页的加载速度、数据交互的效率以及安全性。本文将深入探讨HTTP协议的核心概念、工作流程以及实际应用。 一、HTTP协议概述 HTTP协议是一种无...

    web服务器0.12,学习http 协议

    在本主题"web服务器0.12,学习http协议"中,我们将深入探讨Web服务器的工作原理以及HTTP协议的基础知识。 首先,HTTP协议是互联网上应用最广泛的数据通信协议之一,它定义了客户端(通常是Web浏览器)与服务器之间...

    HTTP-Web-Server.zip_C++ http web_HTTP 调试_WEB协议_web server

    本项目“HTTP-Web-Server.zip”涉及C++语言实现一个简单的HTTP Web服务器,并进行了调试,旨在帮助我们理解HTTP协议的工作原理以及如何在实际编程中应用。 首先,我们需要了解HTTP的基本概念。HTTP是一种无状态、...

    基于web的SVN管理系统,支持HTTP协议、SVN协议、支持LDAP认证、Docker部署.zip

    同时,该系统支持HTTP协议,这意味着可以通过Web服务器以HTTP/HTTPS方式访问SVN仓库,提供了远程访问的便利性。 "支持HTTP协议、SVN协议"说明此系统不仅能够通过HTTP/HTTPS与SVN服务器通信,还支持原生的SVN协议,...

    QQ web协议 检测密码 程序 源码

    2. **网络编程**:检测密码的过程涉及到网络请求,因此我们需要理解HTTP协议以及如何在C#中使用HttpClient类进行网络通信。这包括发送GET或POST请求,处理响应数据等。 3. **Web QQ协议解析**:QQ Web协议不是公开...

    web服务开发学习实录(光盘)

    SOAP(简单对象访问协议)则是传输数据的标准方式,它使用XML格式封装信息,通过HTTP协议进行传输。近年来,REST(表述性状态转移)作为一种轻量级的替代方案变得越来越流行,它基于HTTP方法(如GET、POST、PUT、...

    WEB 协议批量挂QQ C# winform 源码

    【标签】"WEB协议"是指该项目使用了网络通信协议,如HTTP或HTTPS,来与服务器进行数据交换。这通常涉及到网络请求的发送、接收,以及数据的序列化和反序列化等技术。"批量挂QQ"指的是软件能够处理多个QQ账号,可能...

    Web服务器 http协议

    Web服务器和HTTP协议是互联网上实现网页浏览和数据交换的核心技术。HTTP(超文本传输协议)是应用层协议,主要用于客户端和服务器之间的通信。而Web服务器则是运行在服务器端,接收HTTP请求并返回HTTP响应的软件。在...

    易语言WEB游客协议源码

    1. **网络通信基础**:了解HTTP协议,它是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超文本到本地浏览器的传输协议。开发者需要知道如何使用易语言来发送和接收HTTP请求。 2. **HTTP请求与响应**...

    JavaWeb之http协议

    在IT行业中,JavaWeb开发是构建企业级应用的重要部分,而HTTP(超文本传输协议)则是Web通信的基础。...同时,通过源码学习和使用工具辅助,我们可以更好地掌握HTTP协议,从而提高JavaWeb应用的开发效率和质量。

    HTTP协议学习笔记

    **HTTP协议概述** ...它是一个基于请求与响应模型的、无状态的、应用层协议...学习HTTP协议对于理解和优化Web应用至关重要。深入理解HTTP协议,可以帮助我们更好地利用Web资源,解决网络问题,以及开发更高效的Web服务。

    web开发基础教程 http协议 j2ee概述

    通过本教程的学习,你将了解HTTP协议的基本原理和工作流程,掌握J2EE平台的架构和主要组件,从而为后续的Web开发打下坚实的基础。同时,使用HTTPWatch Pro工具可以提升你的调试和优化能力,使你更高效地进行Web开发...

    C# WebApi实战项目Demo,便于快速学习WEBAPI

    Web API,一般指基于HTTP协议的编程接口,接口一般定义为HTTP或HTTPS:请求方法、请求路径、参数、响应数据格式、响应HTTP Code等。至于HTTP Server,可以用Java、.Net、Nodejs等各种框架实现,Http Server属于Web ...

    Java Web_HTTP协议详解第一讲

    在本课程"Java Web_HTTP协议详解第一讲"中,我们将深入探讨HTTP(超文本传输协议)的基础知识,它是Web应用程序开发中的核心协议。...通过学习,你将能更有效地利用HTTP协议来构建高效、可靠的Java Web应用程序。

    http协议学习系列

    **HTTP协议学习系列** HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,由万维网协会(World Wide Web Consortium)和Internet工程任务组(IETF)共同制定,其中RFC 2616定义了HTTP 1.1版本。HTTP的...

Global site tag (gtag.js) - Google Analytics