什么是http?
http,即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通常是建立在TCP/IP协议通信基础之上的,它允许将HTML文档从web服务器传送到web浏览器。
http的请求与回应:在浏览器地址栏中输入一个URL并按回车键就能发起一个http请求,服务器收到请求之后向客户端发送响应信息,具体过程如下:
关于URL:即统一资源定位符,是一种特殊的URI(统一资源标识符),也被称为网页地址,是互联网标准的地址
格式:协议://服务器IP[:端口]/路径/[?查询]
eg:http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
从上面的URL可以看出,一个完整的URL包括以下几部分:
1.协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
2.域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用
3.端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口
4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”
5.文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
6.锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
7.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
http协议详解:
http是一种无状态协议,即web服务器与浏览器之间不需要建立持久的连接,服务器不会保留连接的相关信息,也就是说,只能由浏览器发送请求,而服务器不能主动发送数据。
- http请求:包括三部分,请求行,请求头,请求正文,如下:
- 请求行以一个方法名开头,以空格分开,后面跟着http的版本
- 第二行至空白行是请求头
- http响应:跟http请求类似,由响应行,响应头,响应正文组成:
- 状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
- 第二行到空白行为响应头
- 响应正文是服务器向客户端发送的HTML数据
- http的请求方法:
GET 请求指定的页面信息,并返回实体主体。 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 PUT 从客户端向服务器传送的数据取代指定的文档的内容。 DELETE 请求服务器删除指定的页面。 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 OPTIONS 允许客户端查看服务器的性能。 TRACE 回显服务器收到的请求,主要用于测试或诊断。
GET和POST请求方法的区别:
GET方法:请求的数据会附在URL之后,以?分割URL和传输数据,多个参数用&连接。
例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送;如果是空格,转换为+,如果是中文/其
GET方法登录的账号密码在URL上面是会显示出来的,而POST方法是基于表单的方式发出去的,不会显示在URL上面,相对来说POST方法安全性比较高,
他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。POST方法:把提交的数据放置在是HTTP包的
包体中。即
而且,GET方法有长度的限制,而POST方法没有这个限制。 - http状态码:由三位数字组成,第一位数字定义了响应的类别,且只有一下5种:
1xx:指示信息--表示请求已接收,继续处理,范围100-101
2xx:成功--表示请求已被成功接收、理解、接受,范围200-206
3xx:重定向--要完成请求必须进行更进一步的操作,范围300-305
4xx:客户端错误--请求有语法错误或请求无法实现,范围400-415
5xx:服务器端错误--服务器未能实现合法的请求,范围500-505
常见的状态码:200 OK //客户端请求成功 400 Bad Request //客户端请求有语法错误,不能被服务器所理解 401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden //服务器收到请求,但是拒绝提供服务 404 Not Found //请求资源不存在,eg:输入了错误的URL 500 Internal Server Error //服务器发生不可预期的错误 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
302 //重定向