HTTP

1.HTTP:

1. 请求报文:
GET  /url  HTTP/1.1									//请求行
User-Agent: xxxxxxx									//请求头
Host: xxxxxx						
Accept-Language: xx, xx
													//空行
Main Request										//正文
2. 响应报文:
HTTP/1.1  200  OK									//状态行
Date: Mon, 27 Jul 2009 12:28:53 GMT					//消息报头
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
													//空行
HTML/Json											//正文
3 状态码:

1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求

4.特点:

无连接,无状态
每次Http请求之间都是独立的,但是这样可能会导致一些麻烦,例如每次Http请求都要登录确认用户身份;所以需要通过引入cookie和Session来建立多个Http请求之间的联系:
cookie存在用户计算机,大小有限,不安全
session存在服务器端,大小不限,安全

5. 常用方法:

GET:
1.一般用来获取数据,
2.传输数据是通过URL请求,数据附在URL之后,参考URL格式第参数部分
3.传输数据量较小,受URL长度限制,受不同浏览器影响,一般取1024字节
4.不安全,参数可从URL中看到
5.只能支持ASCII字符,向服务器传的中文字符可能会乱码
6.支持缓存;

POST:
1.一般用来向服务器提交数据,可能会修改服务器内容
2.数据在请求实体中发送给用户
3.可以传输大量数据,所以上传文件时只能用Post方式
4.比GET安全
5.支持标准字符集,可以正确传递中文字符
6.不支持缓存

2.HTTP几个版本的比较

HTTP 1.X
共同特性:

单向请求,只能由客户端发起
数据未压缩,导致数据的传输量大
通过文本的方式传输数据

HTTP1.0特性:

一次请求只允许在一个TCP连接上
默认短链接,若要使用长连接需要在请求报头添加 connection:keep-alive

HTTP1.1特性:

默认使用长连接。
支持部分内容传送,即断点续传。
引入pipelining的技术,一次性可以发送多个request,但是接收Respone的时候必须按FIFO的顺序,又叫队头阻塞

HTTP2.0新特性:
1.二进制传输:

通过二进制传输数据,所以在HTTP和TCP(UDP)之间增加了一个二进制分帧层,传输的信息会被分为更小的帧,首部信息会被封装到Headers帧,而Request Body则封装到Data帧。

2.多路复用:

一个请求对应一个,一个流由多个组成,每个帧会标识出属于哪个流
即在一个TCP连接中存在多个流,在客户端,帧乱序发送,到服务器端后再根据每个帧首部的流标识符重新组装,可以避免HTTP1.1版本的队头阻塞问题;

3.Header压缩:

摒弃HTTP1.x中用文本传输header的方式,而使用HPACK压缩格式对传输的header进行编码

4.服务器Push:

服务端可以在客户端某个请求后,主动推送其他资源。

3.HTTPS:

HTTPS = HTTP协议 + SSL/TLS协议,占用服务器端口443
HTTPS功能: 内容加密,验证身份,保证数据完整性

加密流程:

1.客户端向服务器发起HTTPS请求,连接到服务器的443端口;
2.服务器将自己的SSL数字证书(包含了公钥)发给客户端,服务器的数字证书可以自己做或者向CA申请
3.客户端收到服务器端的数字证书,会通过CA对数字证书进行检查;
4.如果公钥合格,客户端生成对称密钥,并用服务器的公钥加密
5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端对称密钥发送给服务器;
6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,得到对称密钥;
7.以后服务器和客户端就可以使用对称加密的方式进行通信了;

3.URL:

URI:uniform resource identifier,统一资源标识符
URL:uniform resource locator,统一资源定位符,是URI的子集,可以找到文件的URI

一个URL的例子:
http://www.bilibili.com:80/videos/index.asp?username=Tom&age=12&page=1#name

一个完整的URL可以包含以下几部分:

1.协议:“//”之前的部分为协议,上述例子中使用的是http协议

2.域名:“//”到“:”之间的部分为域名,例如www.bilibili.com,一个URL中,也可以使用IP地址作为域名使用

3.端口:“:”到“/”之间的部分为端口号,例如例子中的80,如果省略端口部分,将采用默认端口

4.虚拟目录:域名后的第一个“/”到最后一个“/”中间是虚拟目录部分。本例中的虚拟目录是videos

5.文件名:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。如果省略文件名,则使用默认的文件名

6.参数:从“?”到“#”之间的是参数部分。本例中的参数部分为“username=Tom&age=12”。多个参数之间用“&”作为分隔符。

7.锚:#之后的部分用来标识页面位置,用来指导浏览器动作,对服务器完全无用,实际的请求也会忽略#后面的部分

4.表单:

4.1 表单的形式:
<form action="/upload" enctype="multipart/form-data" method="post">
     <input type="text" name="username">
     <input type="password" name="password">
     <input type="file" name="file">
     <input type="submit">
</form>

action: 服务器接收表单数据的地址;
method: 提交服务器的http方法,一般为post和get;
enctype: 表单数据提交时使用的编码类型;
常用的编码类型有application/x-www-form-urlencodedmultipart/form-data
默认使用urlencoded,使用multipart的情况只出现在表单中有文件上传的情况

4.2 表单数据提交:
使用application/x-www-form-urlencoded编码方式:
<form enctype="application/x-www-form-urlencoded" action="http://" method="GET">
    <input type="text" name="username" value="Tom">
    <input type="text" name="password" value="123456">
    <input type="submit" value="submit">
</form>

如果使用get方法,表单中的参数会用urlencoded编码的方式被附在url后面,用问号分隔,例如:
要访问的地址是“http://www.bilibili.com:80/login”;
用GET方法实际发送的是“http://www.bilibili.com:80/login?username=Tom&password=123456”

如果使用post方法,这些数据会被封装到http body中:
实际发送的内容会是:

POST http://www.bilibili.com:80/login HTTP/1.1  
Host: localhost:80  
Connection: keep-alive  
Content-Length: 400  
Cache-Control: max-age=0  
...其他参数略

username=Tom&password=123456
使用multipart/form-data编码方式:
<form action="user/login.do" method="post" enctype="multipart/form-data">  
    <input type="text" name="username"><br>  
    <input type="text" name="password"><br>  
    <input type="file" name="uploadFile"/><br>  
    <input type="submit" value="登录"/>  
</form>  

multipart/form-data用来上传文件,没有文件上传的时候会自动使用urlencode编码方式
实际发送的内容会是:

POST http://www.bilibili.com:80/login HTTP/1.1  
Host: localhost:80  
Connection: keep-alive  
Content-Length: 400  
Cache-Control: max-age=0  
...其他参数略

------WebKitFormBoundarykALcKBgBaI9xA79y  
Content-Disposition: form-data; name="username"  

xiaoming 
------WebKitFormBoundarykALcKBgBaI9xA79y  
Content-Disposition: form-data; name="password"  

123456789  
------WebKitFormBoundarykALcKBgBaI9xA79y  
Content-Disposition: form-data; name="uploadFile"; filename="file.txt"  
Content-Type: text/plain  

我是文件中的内容     
5.RESTFul

REST全称是表述性状态转移,是一种面向资源的API的规范:
1.用Url标识网络上的所有资源,每个资源都有一个唯一的资源标识符
2.同一个资源可以具有多种表现形式(xml,json等)
3.对资源的各种操作不会改变资源标识符
4.所有的操作都是无状态的
5.客户端发出的数据操作指令都是"动词 + 宾语"的结构

动词就是请求使用的方法:增(POST),删(DELETE),改(PUT),查(GET)

宾语就是Url,Restful面向的是资源,一个Url对应的就是资源名,而不能是动词,例如:

	http://wwww.xxx.com:80/users							//合格的Url
	http://wwww.xxx.com:80/getUsers							//不合格的Url
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值