引言:作为web开发人员,吃透http是很有必要的,下面是我对http协议的基本常用知识点总结。
http简介
简单来说,http(HyperText Transfer Protocol,超文本传输)协议就是用于客户端和服务器端之间的通信协议。
用送信来类比,客户端就是写信人,服务器端是收信人,而http协议就是邮寄规则,他保障你写的信能被收到。
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
http报文
客户端和服务器端通过相互发送报文进行通信,要深刻理解HTTP协议,就需要理解报文的格式和内容。
- 请求报文
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
看看下面的请求报文:
GET / HTTP/1.1
是请求行,请求方法为GET方法,HTTP版本为1.1
下面的都是各种首部字段:
Host: www.baidu.com //请求资源的主机号和端口号Connection: keep-alive //Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 //指定客户端接受哪些类型的信息Upgrade-Insecure-Requests: 1 //加载http资源时自动替换为https请求User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0 //客户端的操作系统及浏览器属性Accept-Encoding: gzip, deflate, sdch //可接受的内容编码Accept-Language: zh-CN,zh;q=0.8 //指定返回的字符集,zh-cn表示中文Cookie: BAIDUID=9F4AEE71322A5BFB7F7E278EB5CB605C:FG=1; BIDUPSID=9F4AEE71322A5BFB7F7E278EB5CB605C; PSTM=1491725494; BDUSS=xyLTNIdmZFb0V1TktBcThOLXJsc0xSSVZjb01pM0hSV1dYU01BS2g3LTFlaEZa... // 缓存信息
- 响应报文
当服务器接收到请求时,根据请求返回内容:
HTTP/1.1 200 OK //状态行,返回码是 200 OKServer: bfe/1.0.8.18 // 服务器用来处理请求的软件信息Date: Wed, 12 Apr 2017 07:21:34 GMT //当前响应日期Content-Type: text/html;charset=utf-8 // 指明发送给接收者的实体正文的媒体类型Transfer-Encoding: chunked //输出的内容长度不确定Connection: keep-alive //持久连接Cache-Control: private //使用的缓存机制,private代表对于单个用户的整个或部分响应消息Expires: Wed, 12 Apr 2017 07:21:33 GMT // 表示超时时间Content-Encoding: gzip //指采用的编码方式,这里采用gzip压缩X-UA-Compatible: IE=Edge,chrome=1 //用来解决浏览器兼容,IE使用最新的引擎渲染网页,chrome=1则可以激活Chrome FrameStrict-Transport-Security: max-age=172800 //提高通信安全性Set-Cookie: BDSVRTM=178; path=/ //设置缓存
当然这些只是一小部分首部字段,更多的可以在网上查询或者自己用控制台多找几个网页查看http响应。
http请求方法
下面介绍经常见到的发送http请求的方法:GET和POST:
- GET : GET方法用来请求访问URI所指定的资源,(我想访问你的某个资源)并不对服务器上的内容产生任何作用结果;
- POST:POST方法用来传输实体主体,目的并不是获取响应的主体内容,(我要把这条信息告诉你),POST方式则是把内容放在报文内容中,因此只要报文的内容没有限制,它的大小就没有限制。
- GET与POST的区别:
- GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
- GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
- GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
- GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
简单来说
, GET 用于获取某个内容,POST 用于提交某种数据请求。
按照使用场景来说,一般用户注册的内容属于私密的,这应该使用POST方式;而针对某一内容的查询,为了快速的响应,可以使用GET方式。
http状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求
常见状态码:
200 OK //客户端请求成功400 Bad Request //客户端请求有语法错误,不能被服务器所理解401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden //服务器收到请求,但是拒绝提供服务404 Not Found //请求资源不存在,eg:输入了错误的URL500 Internal Server Error //服务器发生不可预期的错误503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
以上只是基础知识点,参考链接:http://www.jianshu.com/p/81632fea327c
http://www.cnblogs.com/ranyonsue/p/5984001.html,另外推荐《图解http》这本书,相比于《http权威指南》更容易理解
>**引言**:作为web开发人员,吃透http是很有必要的,下面是我对http协议的基本常用知识点总结。##http简介 简单来说,http(HyperText Transfer Protocol,超文本传输)协议就是用于客户端和服务器端之间的通信协议。用送信来类比,客户端就是写信人,服务器端是收信人,而http协议就是邮寄规则,他保障你写的信能被收到。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。![Alt text](./1491979745382.png)##http报文客户端和服务器端通过相互发送报文进行通信,要深刻理解HTTP协议,就需要理解报文的格式和内容。- **请求报文** 客户端发送一个HTTP请求到服务器的请求消息包括以下格式:![Alt text](./1491980113710.png)看看下面的请求报文:![Alt text](./1491982850380.png)`GET / HTTP/1.1` 是请求行,请求方法为GET方法,HTTP版本为1.1**下面的都是各种首部字段**:``` httpHost: www.baidu.com //请求资源的主机号和端口号Connection: keep-alive //Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 //指定客户端接受哪些类型的信息Upgrade-Insecure-Requests: 1 //加载http资源时自动替换为https请求User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0 //客户端的操作系统及浏览器属性Accept-Encoding: gzip, deflate, sdch //可接受的内容编码Accept-Language: zh-CN,zh;q=0.8 //指定返回的字符集,zh-cn表示中文Cookie: BAIDUID=9F4AEE71322A5BFB7F7E278EB5CB605C:FG=1; BIDUPSID=9F4AEE71322A5BFB7F7E278EB5CB605C; PSTM=1491725494; BDUSS=xyLTNIdmZFb0V1TktBcThOLXJsc0xSSVZjb01pM0hSV1dYU01BS2g3LTFlaEZa... // 缓存信息```- **响应报文** 当服务器接收到请求时,根据请求返回内容: ![Alt text](./1491982801746.png)``` http HTTP/1.1 200 OK //状态行,返回码是 200 OKServer: bfe/1.0.8.18 // 服务器用来处理请求的软件信息Date: Wed, 12 Apr 2017 07:21:34 GMT //当前响应日期Content-Type: text/html;charset=utf-8 // 指明发送给接收者的实体正文的媒体类型Transfer-Encoding: chunked //输出的内容长度不确定Connection: keep-alive //持久连接Cache-Control: private //使用的缓存机制,private代表对于单个用户的整个或部分响应消息Expires: Wed, 12 Apr 2017 07:21:33 GMT // 表示超时时间Content-Encoding: gzip //指采用的编码方式,这里采用gzip压缩X-UA-Compatible: IE=Edge,chrome=1 //用来解决浏览器兼容,IE使用最新的引擎渲染网页,chrome=1则可以激活Chrome FrameStrict-Transport-Security: max-age=172800 //提高通信安全性Set-Cookie: BDSVRTM=178; path=/ //设置缓存```*当然这些只是一小部分首部字段,更多的可以在网上查询或者自己用控制台多找几个网页查看http响应。*##http请求方法下面介绍经常见到的发送http请求的方法:**GET**和**POST**:- **GET** : GET方法用来请求访问URI所指定的资源,*(我想访问你的某个资源)*并不对服务器上的内容产生任何作用结果;<br>- **POST**:POST方法用来传输实体主体,目的并不是获取响应的主体内容,*(我要把这条信息告诉你)*,POST方式则是把内容放在报文内容中,因此只要报文的内容没有限制,它的大小就没有限制。<br>- **GET与POST的区别**: - GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中. - GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制. - GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。 - GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码. `简单来说`, **GET** 用于获取某个内容,**POST** 用于提交某种数据请求。按照使用场景来说,一般用户注册的内容属于私密的,这应该使用POST方式;而针对某一内容的查询,为了快速的响应,可以使用GET方式。##http状态码状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:1xx:指示信息--表示请求已接收,继续处理2xx:成功--表示请求已被成功接收、理解、接受3xx:重定向--要完成请求必须进行更进一步的操作4xx:客户端错误--请求有语法错误或请求无法实现5xx:服务器端错误--服务器未能实现合法的请求常见状态码:``` http200 OK //客户端请求成功400 Bad Request //客户端请求有语法错误,不能被服务器所理解401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden //服务器收到请求,但是拒绝提供服务404 Not Found //请求资源不存在,eg:输入了错误的URL500 Internal Server Error //服务器发生不可预期的错误503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常```> 以上只是基础知识点,参考链接:http://www.jianshu.com/p/81632fea327c http://www.cnblogs.com/ranyonsue/p/5984001.html ,另外推荐《图解http》这本书,相比于《http权威指南》更容易理解。