WEB-HTTP基础
前言
emmm…终于系统地整理了一下经常看到但是没有去好好了解的HTTP的东西,那么开始。
HTTP结构
请求结构:
HTTP版本有两种:1.0 和 1.1
我们需要注意到的差异是 1.1版本请求必须使用HOST请求消息头
响应结构:
http全路径与相对路径地址
常用的相对路径访问形式1
2GET /tokens/data HTTP/1.1
Host: mhbtest.zsins.com
同样可以使用的绝对路径访问形式1
2
3GET https://core.zsins.com:443/cas/images HTTP/1.1
Host: baidu.com
X-Forwarded-Host: baidu.com
以上两种地址形式的区别是:
- 前者的host头修改后,服务器解析会报错;
- 后者的host头修改后,服务器会正常解析;
可用于host绕过。但是这个结论不是一定的,自己是在nginx中发现上面规律,实际情况跟web服务器、版本均有关。
常用HTTP消息头部
先给出一些通用的消息头1
2
3
4
5Connection:HTTP传输后是关闭TCP链接,还是保持链接开放
Content-Length:消息主体字节长度
Content-Type:消息主体内容类型;HTML文档内容类型为text/html
Content-Encoding:为消息主体内容指定编码形式(如gzip);一些应用使用它来压缩主体,以加快传输速度
Transfer-Encoding:为方便通过HTTP传输而对消息主体使用的任何编码。使用这个消息头,通常用它指定块编码
HTTP请求消息头部
下面开始说明HTTP请求消息部分,先从消息头部开始:1
2
3
4
5
6
7
8
9
10User-Agent:UA,用户代理,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
Referer:表示发出请求的原始URL,跳转
Host:想访问的WEB服务器的域名/IP 地址和端口号
Accept:客户端可以处理的媒体类型,按优先级排序;在一个以逗号为分隔的列表中,可以定义多种类型和使用通配符。
Accept-Charset:客户端接收的字符集
Accept-Encoding: 客户端愿意接受哪些内容编码
Authorization:用于为一种内置HTTP身份验证向服务器提交证书
Cookie:提交服务器向客户端发布的其他参数
If-Modified-Since:用于说明浏览器最后一收到所请求的资源的时间。如果服务器判断资源没有发生变化,就会发送状态码304响应,是客户端使用缓存的资源副本
If-None-Match:指定一个实体标签——消息主体内容的标识符;服务器可以使用实体标签确定浏览器是否使用资源的缓冲副本
User-Agent延伸
补充参考1 补充参考2
IOS6系统格式:User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25
safari5.1–Windows格式:User-Agent: Mozilla/5.0(Windows;U;WindowsNT6.1;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50
伪造IP的HTTP请求头:
X-Forwarded-For
Client-IP
x-remote-IP
x-originating-IP
x-remote-addr
HTTP请求头方法
GET:获取资源,
POST:传输实体内容,之后细说
PUT:上传文件,传输文件到请求URL的位置。自身不带验证机制,存在安全性问题,需要关注。
DELETE:删除文件,删除请求URL位置的文件,与上同
HEAD:返回和GET一样的头,不返回主体;用于检查某一资源是否存在
TRACE:返回服务器接受到的请求头;用于检测客户端与服务器之间是否存在任何操纵请求的代理服务器
有Max-Forward首字段:可以控制生存时间STEP
CONNECT:链接至HTTP代理服务器,[详细说明](http://blog.csdn.net/kobejayandy/article/details/24606521)
OPTIONS:返回服务器对特定资源可用的HTTP方法
POST方法的Content-Type的常用四种形式
通过HTNL的Form表单的Enctype属性指定使用的常用四种形式
application/x-www-form-urlencoded
multipart/form-data
application/json
text/xml
除此以外还有
application/x-java-serialized-object : java序列化
application/x-amf:Flash序列化
application/soap+msbin1:Silverlight序列化
application/x-www-form-urlencoded :
数据被编码为名称/值对
POST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
multipart/form-data :
可以使一块内容进行不同的编码形式
格式:Content-Type:multipart/form-data; boundary=(+随机的分割字符串)
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
分割开头多--
最后一个结尾多--
application/json :
主体是序列化后的 JSON 字符串
POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8
{"title":"test","sub":[1,2,3]}
text/xml :
以纯文本形式进行编码,其中不含任何控件或格式字符。
POST http://www.example.com HTTP/1.1
Content-Type: text/xml
<!--?xml version="1.0"?-->
<methodcall>
<methodname>examples.getStateName</methodname>
<params>
<param>
<value><i4>41</i4></value>
</params>
</methodcall>
HTTP响应消息头部
1 | Server:指明WEB服务器软件 |
HTTP响应返回状态码
- 1XX——提供信息
- 2XX——请求被成功提交
- 3XX——客户端被重定向到其他资源
- 4XX——请求包含某种错误
- 5XX——服务器执行请求是遇到错误
100 Continue——当客户端发送包含主体的请求,服务端返回100,表示已经收到请求消息头,让客户端继续发送主体。
200 OK——已经成功提交请求,且响应主体中包含请求的结果。
201 Created——PUT请求的响应返回状态码,表示请求已成功提交
301 Moved Permanently——重定向到Location消息头中指定的URL,以后客户端应用新的URL替换原始的URL
302 Found——暂时重定向到Location消息头中指定的URL,随后请求中恢复使用原始URL
304 Not Modified——指示浏览器使用缓存中保存的所请求资源的副本。
400 Bad Request——表示客户端提交了一个无效的HTTP请求。
401 Unauthorized——服务器在许可请求前要求HTTP进行身份验证。身份验证类型在消息头WWW-Authenticate中说明
403 Forbidden——不管是否通过身份验证,禁止任何人访问被请求的资源
404 Not Found——所请求的资源不存在
405 Method Not Allowed——URL不支持请求中使用的方法,如不支持PUT
413 Request Entity Too Large——表示请求主体过长,服务器无法处理
414 Request URI Too long——表示请求中URL过长,服务器无法处理
500 InternalServer Error——表示服务器在执行请求时遇到错误。
503 Service Unavailable——尽管WEB服务器运转正常,能够响应请求,但是服务器访问的应用程序无法做出响应。
HTTP身份验证
在组织内部经常使用来访问内联网服务,但因特网上的Web应用程序很少使用
- Basic: 在请求消息头中,用户证书以Base64的形式编码发送服务器
- NTLM: 质询-响应式机制,使用某个windows NTLM协议版本
- Digest: 质询-响应式机制,随同用户证书一起使用一个随机值MD5校验和。