HTTP,HyperText Transfer Protocol,是互联网上应用最为广泛的一种网络协议。
主要特点:简单快速,无连接,无状态,支持B/S及C/S模式。
所有的WWW文件都必须遵守这个标准。
设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
是一个基于TCP/IP通信协议来传递数据、属于应用层的面向对象的协议。
浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器根据接收到的请求后,向客户端发送响应信息。
URI与URL
URI:Uniform Resource Identifiers,统一资源标识符,用来传输数据和建立连接。
URL:URI的一种特殊类型,包含了用于查找某个资源的足够的信息
普通URL组成
http://www.aaa.com:8080/news/index.asp?boardID=5&ID=24618&page=1#
- 协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。
- 域名部分:该URL的域名部分为“www.aaa.com”。也可以使用IP 地址
- 端口部分:域名和端口之间使用“:”作为分隔符。如果省略,将采用默认80端口
- 虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。
- 文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,不是URL必须的部分
- 锚部分:从“#”开始。
- 参数部分:从“?”开始,参数是键值对的形式,参数之间用“&”分隔符。
HTTP请求方法
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
- GET 请求指定的页面信息,并返回实体主体。
- POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
POST请求可能会导致新的资源的建立或已有资源的修改。 - HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
- PUT 从客户端向服务器传送的数据取代指定的文档的内容。
- DELETE 请求服务器删除指定的页面。
- CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
- OPTIONS 允许客户端查看服务器的性能。
- TRACE 回显服务器收到的请求,主要用于测试或诊断。
GET和POST的区别
提交数据 | 提交的数据大小 | 取变量值的方法 | 安全性 | |
GET | GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连. 如:EditPosts.aspx?name=test1&id=123456. | 有限制 因为浏览器对URL的长度有限制 | Request.QueryString | GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码 |
POST | POST方法是把提交的数据放在HTTP包的Body中. | 没有限制 | Request.Form | POST方式在form表单中,安全性相对较高 |
HTTP工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/
响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一
个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
HTTP 请求/响应的步骤:
- 客户端连接到Web服务器
- 发送HTTP请求
- 服务器接受请求并返回HTTP响应
- 释放连接TCP连接
- 客户端浏览器解析HTML内容
HTTP报文结构
请求头 | 说明 |
Host | 接受请求的时服务器地址,可以是IP:端口号,也可以是域名 |
User-Agent | 发送请求的应用程序名称 |
Connection | 指定与连接相关的属性,如Connection:Keep-Alive |
Accept-Charset | 通知服务端可以发送的编码格式 |
Accept-Encoding | 通知服务端可以发送的数据压缩格式 |
Accept-Language | 通知服务端可以发送的语言 |
响应头 | 说明 |
Server | 服务器应用程序软件的名称和版本 |
Content-Type | 响应正文的类型(是图片还是二进制字符串) |
Content-Length | 响应正文长度 |
Content-Charset | 响应正文使用的编码 |
Content-Encoding | 响应正文使用的数据压缩格式 |
Content-Language | 响应正文使用的语言 |
状态码 | 说明 |
200 | 响应成功 |
302 | 跳转,跳转地址通过响应头中的Location属性指定(JSP中Forward和Redirect之间的区别) |
400 | 客户端请求有语法错误,不能被服务器识别 |
403 | 服务器接收到请求,但是拒绝提供服务(认证失败) |
404 | 请求资源不存在 |
500 | 服务器内部错误 |