>웹 프론트엔드 >JS 튜토리얼 >AJAX_javascript 기술의 도메인 간 액세스에서 '권한 없음' 오류 해결

AJAX_javascript 기술의 도메인 간 액세스에서 '권한 없음' 오류 해결

WBOY
WBOY원래의
2016-05-16 19:01:391348검색

동일 도메인이 아닌 웹사이트에 대한 액세스는 금지됩니다. http://www.google.cn에 액세스하는 예는




이 코드를 test.html에 직접 저장하세요. 로컬로 IE로 여는 데는 문제가 없지만 서버에 코드를 업로드한 후 문제가 발생합니다. JS에서 "권한 없음" 오류 메시지가 표시됩니다!!! 이 문제를 해결하는 방법은 무엇입니까?
다음에 대해 생각해 보세요. 동일 도메인이 아닌 주소에는 액세스할 수 없으므로 동일한 도메인에 있는 주소에만 액세스할 수 있습니다. 같은 도메인? 우리는 여전히 AJAX를 생각하지만 이 AJAX는 서버 측에서 실행됩니다.
일반적인 아이디어는 다음과 같습니다. 먼저 getPage.asp와 같은 AJAX를 사용하여 자신의 사이트에 있는 파일에 URL을 제출합니다---다시 전달합니다. getPage.asp 서버 XMLHTTP는 제출된 URL에 액세스합니다---얻은 콘텐츠를 URL이 제출된 페이지로 반환합니다. 콘텐츠를 표시합니다
test.html 파일부터 시작하여 코드 구성을 시작하겠습니다




다음과 같은 getpage.asp 파일이 있습니다(참고: 문자 왜곡을 방지하려면 이 파일을 UTF-8 형식으로 저장해야 함).

response.charset=" UTF-8"
reg="
/]*). /{0,1}>"
'함수 이름: GetResStr
'함수 : 지정된 URL의 HTML 코드를 가져옵니다
' 매개변수: URL - 가져올 URL
function GetResStr(URL)
err.clear
dim ResBody,ResStr,PageCode,ReturnStr
Set Http=createobject("MiCROSOFT.XMLHTTP")
Http.open "GET",URL,False
Http.Send()
If Http.Readystate =4 Then
If Http.status= 200 그렇다면
ResStr=http.responseText
ResBody =http.responseBody
PageCode=GetCode(ResStr,reg)
ReturnStr=BytesToBstr(http.responseBody,PageCode)
GetResStr=ReturnStr
End If
End If
End Function

'함수 이름: BytesToBstr
'함수: 바이너리 데이터를 문자로 변환
'매개 변수: 본문-바이너리 데이터, Cset-텍스트 인코딩 method
Function BytesToBstr(Body,Cset)
Dim Objstream
Set Objstream = CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream .Open
objstream.Write body
objstream. Position = 0
objstream.Type = 2
objstream.Charset =Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = Nothing
End Function

'함수 이름: GetCode
'함수: 바이너리를 문자로 변환
'매개변수: 쿼리할 문자열-문자열, regstr-정규식
함수 GetCode(str,regstr)
Dim Reg, serStr
set Reg= new RegExp
Reg.IgnoreCase = True
Reg.MultiLine = True
Reg.Pattern =regstr
if Reg.test(str) then '일치하는 항목이 있는 경우
Set Cols = Reg.Execute(str)
serStr=Cols(0).SubMatches(0) '첫 번째로 일치하는 항목 사용
else' 그렇지 않으면 약간 경제적인 Lazy 방법인 기본값 gb2312를 지정합니다. 페이지에서 인코딩 형식을 제공하지 않으면
serStr="gb2312"
end if
GetCode=serStr을 아는 것이 정말 번거롭습니다.
end function

dim url:url =request.querystring("url")
response.write GetResStr(URL)
%>

코드가 정리되어 있습니다. 실험 후 http://www.google.cn의 콘텐츠가 성공적으로 추출되었습니다. !!!!이것은 "권한 없음" 문제를 해결할 수 있습니다.
사실 간단한 getpage.asp는 구할 수 있지만 js처럼 DOM을 동적으로 처리할 수는 없습니다. 첫 번째 방법을 사용하여 http://www.baidu.com에 액세스하면 Baidu 인코딩이 GB2312이고 XMLHTTP가 UTF-8 인코딩 형식을 반환하기 때문에 잘못된 문자가 나타납니다. 두 번째 방법을 사용하면 인코딩 형식을 정의하는 사이트에서 정상적으로 정보를 반환할 수 있는 한 이러한 문제가 발생하지 않습니다(특수 인코딩을 사용하는 일부 사이트는 포함되지 않음).

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.