1.HTTP协议
协议:网络中的设备要进行通信,必须遵循一些相同的规则,这些规则我们称之为协议。
HTTP:即超文本传输协议,就是用来规定浏览器和服务器传输信息格式格式的。
客户端与服务端通信时传输的内容我们称之为报文,发送给服务器的称为”请求报文“,服务器发送给客户端的称为”响应报文。
2.报文格式
请求首行
请求头信息
空行:用来区别请求头和请求体的信息的。
请求体
3.请求报文
(1) get请求(get请求没有请求体,所以也没有空行 ):
GET /07_WEB_HTTP/index.html?username=admin&password=123123 HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Referer: http://localhost:8080/07_WEB_HTTP/form.html
Accept-Language: en-US,zh-CN;q=0.7,ko-KR;q=0.3
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
If-Modified-Since: Wed, 02 Mar 2016 01:18:26 GMT
If-None-Match: W/"163-1456881506995"
Host: localhost:8080
Connection: Keep-Alive
①
请求首行
GET /07_WEB_HTTP/index.html?username=admin&password=123123 HTTP/1.1
请求方式 资源的路径?查询字符串 协议名/协议的版本
② 请求头:(通过观察发现,请求头中都是一个一个的键值对结构,有的是一个键对应一个值,有的是一个键对应多个值)
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
浏览器允许的响应类型: 使用的是MIME值来表示一个文件的类型,*/*表示的是任意类型
Referer: http://localhost:8080/07_WEB_HTTP/form.html
请求的来源:用途:1.广告计费 2.防止盗链
Accept-Language: en-US,zh-CN;q=0.7,ko-KR;q=0.3
接受的语言:
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
用户的系统信息:
Accept-Encoding: gzip, deflate
允许的压缩格式:
Host: localhost:8080
主机地址:
Connection: Keep-Alive
连接的时间:Keep-Alive表示连接是一个长连接,它的作用就是告诉服务器,你别着急关闭连接,等我一会,等我将全部资源都加载完毕之后你在断开。
(2) post请求(通过请求体传递请求参数)
POST /07_WEB_HTTP/index.html HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Referer: http://localhost:8080/07_WEB_HTTP/form.html
Accept-Language: en-US,zh-CN;q=0.7,ko-KR;q=0.3
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 30
Connection: Keep-Alive
Cache-Control: no-cache
username=admin&password=123123
① 请求首行
POST /07_WEB_HTTP/index.html HTTP/1.1
请求方式 资源路径 协议名/协议版本
②请求头
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Referer: http://localhost:8080/07_WEB_HTTP/form.html
Accept-Language: en-US,zh-CN;q=0.7,ko-KR;q=0.3
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
Content-Type: application/x-www-form-urlencoded
请求体的类型:application/x-www-form-urlencoded,它的意思就是说请求体中的内容将会被URL编码。 username=%E5%AD%99%E6%82%9F%E7%A9%BA&password=123123,浏览器向服务器发送中文时,会将中文转换为二进制编码来发送,浏览器会现将字符转换为二进制,然后在将二进制转换为十六进制,这一过程就是URL编码。
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 30
请求体的长度:
Connection: Keep-Alive
Cache-Control: no-cache
缓存的控制:no-cache不使用缓存
③ 空行
空行的作用就是分割请求首部(请求首行,请求头)和请求体
④ 请求体:post请求使用请求体发送请求参数
username=孙悟空&password=123123
(3) get请求和post请求的区别?
① 除了将表单的method属性设置为post时,其余情况全都是get请求.
② get请求通过url地址传递请求参数,请求参数可以直接在地址栏上显示,不太安全.
post请求通过请求体传递请求参数,请求参数不能直接在地址栏上显示,稍微安全一些.
③ get请求通过url地址传递请求参数,但是url地址的长度有限制,不能超过255个字符.
post请求通过请求体传递请求参数,大小没有限制,可以发送任意数据。
④ 一般开发时,表单的method属性都需要设置为post。
4.响应报文:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"163-1456881506995"
Last-Modified: Wed, 02 Mar 2016 01:18:26 GMT
Content-Type: text/html
Content-Length: 163
Date: Wed, 02 Mar 2016 01:18:48 GMT
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>我是一个网站的首页</h1>
</body>
</html>
(1) 响应首行:
HTTP/1.1 200 OK
协议名/协议版本 响应状态码 响应状态码的描述
--常见响应状态码
200 - 成功
206 - 断点下载时用到,客户端请求了一部分内容,服务器成功把这部分内容返回给它,这时候就是用这个状态。
301 - 永久跳转,原地址不存在了,url被指向到另一个地址。这个主要是搜索引擎相关,影响爬虫的检索行为。
302 - 临时跳转,服务器会返回一个新的url给客户端,客户端可以继续访问这个url来获取内容。
304 - 资源没有改变,客户端可以使用本地缓存的内容,常见于静态内容访问。
400:客户端请求出错,服务器无法识别请求
401:无授权,被请求页面需要用户名密码
403:无权限,禁止访问锁请求的页面
404:路径错误。服务器无法找到请求的页面
405:请求的Method不支持
413 - 请求实体太大。常见的情况是上传大文件,但超出了服务器(比如nginx)限制。或者请求头或请求体超出了后端的server(比如tomcat)的设置(比如当前域名下cookie太多,超出了请求头限制)
416 - 跟断点续传有关,客户端请求的范围超出了服务器上文件大小
405 - 请求的Method不支持
404 - not Found
500 - 服务器内部错误,不能返回正常的结果。比如最常见的应用抛出空指针异常未进行处理。
502 - 网关错误。常见的情况是反向代理后端的服务器(比如resin或tomcat)没有启动。
503 - 服务不可用。比如服务器负载太高或者服务器已经停止服务。
504 - 网关超时。比如请求时长超出了服务器的响应时间限制。
(2) 响应头
Server: Apache-Coyote/1.1
服务器的信息:
Accept-Ranges: bytes
允许的单位:
ETag: W/"163-1456881506995"
标识网页的版本:
Last-Modified: Wed, 02 Mar 2016 01:18:26 GMT
最后的修改时间:格林威治标准时间
Content-Type: text/html
响应体的类型:text/html表示响应体是一个网页
Content-Length: 163
响应体的长度(网页的大小)
Date: Wed, 02 Mar 2016 01:18:48 GMT
响应的时间:
(3) 空行:
空行用来分割响应首部和响应体
(4) 响应体:
响应体是服务器响应给浏览器的主要内容
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>我是一个网站的首页</h1>
</body>
</html>