Android之app作为服务器解决跨域问题

时间:2025-04-04 22:42:30

1 问题

APP用socket写了服务器,然后PC发送请求到APP出现跨域问题。

 

 

 

 

 

 

 

2 解决办法

在APP用socket服务器返回头里面添加如下关键代码

  1. header="Content-Type: "+ JSON_TYPE + "; charset=utf-8 \r\n"
  2. + "Connection: close\r\n"
  3. + "Access-Control-Allow-Origin: " + Request.origin + "\r\n"
  4. + "Access-Control-Allow-Headers: *\r\n"
  5. + "Access-Control-Allow-Credentials: true\r\n"
  6. + "Access-Control-Allow-Methods: GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS\r\n"
  7. + "Access-Control-Max-Age: 86400\r\n"
  8. +"Content-length: "+ length +" \r\n\r\n";


1) Access-Control-Allow-Origin

它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求

 

 

 

 

2) Access-Control-Allow-Headers
可支持的请求首部名字。请求头会列出所有支持的首部列表,用逗号隔开。
注意以下这些特定的首部是一直允许的:{{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Language")}}, {{HTTPHeader("Content-Language")}}, {{HTTPHeader("Content-Type")}} (但只在其值属于 MIME 类型 application/x-www-form-urlencoded, multipart/form-data 或 text/plain中的一种时)。这些被称作{{Glossary("simple headers")}},你无需特意声明它们。

 

 

 

3) Access-Control-Allow-Credentials
设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器,如果服务器不要浏览器发送Cookie,删除这个字段就行
如果要发送Cookie,Access-Control-Allow-Origin就不能设为星号,必须指定明确的、与请求网页一致的域名

 


4) Access-Control-Allow-Methods
该字段必需,它的值是逗号分隔的一个字符串,表明服务器支持的所有跨域请求的方法。注意,返回的是所有支持的方法,而不单是浏览器请求的那个方法。这是为了避免多次"预检"请求。