HTTP 协议详解

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值