面试准备JSONP(一)

1.如何解决跨域的问题:
     跨域:协议、域名、端口号都相同,只要有一个不相同,那么都是非同源。
     同源策略限制情况:
  1.cookie,localStorage 和 IndexDB 无法读取
  2.DOM 和 JS对象无法获得
  3.AJAX请求不能发送
  注意:对于像 img、iframe、script 等标签的 src 属性是特例,它们是可以访问非同源网站的资源的。
  跨域解决办法:
  

  ①、response 添加 header

    我们在 Servlet 请求返回时添加如下代码:

1 //*表示支持所有网站访问,也可以额外配置相应网站
2 resp.setHeader("Access-Control-Allow-Origin", "*");

  ②、JSONP 方式

  首先我们要修改 index.jsp 页面的 ajax 请求:

复制代码
 1         $.ajax({
 2             type:"get",
 3             async:false,
 4             url:"http://localhost:8080/JavaWeb01/getPassWordByUserNameServlet?userName=Tom",
 5             dataType:"jsonp",//数据类型为jsonp
 6             jsonp:"backFunction",//服务端用于接收callBack调用的function名的参数
 7             success:function (data) {
 8                 alert(data["passWord"]);
 9             },
10             error:function () {
11                 alert("error");
12             }
13 
14         });
复制代码

  注意:我们修改了 dataType 的数据类型为 jsonp,并且新增了 jsop 属性值为 “backFunction”。

 

  ④、nginx 转发

  

 

JSONP优缺点:

1.优点

  (1)不像XMLHttpRequest对象实现Ajax请求那样受到同源策略限制,JSONP可以跨越同源策略

  (2)在浏览器中兼容性好

  (3)在请求完毕后可以哦你给过调用callback方式回传结果,将controller和view分开,jsonp服务只提供纯服务的数据,页面渲染由自己定义

2.缺点

  (1)只支持get请求不支持post请求

  (2)只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间javascript调用问题

  (3)调用失败的时候不会返回各种HTTP状态码

  (4)安全性低,如果提供JSONP服务的一方有漏洞,他返回的javascript内容容易被人控制


2.常见Http请求头

  http消息头,在超文本传输协议( Hypertext Transfer Protocol ,HTTP)的请求和响应消息中,协议头部分的组件,http消息头用来准确描述正在获取的资源,服务器或者客户端行为,定义了http事务中的具体操作参数。

  请求头:  

  GET(请求的方式) /newcoder/hello.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号)
  Accept: /(客户端能接收的资源类型)
  Accept-Language: en-us(客户端接收的语言类型)
  Connection: Keep-Alive(维护客户端和服务端的连接关系)
  Host: localhost:8080(连接的目标主机和端口号)
  Referer: http://localhost/links.jsp(告诉服务器我来自于哪里)
  User-Agent: Mozilla/4.0(客户端版本号的名字)
  Accept-Encoding: gzip, deflate(客户端能接收的压缩数据的类型)
  If-Modified-Since: Tue, 11 Jul 2017 18:23:51 GMT(缓存时间)
  Cookie(客户端暂存服务端的信息)
  Date: Tue, 18 Jul 12:15:02 GMT(客户端请求服务端的时间)
 
  响应头
 
  HTTP/1.1(响应采用的协议和版本号) 200(状态码) OK(描述信息)
  Location: http://www.baidu.com(服务端需要客户端访问的页面路径)
  Server:apache tomcat(服务端的Web服务端名)
  Content-Encoding: gzip(服务端能够发送压缩编码类型)
  Content-Length: 80(服务端发送的压缩数据的长度)
  Content-Language: zh-cn(服务端发送的语言类型)
  Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)
  Last-Modified: Tue, 18 Jul 2017 12:15:02 GMT(服务端对该资源最后修改的时间)
  Refresh: 1;url=http://www.helloyoucan.com.(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)
  Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
  Transfer-Encoding: chunked(分块传递数据到客户端)
  Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)
  Expires: -1//3种(服务端禁止客户端缓存页面数据)
  Cache-Control: no-cache(服务端禁止客户端缓存页面数据)
  Pragma: no-cache(服务端禁止客户端缓存页面数据)
  Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)
  Date: Tue, 18 Jul 2017 12:18:03 GMT(服务端响应客户端的时间)
posted @ 2019-07-13 23:58  孟小孩  阅读(487)  评论(0编辑  收藏  举报