**
HTTP超文本传输协议
**
HyperText Transfer Protocol 是互联网上应用最为广泛的一种网络协议
所有的WWW文件都必须遵守这个标准。
设计HTTP最初的目的是为了提供一种发布者和接收HTML页面的方法
是基于TCP/IP通信协议来传递数据的
一个属于应用层的面向对象的协议
浏览器作为HTTP客户端推过URL向HTTP服务端即web服务器发送所有请求
主要特点:简单快速,无连接,无状态,支持B/S及C/S 模式
URL和URI
HTTP使用统一资源标识符URI(Uniform Resource Identifiers)来传输数据和建立连接
URL是一种特殊的URI,包含了用于查找某个资源的足够的信息
普通的URL组成
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#
- 协议部分:该URL的协议部分为’http’,这代表网页使用的是HTTP协议
- 域名部分:该URL的域名为www.aspxfans.com 也可以是IP
- 端口部分:域名和端口之间使用‘:’作为分隔符。如果省略默认80端口
- 虚拟目录部分:从域名后的第一个‘/’开始到最后一个‘/’为止,是虚拟目录部分
- 文件名部分:从域名后面最后一个‘/’开始到‘?’微支付,是文件部分,不是URL必须的部分
- 锚部分:从#开始
- 参数部分:从?开始参数是键值对的形式出现的中间用=号,参数之间用‘&’分隔符
HTTP请求方法
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
1.GET 请求指定的页面信息,并返回实体主体。
2.POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。 POST请求可能会导致新的资源的建立或已有资源的修改。
3.HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
4.PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5.DELETE 请求服务器删除指定的页面。
6.CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7.OPTIONS 允许客户端查看服务器的性能。
8.TRACE 回显服务器收到的请求,主要用于测试或诊断。
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上,如果页面可以被缓存或 者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
HTTP工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据,服务器以一个状态行为响应,响应内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
HTTP请求响应的步骤
- 客户端连接到Web服务器
- 发送HTTP请求
- 服务器接收请求并返回HTTP响应
- 释放连接TCP连接
- 客户端浏览器解析HTML内容
HTTP报文结构
HTTP协议:
请求客户端:
请求行:请求方法 URL HTTP版本
GET / ? name=zzy HTTP/1.1
请求头:键值对结构
User-Agent:Python
Accept:*
空行:代表请求头结束
请求体:当Post请求有请求体
响应:服务端
响应行:HTTP版本 状态码 状态描述
HTTP/1.1 200 OK
响应头:键值对构成
Content-type:text/html
空行:代表响应头结束
响应体:响应数据