HTTP不同版本的区别
- HTTP1.0
1:支持POST、HEAD等请求方法、支持请求头、响应头、支持多种数据类型
2:浏览器每次请求都需要与服务器建立一个TCP连接,请求处理完毕以后立即断开TCP连接
- HTTP1.1
1:支持PUT、DELETE等请求方法
2:采用持久连接Connection:keep-alive
,多个请求可以共用同一个TCP连接
- HTTP2.0
HTTP报文格式
HTTP标准:由万维网协会(W3C)互联网工程任务组(IETF)协调指定,最终发布了一系列的RFC
RFC:Request For Comments-请求意见稿
HTTP报文格式
HTTP请求报文 |
|
|
|
|
|
|
方法 |
|
URI |
|
版本 |
CRLF |
请求行 |
首部字段名 |
: |
|
值 |
CRLF |
首部行 |
... |
首部字段名 |
: |
|
值 |
CRLF |
首部行 |
CRLF |
实体主体 |
HTTP响应报文 |
|
|
|
|
|
|
版本 |
|
状态吗 |
|
短语 |
CRLF |
状态行 |
首部字段名 |
: |
|
值 |
CRLF |
首部行 |
... |
首部字段名 |
: |
|
值 |
CRLF |
首部行 |
CRLF |
实体主体 |
HTTP报文内容说明
-
HTTP请求方法
GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE
方法 |
说明 |
GET |
用于读取操作、请求参数直接拼接到URL后边(浏览器对URL参数长度由限制) |
POST |
常用于添加、修改、删除的操作,请求参数可以放到请求体中(没有限制大小) |
HEAD |
请求得到与GET请求相同的响应,但是没有请求题(获取资源大小) |
OPTIONS |
御用获取目的资源所支持的通信选项,比如服务器支持的请求方式 |
PUT |
用于对已存在的资源进行整体覆盖 |
DELETE |
用于删除资源 |
TRACE |
请求服务器回显其收到的请求信息,主要用于HTTP请求的测试或诊断 |
CONNECT |
可以开启一个客户端与所请求资源之间的双向沟通的渠道,创建隧道 |
HTTP请求头字段Request Header Filed
头部字段 |
说明 |
事例 |
User-Agent |
浏览器身份标识字段 |
User-Agent:xxxx |
Host |
服务器的域名端口号 |
Host:xxxxx |
Date |
发送该消息的日期和时间 |
Date:xxx |
Refer |
标识一个浏览器所访问的上一个页面 |
Refer:xxx |
Content-Type |
请求的类型 |
Content-Type:multipart/form-data |
Content-Length |
请求体的长度(以字节为单位) |
Content-Type:6666 |
Accept |
能够接收响应的类型(Content-Types) |
Accept:text/plain |
Accept-Charset |
能够接受的字符集 |
Accept-Charest:GB232 , utf-8 |
Accept-Encoding |
能够接受的编码方式列表 |
Accept-Encoding :gzip |
Accept-Langue |
能够接受的响应内容的自然语言列表 |
Accept-Langue:en-US |
Origin |
发起一个针对跨域资源共享的请求 |
Origin:www.bai.com
|
Cookie |
之前由服务器设置set-Cookie 发送的Cookie |
Origin:www.bai.com
|
Connection |
该浏览器想要有限使用的连接类型 |
Connection:keep-alive |
Cache-Control |
用来指定在这次的请求/响应链中的所有缓存机制都必须遵守的指令 |
Cache-Control:np-cache |
HTTP响应头字段Response Header Filed
头部字段 |
说明 |
示例 |
Last-Modified |
所请求对象的最后修改日期 |
Last-Modified:xxxx |
Server |
服务器的名字 |
Server:xxxxx |
Expires |
指定一个时间,超过该时间则认为此响应已过期 |
Expires:xxx |
Refer |
标识一个浏览器所访问的上一个页面 |
Refer:xxx |
Content-Disposition |
一个可以让客户端下载文件并建议文件名的头部 |
Content-Disposition:attachment; filename="fname.text" |
Access-Control-allow-Origin |
指定哪些网站可参与到跨域来源资源共享过程中 |
Access-Control-allow-Origin:* |
Set-Cookie |
返回一个Cookie让客户端去保存 |
Set-Cookie:UserID=xxx;Max-Age=3600;Version=1 |
Cache-Control |
告知客户端的缓存机制对象,是否可缓存这个对象,单位为秒 |
Cache-Control:max-age=3600 |
头部字段 |
说明 |
信息响应 |
100~199 |
成功响应 |
200~299 |
重定向 |
300~399 |
客户端错误 |
400~499 |
服务器错误 |
500~599 |
常用状态码
状态码 |
短语 |
说明 |
100 |
Continue |
请求初始部分已经被服务器收到,并且没有被服务器明确拒绝。客户端应该发送剩余的请求、如果请求已经完成,就忽略这个响应 |
200 |
OK |
请求成功 |
302 |
Found |
重定向 请求的资源被暂时的移动到了右Location头部指定的URL上 |
304 |
Not Modified |
说明无须再次传输请求的内容,也就是说可以使用缓存的数据 |
400 |
Bad Request |
语法无效,服务器无法理解该请求 |
401 |
Unauthorized |
由于缺乏目标资源要求的身份验证凭证 |
403 |
Forbidden |
服务器右能力处理该请求,但是拒绝授权访问 |
404 |
Not Found |
服务端无法找到所请求的资源 |
405 |
Method Not Allowed |
服务器禁止了使用当前的HTTP方法请求 |
408 |
Request Timeout |
服务器想要将没有在使用的连接关闭 |
500 |
Internal Server Error |
请求服务器遇到意外,并阻止其执行请求 |
跨域问题
浏览器有个同源策略(Same-Origin Policy)
规定:默认情况下,AJAX请求只能发送同源的URL
同源指:协议、域名(IP)、端口
问题:前后端代码分离,部署在不同的服务器上,页面访问数据在不同服务器会产生跨域问题。
解决跨域问题:跨域资源共享(Cors: Cross-Origin Resource Shareing)
Cros需要浏览器、服务器共同实现。
客户端:所有浏览器都支持(IE至少是IE10版本)
服务器:响应头设置:Access-Control-Allow-Origin: *
Cookie和Session
- Cookie:
在客户端(浏览器)
存储一些数据,存储到本地磁盘(硬盘)
服务器返回Cookie交给客户端存储
请求数据时,浏览器自动带上Cookie。
- Session
在服务器中存储一些数据,存储在服务器内存中